[initial version from tizen_3.0] 64/115064/1
authorzy123.yuan <zy123.yuan@samsung.com>
Thu, 16 Feb 2017 07:36:55 +0000 (15:36 +0800)
committerzy123.yuan <zy123.yuan@samsung.com>
Thu, 16 Feb 2017 07:37:41 +0000 (15:37 +0800)
Change-Id: I586e1f67f74b8ec6de4b10707ce404a98ddc04b9
Signed-off-by: zy123.yuan <zy123.yuan@samsung.com>
1889 files changed:
LICENSE [new file with mode: 0644]
OWNERS [new file with mode: 0644]
README.md [new file with mode: 0644]
VERSION [new file with mode: 0644]
doc/Behavior_Test_Tool_Developer_Guide.md [new file with mode: 0644]
doc/img/Behavior_Test_Tool_Developer_Guide_1.png [new file with mode: 0644]
doc/img/Behavior_Test_Tool_Developer_Guide_2.png [new file with mode: 0644]
doc/img/Behavior_Test_Tool_Developer_Guide_3.png [new file with mode: 0644]
doc/img/Behavior_Test_Tool_Developer_Guide_4.png [new file with mode: 0644]
ivi/LICENSE [new file with mode: 0644]
ivi/README.md [new file with mode: 0644]
ivi/config.xml [new file with mode: 0644]
ivi/css/images/COPYING [new file with mode: 0644]
ivi/css/images/fail.png [new file with mode: 0644]
ivi/css/images/jquery/COPYING [new file with mode: 0644]
ivi/css/images/jquery/ajax-loader.gif [new file with mode: 0644]
ivi/css/images/jquery/icons-18-black.png [new file with mode: 0644]
ivi/css/images/jquery/icons-18-white.png [new file with mode: 0644]
ivi/css/images/jquery/icons-36-black.png [new file with mode: 0644]
ivi/css/images/jquery/icons-36-white.png [new file with mode: 0644]
ivi/css/images/pass.png [new file with mode: 0644]
ivi/css/jquery.mobile.css [new file with mode: 0644]
ivi/css/main.css [new file with mode: 0644]
ivi/icon.png [new file with mode: 0644]
ivi/index.html [new file with mode: 0644]
ivi/inst.apk.py [new file with mode: 0755]
ivi/inst.wgt.py [new file with mode: 0755]
ivi/inst.xpk.py [new file with mode: 0755]
ivi/js/main.js [new file with mode: 0644]
ivi/js/tests.js [new file with mode: 0644]
ivi/js/thirdparty/jquery.js [new file with mode: 0644]
ivi/js/thirdparty/jquery.mobile.js [new file with mode: 0644]
ivi/manifest.json [new file with mode: 0644]
ivi/res/css/blue-100x100.css [new file with mode: 0644]
ivi/res/css/test.css [new file with mode: 0644]
ivi/res/css/testkit/COPYING [new file with mode: 0644]
ivi/res/css/testkit/tests.css [new file with mode: 0644]
ivi/res/css/w3c/COPYING [new file with mode: 0644]
ivi/res/css/w3c/a-green.css [new file with mode: 0644]
ivi/res/css/w3c/canvas-index.css [new file with mode: 0644]
ivi/res/font/w3c/COPYING [new file with mode: 0644]
ivi/res/font/w3c/CanvasTest.ttf [new file with mode: 0644]
ivi/res/font/w3c/csstest-basic-bold.ttf [new file with mode: 0644]
ivi/res/font/webkit/Ahem.woff [new file with mode: 0644]
ivi/res/font/webkit/COPYING [new file with mode: 0644]
ivi/res/images/COPYING [new file with mode: 0644]
ivi/res/images/blue-100x100.png [new file with mode: 0644]
ivi/res/images/green-100x100.png [new file with mode: 0644]
ivi/res/images/meego/COPYING [new file with mode: 0644]
ivi/res/images/meego/PNG_512x512_318Kb_BBB.png [new file with mode: 0644]
ivi/res/images/red-100x100.png [new file with mode: 0644]
ivi/res/images/testkit/COPYING [new file with mode: 0644]
ivi/res/images/testkit/back_top.png [new file with mode: 0644]
ivi/res/images/w3c/1x1-white.png [new file with mode: 0644]
ivi/res/images/w3c/COPYING [new file with mode: 0644]
ivi/res/images/webkit/COPYING [new file with mode: 0644]
ivi/res/images/webkit/ring.png [new file with mode: 0644]
ivi/res/js/csp.js [new file with mode: 0644]
ivi/res/js/reportcspviolation.cgi [new file with mode: 0755]
ivi/res/js/test.js [new file with mode: 0644]
ivi/res/js/test81.js [new file with mode: 0644]
ivi/res/js/test83.js [new file with mode: 0644]
ivi/res/js/testkit/COPYING [new file with mode: 0644]
ivi/res/js/testkit/application.js [new file with mode: 0644]
ivi/res/media/khronos/COPYING [new file with mode: 0644]
ivi/res/media/khronos/red-green.theora.ogv [new file with mode: 0644]
ivi/res/media/meego/3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp [new file with mode: 0644]
ivi/res/media/meego/COPYING [new file with mode: 0644]
ivi/res/media/meego/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 [new file with mode: 0644]
ivi/res/media/meego/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 [new file with mode: 0644]
ivi/subtestresult.xml [new file with mode: 0644]
ivi/suite.json [new file with mode: 0644]
ivi/testcase.xsl [new file with mode: 0644]
ivi/testresult.xsl [new file with mode: 0644]
ivi/tests.android.xml [new file with mode: 0644]
ivi/tests.css [new file with mode: 0644]
ivi/tests.full.xml [new file with mode: 0644]
ivi/tests.tizen.xml [new file with mode: 0644]
ivi/tests/2D3DAnimation/css/style.css [new file with mode: 0644]
ivi/tests/2D3DAnimation/index.html [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/COPYING [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/SpinningBox.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/khronos/COPYING [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/khronos/J3DI.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/khronos/J3DIMath.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/khronos/webgl-debug.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/khronos/webgl-utils.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/main.js [new file with mode: 0644]
ivi/tests/2D3DAnimation/js/slider.tooltip.js [new file with mode: 0644]
ivi/tests/Accelerometer/index.html [new file with mode: 0644]
ivi/tests/Accelerometer/js/main.js [new file with mode: 0644]
ivi/tests/Alarm/NOTICE [new file with mode: 0644]
ivi/tests/Alarm/index.html [new file with mode: 0755]
ivi/tests/Alarm/js/main.js [new file with mode: 0755]
ivi/tests/Alarm/res/TestAlarm [new file with mode: 0644]
ivi/tests/AppControlExtending/index.html [new file with mode: 0644]
ivi/tests/AppControlExtending/js/main.js [new file with mode: 0644]
ivi/tests/AppControlExtending/res/app_control_custom_wgt [new file with mode: 0644]
ivi/tests/AppControlExtending/res/app_control_regular_wgt [new file with mode: 0644]
ivi/tests/Application/NOTICE [new file with mode: 0644]
ivi/tests/Application/index.html [new file with mode: 0755]
ivi/tests/Application/js/main.js [new file with mode: 0644]
ivi/tests/Application/res/audio.aac [new file with mode: 0644]
ivi/tests/Application/res/audio.amr [new file with mode: 0644]
ivi/tests/Application/res/audio.mp3 [new file with mode: 0644]
ivi/tests/Application/res/audio.wav [new file with mode: 0644]
ivi/tests/Application/res/iconA.png [new file with mode: 0644]
ivi/tests/Application/res/iconV.png [new file with mode: 0644]
ivi/tests/Application/res/image.bmp [new file with mode: 0644]
ivi/tests/Application/res/image.gif [new file with mode: 0644]
ivi/tests/Application/res/image.jpeg [new file with mode: 0644]
ivi/tests/Application/res/image.png [new file with mode: 0644]
ivi/tests/Application/res/video.3gp [new file with mode: 0644]
ivi/tests/Application/res/video.mp4 [new file with mode: 0755]
ivi/tests/ApplicationInvisible/css/main.css [new file with mode: 0644]
ivi/tests/ApplicationInvisible/index.html [new file with mode: 0644]
ivi/tests/ApplicationInvisible/js/main.js [new file with mode: 0644]
ivi/tests/BatteryStatus/index.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/COPYING [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-charging-manual.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-created.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-discharging-manual.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-full.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-plugged-in-manual.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/battery-unplugged-manual.html [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/countdown.js [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/prime.js [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/testharness.css [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/testharness.js [new file with mode: 0644]
ivi/tests/BatteryStatus/w3c/testharnessreport.js [new file with mode: 0644]
ivi/tests/Bluetooth/NOTICE [new file with mode: 0644]
ivi/tests/Bluetooth/index.html [new file with mode: 0755]
ivi/tests/Bluetooth/js/main.js [new file with mode: 0755]
ivi/tests/CSP/index.html [new file with mode: 0644]
ivi/tests/CSP/js/main.js [new file with mode: 0644]
ivi/tests/CSP/js/tests.js [new file with mode: 0644]
ivi/tests/CSP/res/csp-asterisk.html [new file with mode: 0644]
ivi/tests/CSP/res/csp-asterisk.wgt [new file with mode: 0644]
ivi/tests/CSP/res/csp-cross-origin.html [new file with mode: 0644]
ivi/tests/CSP/res/csp-cross-origin.wgt [new file with mode: 0644]
ivi/tests/CSP/res/csp-none.html [new file with mode: 0644]
ivi/tests/CSP/res/csp-none.wgt [new file with mode: 0644]
ivi/tests/CSP/res/csp-self.html [new file with mode: 0644]
ivi/tests/CSP/res/csp-self.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-policy-by-directives-csp.html [new file with mode: 0644]
ivi/tests/CSP/res/default-policy-by-directives-csp.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-policy-by-directives-report-only.html [new file with mode: 0644]
ivi/tests/CSP/res/default-policy-by-directives-report-only.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-src_asterisk.html [new file with mode: 0644]
ivi/tests/CSP/res/default-src_asterisk.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-src_cross_origin.html [new file with mode: 0644]
ivi/tests/CSP/res/default-src_cross_origin.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-src_none.html [new file with mode: 0644]
ivi/tests/CSP/res/default-src_none.wgt [new file with mode: 0644]
ivi/tests/CSP/res/default-src_self.html [new file with mode: 0644]
ivi/tests/CSP/res/default-src_self.wgt [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-ext.html [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-ext.wgt [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-inline.html [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-inline.wgt [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-int.html [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-empty-int.wgt [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.html [new file with mode: 0644]
ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt [new file with mode: 0644]
ivi/tests/CSP/res/script-src_inline_eval.html [new file with mode: 0644]
ivi/tests/CSP/res/script-src_inline_eval.wgt [new file with mode: 0644]
ivi/tests/CSP/res/script-src_none.html [new file with mode: 0644]
ivi/tests/CSP/res/script-src_none.wgt [new file with mode: 0644]
ivi/tests/CSP/res/style-src_self.html [new file with mode: 0644]
ivi/tests/CSP/res/style-src_self.wgt [new file with mode: 0644]
ivi/tests/CSS-AnimTransfBackgBordFont/css/style.css [new file with mode: 0644]
ivi/tests/CSS-AnimTransfBackgBordFont/index.html [new file with mode: 0644]
ivi/tests/CSSAnimation/css/style.css [new file with mode: 0644]
ivi/tests/CSSAnimation/index.html [new file with mode: 0644]
ivi/tests/CSSAnimation/js/COPYING [new file with mode: 0644]
ivi/tests/CSSAnimation/js/transition-test-helpers.js [new file with mode: 0644]
ivi/tests/CSSStyle/css/style.css [new file with mode: 0644]
ivi/tests/CSSStyle/index.html [new file with mode: 0644]
ivi/tests/CSSStyle/js/jquery/COPYING [new file with mode: 0644]
ivi/tests/CSSStyle/js/jquery/slider.tooltip.js [new file with mode: 0644]
ivi/tests/CSSStyle/js/main.js [new file with mode: 0644]
ivi/tests/Camera/index.html [new file with mode: 0644]
ivi/tests/Camera/js/main.js [new file with mode: 0644]
ivi/tests/CameraViaUserMedia/index.html [new file with mode: 0644]
ivi/tests/CameraViaUserMedia/js/main.js [new file with mode: 0644]
ivi/tests/Canvas-PicRotaScaleTransfVampix/COPYING [new file with mode: 0644]
ivi/tests/Canvas-PicRotaScaleTransfVampix/flowser.png [new file with mode: 0644]
ivi/tests/Canvas-PicRotaScaleTransfVampix/index.html [new file with mode: 0644]
ivi/tests/Canvas-PicRotaScaleTransfVampix/js/main.js [new file with mode: 0644]
ivi/tests/Clipboard/index.html [new file with mode: 0644]
ivi/tests/Clipboard/js/main.js [new file with mode: 0644]
ivi/tests/Clipboard/res/Clipboard [new file with mode: 0644]
ivi/tests/ConfigurationExtension/index.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/js/main.js [new file with mode: 0644]
ivi/tests/ConfigurationExtension/js/tests.js [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/application-content.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/application-content.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-bs-disable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-bs-disable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-cm-disable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-cm-disable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-cm-enable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-cm-enable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-default.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-default.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.html [new file with mode: 0644]
ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt [new file with mode: 0644]
ivi/tests/DataSync/NOTICE [new file with mode: 0644]
ivi/tests/DataSync/index.html [new file with mode: 0755]
ivi/tests/DataSync/js/main.js [new file with mode: 0755]
ivi/tests/Download/NOTICE [new file with mode: 0644]
ivi/tests/Download/css/style.css [new file with mode: 0644]
ivi/tests/Download/index.html [new file with mode: 0755]
ivi/tests/Download/js/jqueryprogressbar.js [new file with mode: 0644]
ivi/tests/Download/js/main.js [new file with mode: 0644]
ivi/tests/DragandDrop/index.html [new file with mode: 0644]
ivi/tests/DragandDrop/js/main.js [new file with mode: 0644]
ivi/tests/DragandDrop/res/DragandDrop [new file with mode: 0644]
ivi/tests/DynamicBox/index.html [new file with mode: 0644]
ivi/tests/DynamicBox/js/main.js [new file with mode: 0644]
ivi/tests/DynamicBox/res/LICENSE.Flora [new file with mode: 0644]
ivi/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-box-size-decoration.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-box-size-preview.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-load-event.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-mouse-event-false.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-mouse-event-true.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-sample.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/app-widget-visibility-event.wgt [new file with mode: 0644]
ivi/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk [new file with mode: 0644]
ivi/tests/FileReader/css/style.css [new file with mode: 0644]
ivi/tests/FileReader/index.html [new file with mode: 0644]
ivi/tests/FileReader/js/main.js [new file with mode: 0644]
ivi/tests/FullScreen/index.html [new file with mode: 0644]
ivi/tests/FullScreen/js/main.js [new file with mode: 0644]
ivi/tests/Gamepad/index.html [new file with mode: 0644]
ivi/tests/Gamepad/res/GamePadButton_basic-manual.html [new file with mode: 0644]
ivi/tests/Gamepad/res/GamePad_basic-manual.html [new file with mode: 0644]
ivi/tests/Gamepad/res/GamePad_connected-manual.html [new file with mode: 0644]
ivi/tests/Gamepad/res/GamepadEvent_gamepadconnected-manual.html [new file with mode: 0644]
ivi/tests/Gamepad/res/GamepadEvent_gamepaddisconnected-manual.html [new file with mode: 0644]
ivi/tests/HybridApplication/index.html [new file with mode: 0644]
ivi/tests/HybridApplication/js/main.js [new file with mode: 0644]
ivi/tests/HybridApplication/res/armv7/HybridApp1 [new file with mode: 0644]
ivi/tests/HybridApplication/res/armv7/HybridApp2 [new file with mode: 0644]
ivi/tests/HybridApplication/res/x86/HybridApp1 [new file with mode: 0644]
ivi/tests/HybridApplication/res/x86/HybridApp2 [new file with mode: 0644]
ivi/tests/LocationGPS/css/style.css [new file with mode: 0644]
ivi/tests/LocationGPS/index.html [new file with mode: 0644]
ivi/tests/LocationGPS/js/main.js [new file with mode: 0644]
ivi/tests/MediaPlayback/css/style.css [new file with mode: 0644]
ivi/tests/MediaPlayback/index.html [new file with mode: 0644]
ivi/tests/MediaPlayback/js/jquery/COPYING [new file with mode: 0644]
ivi/tests/MediaPlayback/js/jquery/slider.tooltip.js [new file with mode: 0644]
ivi/tests/MediaPlayback/js/main.js [new file with mode: 0644]
ivi/tests/MessagingEmail/NOTICE [new file with mode: 0644]
ivi/tests/MessagingEmail/index.html [new file with mode: 0755]
ivi/tests/MessagingEmail/js/main.js [new file with mode: 0644]
ivi/tests/MessagingSMSMMS/NOTICE [new file with mode: 0644]
ivi/tests/MessagingSMSMMS/index.html [new file with mode: 0755]
ivi/tests/MessagingSMSMMS/js/main.js [new file with mode: 0755]
ivi/tests/MessagingSMSMMS/res/image.png [new file with mode: 0644]
ivi/tests/NFC/NOTICE [new file with mode: 0644]
ivi/tests/NFC/index.html [new file with mode: 0644]
ivi/tests/NFC/js/main.js [new file with mode: 0755]
ivi/tests/Notification/NOTICE [new file with mode: 0644]
ivi/tests/Notification/index.html [new file with mode: 0644]
ivi/tests/Notification/js/main.js [new file with mode: 0644]
ivi/tests/Notification/res/TestNotification [new file with mode: 0644]
ivi/tests/Notification/res/noti.png [new file with mode: 0644]
ivi/tests/Notification/res/noti1.png [new file with mode: 0644]
ivi/tests/Notification/res/noti2.png [new file with mode: 0644]
ivi/tests/Notification/res/noti3.png [new file with mode: 0644]
ivi/tests/Notification/res/noti4.png [new file with mode: 0644]
ivi/tests/Notification/res/notification.wav [new file with mode: 0644]
ivi/tests/Package/NOTICE [new file with mode: 0644]
ivi/tests/Package/index.html [new file with mode: 0755]
ivi/tests/Package/js/main.js [new file with mode: 0644]
ivi/tests/Package/res/TestPackage1 [new file with mode: 0644]
ivi/tests/Package/res/TestPackage2 [new file with mode: 0644]
ivi/tests/PackageManagement/index.html [new file with mode: 0644]
ivi/tests/PackageManagement/js/main.js [new file with mode: 0644]
ivi/tests/PackageManagement/js/tests.js [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget1.html [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget1.wgt [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget2.html [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget2.wgt [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget4.html [new file with mode: 0644]
ivi/tests/PackageManagement/res/Sample-widget4.wgt [new file with mode: 0644]
ivi/tests/PackageManagement/res/widget-version-1-1.wgt [new file with mode: 0644]
ivi/tests/PackageManagement/res/widget-version-1.html [new file with mode: 0644]
ivi/tests/PackageManagement/res/widget-version-1.wgt [new file with mode: 0644]
ivi/tests/PageVisibility/index.html [new file with mode: 0755]
ivi/tests/PageVisibility/js/main.js [new file with mode: 0644]
ivi/tests/Power/NOTICE [new file with mode: 0644]
ivi/tests/Power/index.html [new file with mode: 0755]
ivi/tests/Power/js/main.js [new file with mode: 0644]
ivi/tests/Push/NOTICE [new file with mode: 0644]
ivi/tests/Push/index.html [new file with mode: 0755]
ivi/tests/Push/js/main.js [new file with mode: 0755]
ivi/tests/Push/res/TestPush [new file with mode: 0644]
ivi/tests/SVGTransformation/index.html [new file with mode: 0644]
ivi/tests/Security/css/style.css [new file with mode: 0644]
ivi/tests/Security/index.html [new file with mode: 0644]
ivi/tests/Security/js/main.js [new file with mode: 0644]
ivi/tests/SystemInfo/NOTICE [new file with mode: 0644]
ivi/tests/SystemInfo/index.html [new file with mode: 0755]
ivi/tests/SystemInfo/js/main.js [new file with mode: 0755]
ivi/tests/SystemSettingIncomingCall/NOTICE [new file with mode: 0644]
ivi/tests/SystemSettingIncomingCall/index.html [new file with mode: 0755]
ivi/tests/SystemSettingIncomingCall/js/main.js [new file with mode: 0644]
ivi/tests/SystemSettingScreen/NOTICE [new file with mode: 0644]
ivi/tests/SystemSettingScreen/index.html [new file with mode: 0755]
ivi/tests/SystemSettingScreen/js/main.js [new file with mode: 0644]
ivi/tests/Telephony/index.html [new file with mode: 0644]
ivi/tests/Telephony/js/main.js [new file with mode: 0644]
ivi/tests/Template/index.html [new file with mode: 0644]
ivi/tests/Touch/css/style.css [new file with mode: 0644]
ivi/tests/Touch/img/btn_down.png [new file with mode: 0644]
ivi/tests/Touch/img/btn_up.png [new file with mode: 0644]
ivi/tests/Touch/img/scroll.png [new file with mode: 0644]
ivi/tests/Touch/index.html [new file with mode: 0644]
ivi/tests/Touch/js/main.js [new file with mode: 0644]
ivi/tests/UserAgentString/index.html [new file with mode: 0644]
ivi/tests/Vibration/css/style.css [new file with mode: 0644]
ivi/tests/Vibration/index.html [new file with mode: 0644]
ivi/tests/Vibration/js/jquery/COPYING [new file with mode: 0644]
ivi/tests/Vibration/js/jquery/slider.tooltip.js [new file with mode: 0644]
ivi/tests/Vibration/js/main.js [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/config.xml [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/icon.png [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/index.html [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/manifest.json [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/style.css [new file with mode: 0644]
ivi/tests/Viewport/ViewportTest/support.js [new file with mode: 0644]
ivi/tests/Viewport/index.html [new file with mode: 0644]
ivi/tests/WOFF/css/style.css [new file with mode: 0644]
ivi/tests/WOFF/index.html [new file with mode: 0644]
ivi/tests/WRTSupport/index.html [new file with mode: 0644]
ivi/tests/WRTSupport/js/main.js [new file with mode: 0644]
ivi/tests/WRTSupport/js/tests.js [new file with mode: 0644]
ivi/tests/WRTSupport/res/lifecycle-unload-event.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/lifecycle-unload-event.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-localization.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-localization.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-uri-schemes-mailto.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-uri-schemes-mailto.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-uri-schemes.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-uri-schemes.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-widget-access-policy.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/other-widget-access-policy.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/protection-encryption-check.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/protection-encryption-check.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/security-policy.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/security-policy.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi-all.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi-all.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi-subdomains.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi-subdomains.wgt [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi.html [new file with mode: 0644]
ivi/tests/WRTSupport/res/url-access-multi.wgt [new file with mode: 0644]
ivi/tests/WRTUI/index.html [new file with mode: 0644]
ivi/tests/WRTUI/js/main.js [new file with mode: 0644]
ivi/tests/WRTUI/js/tests.js [new file with mode: 0644]
ivi/tests/WRTUI/res/multiple-browsing-context.html [new file with mode: 0644]
ivi/tests/WRTUI/res/multiple-browsing-context.wgt [new file with mode: 0644]
ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.html [new file with mode: 0644]
ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt [new file with mode: 0644]
ivi/tests/WRTUI/res/view-mode-maximized-rotation.html [new file with mode: 0644]
ivi/tests/WRTUI/res/view-mode-maximized-rotation.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/LICENSE.Apache-2.0 [new file with mode: 0755]
mobile/tct-behavior-tests/LICENSE.BSD-3 [new file with mode: 0755]
mobile/tct-behavior-tests/LICENSE.CC-BY-3.0 [new file with mode: 0755]
mobile/tct-behavior-tests/README [new file with mode: 0755]
mobile/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf [new file with mode: 0755]
mobile/tct-behavior-tests/askpolicy.sh [new file with mode: 0755]
mobile/tct-behavior-tests/config.xml [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/ajax-loader.gif [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/fail.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/icons-18-black.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/icons-18-white.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/icons-36-black.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/icons-36-white.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/images/pass.png [new file with mode: 0755]
mobile/tct-behavior-tests/css/jquery.mobile.css [new file with mode: 0755]
mobile/tct-behavior-tests/css/main.css [new file with mode: 0755]
mobile/tct-behavior-tests/icon.png [new file with mode: 0755]
mobile/tct-behavior-tests/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/inst.apk.py [new file with mode: 0755]
mobile/tct-behavior-tests/inst.wgt.py [new file with mode: 0755]
mobile/tct-behavior-tests/inst.xpk.py [new file with mode: 0755]
mobile/tct-behavior-tests/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/js/thirdparty/jquery.js [new file with mode: 0755]
mobile/tct-behavior-tests/js/thirdparty/jquery.mobile.js [new file with mode: 0755]
mobile/tct-behavior-tests/manifest.json [new file with mode: 0755]
mobile/tct-behavior-tests/pack.py [new file with mode: 0755]
mobile/tct-behavior-tests/packaging/behavior.changes [new file with mode: 0755]
mobile/tct-behavior-tests/packaging/behavior.spec [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/a-green.css [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/blue-100x100.css [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/canvas-index.css [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/test.css [new file with mode: 0755]
mobile/tct-behavior-tests/res/css/tests.css [new file with mode: 0755]
mobile/tct-behavior-tests/res/font/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/res/font/CanvasTest.ttf [new file with mode: 0755]
mobile/tct-behavior-tests/res/font/csstest-basic-bold.ttf [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/application.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/bluetooth.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/download.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/systeminfo.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/wrtgeolocation.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/html/wrtwebnotify.html [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/1x1-white.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/back_top.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/blue-100x100.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/green-100x100.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/red-100x100.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/images/ring.png [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/application.js [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/csp.js [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/reportcspviolation.cgi [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/test.js [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/test81.js [new file with mode: 0755]
mobile/tct-behavior-tests/res/js/test83.js [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/demo_sub.vtt [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/movie_5.mp4 [new file with mode: 0755]
mobile/tct-behavior-tests/res/media/red-green.theora.ogv [new file with mode: 0755]
mobile/tct-behavior-tests/subtestresult.xml [new file with mode: 0755]
mobile/tct-behavior-tests/suite.json [new file with mode: 0755]
mobile/tct-behavior-tests/testcase.xsl [new file with mode: 0755]
mobile/tct-behavior-tests/testresult.xsl [new file with mode: 0755]
mobile/tct-behavior-tests/tests.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests.full.xml [new file with mode: 0755]
mobile/tct-behavior-tests/tests.xml [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Accelerometer/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Accelerometer/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Alarm/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Alarm/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Alarm/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Alarm/res/TestAlarm [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/js/main1.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/js/main2.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControlExtending/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControlExtending/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/audio.aac [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/audio.amr [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/audio.mp3 [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/audio.wav [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/iconA.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/iconV.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/image.bmp [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/image.gif [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/image.jpeg [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/image.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/video.3gp [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Application/res/video.mp4 [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationInvisible/css/main.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationInvisible/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationInvisible/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Bluetooth/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Bluetooth/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Bluetooth/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-none.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-none.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-self.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/csp-self.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_none.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_none.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_self.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/default-src_self.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/movie_5.mp4 [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src_none.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/script-src_none.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/style-src_self.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSP/res/style-src_self.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSAnimation/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSAnimation/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSAnimation/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSStyle/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSStyle/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSStyle/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSStyle/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Camera/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Camera/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CameraViaUserMedia/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Clipboard/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Clipboard/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Clipboard/res/Clipboard [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CordovaSupport/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CordovaSupport/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CordovaSupport/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DataSync/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DataSync/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DataSync/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Download/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Download/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Download/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Download/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DragandDrop/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DragandDrop/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DragandDrop/res/DragandDrop [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk [new file with mode: 0755]
mobile/tct-behavior-tests/tests/FileReader/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/FileReader/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/FileReader/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/FullScreen/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/FullScreen/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HTML5Forms/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HTML5Forms/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HTML5Forms/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HybridApplication/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HybridApplication/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt [new file with mode: 0644]
mobile/tct-behavior-tests/tests/LocationGPS/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/LocationGPS/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/LocationGPS/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MediaPlayback/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MediaPlayback/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MediaPlayback/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MediaPlayback/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingEmail/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingEmail/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingEmail/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingSMSMMS/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/NFC/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/NFC/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/NFC/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/TestNotification [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/noti.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/noti1.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/noti2.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/noti3.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/noti4.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Notification/res/notification.wav [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Package/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Package/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Package/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Package/res/TestPackage1 [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Package/res/TestPackage2 [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PageVisibility/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/PageVisibility/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Power/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Power/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Power/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Push/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Push/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Push/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Push/res/TestPush [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SVGTransformation/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Security/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Security/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Security/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemInfo/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemInfo/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemInfo/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingScreen/NOTICE [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingScreen/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/SystemSettingScreen/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Template/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/img/btn_down.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/img/btn_up.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/img/scroll.png [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Touch/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/UserAgentString/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Vibration/css/style.css [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Vibration/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Vibration/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Vibration/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/VideoTrack/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/VideoTrack/js/COPYING [new file with mode: 0755]
mobile/tct-behavior-tests/tests/VideoTrack/js/slider.tooltip.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Viewport/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Viewport/test/device.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Viewport/test/scale.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/Viewport/test/user-scalable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/index.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/js/main.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/js/tests.js [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html [new file with mode: 0755]
mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt [new file with mode: 0755]
tools/build/pack.py [new file with mode: 0755]
tools/coverage/stats.py [new file with mode: 0755]
tools/crosswalk/README.md [new file with mode: 0644]
tools/format/json_formatter [new file with mode: 0755]
tools/make_xpk.py [new file with mode: 0755]
tools/template/reftest_reference_ref.html [new file with mode: 0644]
tools/template/reftest_test_case.html [new file with mode: 0644]
tools/template/script_test_case.html [new file with mode: 0644]
tools/xml/README.md [new file with mode: 0644]
tools/xml/csv2xml.py [new file with mode: 0755]
tools/xml/xml2csv.py [new file with mode: 0755]
tools/xml/xmlverifier.py [new file with mode: 0755]
tv/tct-behavior-tests/LICENSE.Apache-2.0 [new file with mode: 0755]
tv/tct-behavior-tests/LICENSE.BSD-3 [new file with mode: 0755]
tv/tct-behavior-tests/LICENSE.CC-BY-3.0 [new file with mode: 0755]
tv/tct-behavior-tests/Makefile.am [new file with mode: 0755]
tv/tct-behavior-tests/README [new file with mode: 0755]
tv/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf [new file with mode: 0755]
tv/tct-behavior-tests/askpolicy.sh [new file with mode: 0755]
tv/tct-behavior-tests/autogen [new file with mode: 0755]
tv/tct-behavior-tests/config.xml [new file with mode: 0755]
tv/tct-behavior-tests/configure.ac [new file with mode: 0755]
tv/tct-behavior-tests/css/images/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/css/images/ajax-loader.gif [new file with mode: 0755]
tv/tct-behavior-tests/css/images/fail.png [new file with mode: 0755]
tv/tct-behavior-tests/css/images/icons-18-black.png [new file with mode: 0755]
tv/tct-behavior-tests/css/images/icons-18-white.png [new file with mode: 0755]
tv/tct-behavior-tests/css/images/icons-36-black.png [new file with mode: 0755]
tv/tct-behavior-tests/css/images/icons-36-white.png [new file with mode: 0755]
tv/tct-behavior-tests/css/images/pass.png [new file with mode: 0755]
tv/tct-behavior-tests/css/jquery.mobile.css [new file with mode: 0755]
tv/tct-behavior-tests/css/main.css [new file with mode: 0755]
tv/tct-behavior-tests/icon.png [new file with mode: 0755]
tv/tct-behavior-tests/index.html [new file with mode: 0755]
tv/tct-behavior-tests/inst.apk.py [new file with mode: 0755]
tv/tct-behavior-tests/inst.wgt.py [new file with mode: 0755]
tv/tct-behavior-tests/inst.xpk.py [new file with mode: 0755]
tv/tct-behavior-tests/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/js/thirdparty/jquery.js [new file with mode: 0755]
tv/tct-behavior-tests/js/thirdparty/jquery.mobile.js [new file with mode: 0755]
tv/tct-behavior-tests/manifest.json [new file with mode: 0755]
tv/tct-behavior-tests/pack.py [new file with mode: 0755]
tv/tct-behavior-tests/pack.sh [new file with mode: 0755]
tv/tct-behavior-tests/packaging/behavior.changes [new file with mode: 0755]
tv/tct-behavior-tests/packaging/behavior.spec [new file with mode: 0755]
tv/tct-behavior-tests/res/css/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/res/css/a-green.css [new file with mode: 0755]
tv/tct-behavior-tests/res/css/blue-100x100.css [new file with mode: 0755]
tv/tct-behavior-tests/res/css/canvas-index.css [new file with mode: 0755]
tv/tct-behavior-tests/res/css/test.css [new file with mode: 0755]
tv/tct-behavior-tests/res/css/tests.css [new file with mode: 0755]
tv/tct-behavior-tests/res/font/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/res/font/CanvasTest.ttf [new file with mode: 0755]
tv/tct-behavior-tests/res/font/csstest-basic-bold.ttf [new file with mode: 0755]
tv/tct-behavior-tests/res/html/application.html [new file with mode: 0755]
tv/tct-behavior-tests/res/html/bluetooth.html [new file with mode: 0755]
tv/tct-behavior-tests/res/html/download.html [new file with mode: 0755]
tv/tct-behavior-tests/res/html/systeminfo.html [new file with mode: 0755]
tv/tct-behavior-tests/res/html/wrtgeolocation.html [new file with mode: 0755]
tv/tct-behavior-tests/res/html/wrtwebnotify.html [new file with mode: 0755]
tv/tct-behavior-tests/res/images/1x1-white.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/back_top.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/blue-100x100.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/green-100x100.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/red-100x100.png [new file with mode: 0755]
tv/tct-behavior-tests/res/images/ring.png [new file with mode: 0755]
tv/tct-behavior-tests/res/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/res/js/application.js [new file with mode: 0755]
tv/tct-behavior-tests/res/js/csp.js [new file with mode: 0755]
tv/tct-behavior-tests/res/js/reportcspviolation.cgi [new file with mode: 0755]
tv/tct-behavior-tests/res/js/test.js [new file with mode: 0755]
tv/tct-behavior-tests/res/js/test81.js [new file with mode: 0755]
tv/tct-behavior-tests/res/js/test83.js [new file with mode: 0755]
tv/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp [new file with mode: 0755]
tv/tct-behavior-tests/res/media/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 [new file with mode: 0755]
tv/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 [new file with mode: 0755]
tv/tct-behavior-tests/res/media/movie_5.mp4 [new file with mode: 0755]
tv/tct-behavior-tests/res/media/red-green.theora.ogv [new file with mode: 0755]
tv/tct-behavior-tests/subtestresult.xml [new file with mode: 0755]
tv/tct-behavior-tests/suite.json [new file with mode: 0755]
tv/tct-behavior-tests/tct-behavior-tests.spec [new file with mode: 0755]
tv/tct-behavior-tests/testcase.xsl [new file with mode: 0755]
tv/tct-behavior-tests/testresult.xsl [new file with mode: 0755]
tv/tct-behavior-tests/tests.css [new file with mode: 0755]
tv/tct-behavior-tests/tests.full.xml [new file with mode: 0755]
tv/tct-behavior-tests/tests.xml [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Accelerometer/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Accelerometer/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Alarm/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Alarm/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Alarm/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Alarm/res/TestAlarm [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/js/main1.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/js/main2.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControlExtending/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControlExtending/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/audio.aac [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/audio.amr [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/audio.mp3 [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/audio.wav [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/iconA.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/iconV.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/image.bmp [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/image.gif [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/image.jpeg [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/image.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/video.3gp [new file with mode: 0755]
tv/tct-behavior-tests/tests/Application/res/video.mp4 [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationInvisible/css/main.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationInvisible/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationInvisible/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/Bluetooth/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Bluetooth/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Bluetooth/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-none.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-none.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-self.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/csp-self.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_none.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_none.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_self.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/default-src_self.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/movie_5.mp4 [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src_none.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/script-src_none.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/style-src_self.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSP/res/style-src_self.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSAnimation/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSAnimation/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSAnimation/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSStyle/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSStyle/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSStyle/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSStyle/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Camera/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Camera/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CameraViaUserMedia/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Clipboard/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Clipboard/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Clipboard/res/Clipboard [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CordovaSupport/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/CordovaSupport/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CordovaSupport/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DataSync/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/DataSync/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DataSync/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/Download/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Download/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/Download/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Download/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DragandDrop/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DragandDrop/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DragandDrop/res/DragandDrop [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk [new file with mode: 0755]
tv/tct-behavior-tests/tests/FileReader/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/FileReader/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/FileReader/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/FullScreen/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/FullScreen/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/HTML5Forms/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/HTML5Forms/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/HTML5Forms/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/LocationGPS/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/LocationGPS/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/LocationGPS/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/MediaPlayback/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/MediaPlayback/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/MediaPlayback/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/MediaPlayback/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingEmail/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingEmail/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingEmail/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingSMSMMS/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/NFC/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/NFC/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/NFC/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/TestNotification [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/noti.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/noti1.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/noti2.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/noti3.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/noti4.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Notification/res/notification.wav [new file with mode: 0755]
tv/tct-behavior-tests/tests/Package/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Package/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Package/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Package/res/TestPackage1 [new file with mode: 0755]
tv/tct-behavior-tests/tests/Package/res/TestPackage2 [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/PageVisibility/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/PageVisibility/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Power/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Power/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Power/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Push/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/Push/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Push/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Push/res/TestPush [new file with mode: 0755]
tv/tct-behavior-tests/tests/SVGTransformation/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Security/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/Security/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Security/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/res/test-half-memory.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/res/test-hd-image.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemInfo/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemInfo/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemInfo/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingScreen/NOTICE [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingScreen/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/SystemSettingScreen/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Template/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/img/btn_down.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/img/btn_up.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/img/scroll.png [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Touch/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/UserAgentString/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Vibration/css/style.css [new file with mode: 0755]
tv/tct-behavior-tests/tests/Vibration/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Vibration/js/COPYING [new file with mode: 0755]
tv/tct-behavior-tests/tests/Vibration/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/Viewport/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Viewport/test/device.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Viewport/test/scale.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/Viewport/test/user-scalable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/index.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/js/main.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/js/tests.js [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html [new file with mode: 0755]
tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/LICENSE.Apache-2.0 [new file with mode: 0755]
wearable/tct-behavior-tests/LICENSE.BSD-3 [new file with mode: 0755]
wearable/tct-behavior-tests/LICENSE.CC-BY-3.0 [new file with mode: 0755]
wearable/tct-behavior-tests/README [new file with mode: 0755]
wearable/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf [new file with mode: 0755]
wearable/tct-behavior-tests/askpolicy.sh [new file with mode: 0755]
wearable/tct-behavior-tests/config.xml [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/ajax-loader.gif [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/fail.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/icons-18-black.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/icons-18-white.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/icons-36-black.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/icons-36-white.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/images/pass.png [new file with mode: 0755]
wearable/tct-behavior-tests/css/jquery.mobile.css [new file with mode: 0755]
wearable/tct-behavior-tests/css/main.css [new file with mode: 0755]
wearable/tct-behavior-tests/icon.png [new file with mode: 0755]
wearable/tct-behavior-tests/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/inst.apk.py [new file with mode: 0755]
wearable/tct-behavior-tests/inst.wgt.py [new file with mode: 0755]
wearable/tct-behavior-tests/inst.xpk.py [new file with mode: 0755]
wearable/tct-behavior-tests/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/js/thirdparty/jquery.js [new file with mode: 0755]
wearable/tct-behavior-tests/js/thirdparty/jquery.mobile.js [new file with mode: 0755]
wearable/tct-behavior-tests/manifest.json [new file with mode: 0755]
wearable/tct-behavior-tests/pack.py [new file with mode: 0755]
wearable/tct-behavior-tests/packaging/behavior.changes [new file with mode: 0755]
wearable/tct-behavior-tests/packaging/behavior.spec [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/a-green.css [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/blue-100x100.css [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/canvas-index.css [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/test.css [new file with mode: 0755]
wearable/tct-behavior-tests/res/css/tests.css [new file with mode: 0755]
wearable/tct-behavior-tests/res/font/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/res/font/CanvasTest.ttf [new file with mode: 0755]
wearable/tct-behavior-tests/res/font/csstest-basic-bold.ttf [new file with mode: 0755]
wearable/tct-behavior-tests/res/html/application.html [new file with mode: 0755]
wearable/tct-behavior-tests/res/html/bluetooth.html [new file with mode: 0755]
wearable/tct-behavior-tests/res/html/download.html [new file with mode: 0755]
wearable/tct-behavior-tests/res/html/systeminfo.html [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/1x1-white.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/back_top.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/blue-100x100.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/green-100x100.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/red-100x100.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/images/ring.png [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/application.js [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/csp.js [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/reportcspviolation.cgi [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/test.js [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/test81.js [new file with mode: 0755]
wearable/tct-behavior-tests/res/js/test83.js [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/movie_5.mp4 [new file with mode: 0755]
wearable/tct-behavior-tests/res/media/red-green.theora.ogv [new file with mode: 0755]
wearable/tct-behavior-tests/subtestresult.xml [new file with mode: 0755]
wearable/tct-behavior-tests/suite.json [new file with mode: 0755]
wearable/tct-behavior-tests/testcase.xsl [new file with mode: 0755]
wearable/tct-behavior-tests/testresult.xsl [new file with mode: 0755]
wearable/tct-behavior-tests/tests.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests.full.xml [new file with mode: 0755]
wearable/tct-behavior-tests/tests.xml [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Accelerometer/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Accelerometer/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Alarm/NOTICE [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Alarm/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Alarm/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Alarm/res/TestAlarm.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/js/main1.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/js/main2.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControlExtending/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControlExtending/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationInvisible/css/main.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationInvisible/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationInvisible/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-none.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-none.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-self.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/csp-self.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_none.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_none.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_self.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/default-src_self.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/movie_5.mp4 [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/script-src_none.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/script-src_none.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/style-src_self.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSP/res/style-src_self.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSAnimation/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSAnimation/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSAnimation/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSStyle/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSStyle/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSStyle/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSStyle/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Camera/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Camera/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CameraViaUserMedia/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CordovaSupport/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CordovaSupport/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CordovaSupport/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt [new file with mode: 0644]
wearable/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk [new file with mode: 0755]
wearable/tct-behavior-tests/tests/FileReader/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/FileReader/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/FileReader/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/FullScreen/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/FullScreen/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/IMEApplication/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/IMEApplication/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/IMEApplication/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/IMEApplication/res/WebInputMethodEditor.wgt [new file with mode: 0644]
wearable/tct-behavior-tests/tests/IMEApplication/res/ime_application.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/MediaPlayback/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/MediaPlayback/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/MediaPlayback/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/MediaPlayback/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Package/NOTICE [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Package/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Package/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Package/res/TestPackage1.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Package/res/TestPackage2.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PageVisibility/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/PageVisibility/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Power/NOTICE [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Power/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Power/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/SVGTransformation/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Security/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Security/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Security/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/SystemInfo/NOTICE [new file with mode: 0755]
wearable/tct-behavior-tests/tests/SystemInfo/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/SystemInfo/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Template/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/img/btn_down.png [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/img/btn_up.png [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/img/scroll.png [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Touch/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/UserAgentString/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Vibration/css/style.css [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Vibration/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Vibration/js/COPYING [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Vibration/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Viewport/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Viewport/test/device.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Viewport/test/scale.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/Viewport/test/user-scalable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/index.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/js/main.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/js/tests.js [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html [new file with mode: 0755]
wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt [new file with mode: 0755]

diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d9e22f6
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,27 @@
+Copyright (C) 2014 Intel Corporation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  * Neither the name of Intel Corporation nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/OWNERS b/OWNERS
new file mode 100644 (file)
index 0000000..c342e63
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,5 @@
+jenny.q.cao@intel.com
+belem.zhang@intel.com
+cici.x.li@intel.com
+yugang.fan@intel.com
+zhiqiang.zhang@intel.com
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..20b1534
--- /dev/null
+++ b/README.md
@@ -0,0 +1,34 @@
+## Introduction
+
+This is a test suite for Tizen 3.0 Behavior, which includes:
+
+* `behavior/`: behavior test tool
+* `doc/`: see [documentaion](#Documentation) below
+* `tools/`: tools for this test suite
+
+## Documentation
+
+Check out our documents at `doc/`.
+
+For test suite and test case development, please go through the following
+documents firstly:
+
+* `doc/Behavior_Test_Tool_Developer_Guide`
+* `doc/Coding_Style_Guide_CheatSheet`
+
+## Contributing
+
+Move the Web, Write Some Tests!
+
+Absolutely everyone is welcome (and even encouraged) to contribute to test
+development and bug report. No test is too small or too simple, especially
+if it corresponds to something for which you've noted an bug in Crosswalk
+project.
+
+The way to contribute is just as usual.
+
+## License
+
+Except as noted in `COPYING` and/or `NOTICE` files, or as headed with license
+info, test suite source code uses a BSD-style license that can be found in the
+`LICENSE` file.
diff --git a/VERSION b/VERSION
new file mode 100644 (file)
index 0000000..e6e8932
--- /dev/null
+++ b/VERSION
@@ -0,0 +1,4 @@
+{
+    "main-version": "9.37.1.5",
+    "release-version": "1"
+}
diff --git a/doc/Behavior_Test_Tool_Developer_Guide.md b/doc/Behavior_Test_Tool_Developer_Guide.md
new file mode 100644 (file)
index 0000000..422e756
--- /dev/null
@@ -0,0 +1,195 @@
+# Behavior Test Tool Developer Guide\r
+\r
+Version 1.0\r
+\r
+Copyright © 2014 Intel Corporation. All rights reserved. No portions of this document may be reproduced without the written permission of Intel Corporation.\r
+\r
+Intel is a trademark of Intel Corporation in the U.S. and/or other countries.\r
+\r
+Linux is a registered trademark of Linus Torvalds.\r
+\r
+Tizen® is a registered trademark of The Linux Foundation.\r
+\r
+ARM is a registered trademark of ARM Holdings Plc.\r
+\r
+\*Other names and brands may be claimed as the property of others.\r
+\r
+Any software source code reprinted in this document is furnished under a software license and may only be used or copied in accordance with the terms of that license.\r
+\r
+#1. Introduction\r
+\r
+This document provides development information about Behavior Test Tool, including: Overview, UI and Source Code Structure Introduction, How to Add New Test etc.\r
+\r
+#2. Overview\r
+\r
+This document guides you as you contribute test cases to the Behavior Test Tool. The tool itself is developed using the jQuery Mobile framework, so the test case development should follow general principles of the jQuery Mobile guidelines. See [http://jquerymobile.com/](http://jquerymobile.com/). Also, to seamlessly integrate tests into the tool's framework, a test case should follow the behavior test tool's rules. Finally, the whole tool will be packaged as one widget file and will run on a target device.\r
+\r
+##2.1 User Interface\r
+\r
+The Behavior Test Tool UI is shown below:\r
+\r
+**Home UI**\r
+\r
+![Home UI](img/Behavior_Test_Tool_Developer_Guide_1.png)\r
+\r
+Figure 2‑1-1. Behavior Test Tool Home Page\r
+\r
+- Header Bar: Show behavior test tool title and version.\r
+- Test List: Show on tests components, test list and test result status. \r
+- Footer Bar: \r
+\r
+  - Export Button: Save the test result XML file to the Tizen file system. This is full path that includes both location and file name: /opt/usr/media/Documents/tct-behavior-tests\_{timestamp}.result.xml.\r
+  - Reset Button: Reset test result.\r
+  - Exit Button: Quit.\r
+\r
+**Test Case UI**\r
+\r
+![Test Case UI](img/Behavior_Test_Tool_Developer_Guide_2.png)\r
+\r
+Figure 2‑2-2. Behavior Test Tool Test Case Page\r
+\r
+- Header Bar: Show test case name in the title.\r
+- Main Content: test UI\r
+- Footer Bar: has 4 buttons\r
+\r
+  - **Pass**: Save "Pass" result and exit test\r
+  - **Fail**: Save "Fail" result and exit test\r
+  - **Info**: Show test description information\r
+  - **Exit**: Exit test and back to home page.\r
+\r
+##2.2 Source code structure\r
+\r
+Figure 2-2 shows the source code structure.\r
+\r
+![Test Case UI](img/Behavior_Test_Tool_Developer_Guide_3.png)\r
+\r
+Figure 2‑2. The source code structure\r
+\r
+Key files, folders, and images are:\r
+\r
+- **config.xml**: Behavior test tool's web app's configuration file. \r
+- **index.html**: Behavior test tool's web app's main page entry. \r
+- **icon.png**: Behavior test tool's web app's icon, should be shown on Tizen home screen. \r
+- **tests.xml**: Behavior test tool's subtest list information file.\r
+- **pack.sh**: Behavior test tool's packing shell script.\r
+- **inst.sh.apk**: The shell script for installing APK package on Android.\r
+- **inst.sh.ivi**: The shell script for installing XPK package on Tizen IVI.\r
+- **inst.sh.wgt**: The shell script for installing WGT package on Tizen Mobile.\r
+- **inst.sh.xpk**: The shell script for installing XPK package on Tizen Mobile.\r
+- **css/**: Tool's main CSS file tests: common CSS file, third party CSS files, and images folder. \r
+- **js/**: Tool's main JS file tests: common JS file and third party JS files. \r
+- **tests/**: Folder of subtests files. \r
+- **res/**: Folder of common resources. \r
+- **tests/template/**: Test developing template for case developer reference.\r
+\r
+#3 Test development\r
+\r
+##3.1 Coding Style\r
+\r
+Test case developers shall follow the following rules:\r
+\r
+- Comment each code block in a uniform way\r
+- Return a clear pass/fail result \r
+- Clean environment before exiting tests\r
+- Automate test under condition of stability \r
+- Keep test cases independent from each other \r
+- Keep case independent from UX or vertical specific applications \r
+- Avoid complicated code logic (comment it if unavoidable) \r
+- Avoid duplicated code \r
+- Remove redundant code \r
+\r
+Please refer to the `Coding_Style_Guide_CheatSheet.md` to get a quick start.\r
+\r
+You can find detailed coding style instructions for specific languages from:\r
+\r
+1) CSS & HTML: [http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml](http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml)\r
+\r
+2) JavaScript: [http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml)\r
+\r
+3) Python: [http://google-styleguide.googlecode.com/svn/trunk/pyguide.html](http://google-styleguide.googlecode.com/svn/trunk/pyguide.html)\r
+\r
+4) Shell: [http://google-styleguide.googlecode.com/svn/trunk/shell.xml](http://google-styleguide.googlecode.com/svn/trunk/shell.xml)\r
+\r
+5) XML: 'xmllint --format' with default indent 2 spaces. See [http://xmlsoft.org/xmllint.html](http://xmlsoft.org/xmllint.html)\r
+\r
+ - Test ID: Should be the same as test folder name.\r
+ - Capability: This tag will help to check the Tizen device HW capability.\r
+\r
+##3.2 Adding a test entry in the Home UI\r
+\r
+In the latest behavior tests framework, we start using tests.xml to record test information. You can add a new test case to the tests.xml file and the behavior framework will automatically load the tests.xml file to create a test list view in the main UI.\r
+\r
+The tests.xml format is just like the XML scheme of Tizen WebAPI/WRT tests. For example, the test case ID needs to be unique and the test's folder name should be the same as the test case ID. The test folder name (test ID) and the XML can have some special rules. Currently there is a rule for avoiding use of some special characters (such as space). You can use tools/schema/test\_definition.xsd to verify your tests.xml after modifications.\r
+\r
+As stated earlier, the "capability" tag be added for Tizen device HW capability checking. If a tests need capability checking, you need add a sub tag "<capability name="your_capability_name" /\>" to this "testcase" tag of tests.xml file. If a mandatory feature is not present, this tests entry of home UI will be marked as black background.\r
+\r
+##3.3 Adding test code resources to the test folder\r
+\r
+Take test "2D3DAnimation" as an example:\r
+\r
+![Test Case UI](img/Behavior_Test_Tool_Developer_Guide_4.png)\r
+\r
+Figure 3‑1. Test code and resources structure\r
+\r
+- Create test sub folder such as "2D3DAnimation" under "tests" folder, should be the same with test case id in tests.xml file.\r
+- **index.html**: the test main page html file.\r
+\r
+  - Test developer always need use the template tests for test developing so that you can have a unified style and can use common JS libraries.\r
+\r
+Example:\r
+\r
+    <html>\r
+    <head>\r
+    <meta charset="utf-8" />\r
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">\r
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />\r
+    <script src="../../js/thirdparty/jquery.js"></script>\r
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>\r
+    <script src="../../js/tests.js"></script>\r
+    </head>\r
+    <body>\r
+        <div data-role="header">\r
+            <h1 id="main_page_title"></h1>\r
+        </div>\r
+        <div id="content">\r
+        Hello World !\r
+        </div>\r
+        <div data-role="footer" data-position="fixed">\r
+        </div>\r
+        <div data-role="popup" id="popup_info" data-theme="a">\r
+            <p>Test Info</p>\r
+        </div>\r
+    </body>\r
+    </html>\r
+\r
+- Test developer always need import following css and js files to you test:\r
+- Do not need add header title as test.js will add title to header automatically.\r
+- Do not need add footer bar as test.js will insert the footer for each tests page.\r
+\r
+Example:\r
+\r
+    <link rel="stylesheet" href="../../css/jquery.mobile.css" />\r
+    <script src="../../js/thirdparty/jquery.js"></script>\r
+\r
+- "../../js/tests.js" and "../../js/tests.css": Provide JS APIs and CSS style need by test footer Bar, your need import it in your test page html file always. The JS provide following APIs:\r
+\r
+  - Update header title automatically.\r
+  - Insert the footer bar automatically.\r
+  - getAppName API to return your tests APP name.\r
+  - EnablePassButton/DisablePassButton to indicate the testing process based on tests needs.\r
+\r
+- Test Info: Case developer can add the test info to the popup div in test home page.\r
+\r
+Example:\r
+\r
+    <div data-role="popup" id="popup_info">\r
+    <p>Your test description/test steps/PASS&FAIL conditions.<p\>\r
+\r
+\r
+##3.4 Updating the configuration file\r
+\r
+All test cases share one configuration file. You can update the config.xml file if needed, but please be cautious.\r
+\r
+##3.5 Packing\r
+\r
+You can use pack.sh to create your zip file.\r
diff --git a/doc/img/Behavior_Test_Tool_Developer_Guide_1.png b/doc/img/Behavior_Test_Tool_Developer_Guide_1.png
new file mode 100644 (file)
index 0000000..baa7b4d
Binary files /dev/null and b/doc/img/Behavior_Test_Tool_Developer_Guide_1.png differ
diff --git a/doc/img/Behavior_Test_Tool_Developer_Guide_2.png b/doc/img/Behavior_Test_Tool_Developer_Guide_2.png
new file mode 100644 (file)
index 0000000..e57d780
Binary files /dev/null and b/doc/img/Behavior_Test_Tool_Developer_Guide_2.png differ
diff --git a/doc/img/Behavior_Test_Tool_Developer_Guide_3.png b/doc/img/Behavior_Test_Tool_Developer_Guide_3.png
new file mode 100644 (file)
index 0000000..91bb88b
Binary files /dev/null and b/doc/img/Behavior_Test_Tool_Developer_Guide_3.png differ
diff --git a/doc/img/Behavior_Test_Tool_Developer_Guide_4.png b/doc/img/Behavior_Test_Tool_Developer_Guide_4.png
new file mode 100644 (file)
index 0000000..35baa18
Binary files /dev/null and b/doc/img/Behavior_Test_Tool_Developer_Guide_4.png differ
diff --git a/ivi/LICENSE b/ivi/LICENSE
new file mode 100644 (file)
index 0000000..4537e32
--- /dev/null
@@ -0,0 +1,27 @@
+Copyright (C) 2013 Intel Corporation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+  * Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+  * Redistributions in binary form must reproduce the above copyright
+    notice, this list of conditions and the following disclaimer in
+    the documentation and/or other materials provided with the
+    distribution.
+  * Neither the name of Intel Corporation nor the names of its
+    contributors may be used to endorse or promote products derived
+    from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/ivi/README.md b/ivi/README.md
new file mode 100644 (file)
index 0000000..51f196f
--- /dev/null
@@ -0,0 +1,18 @@
+## Introduction
+
+Behavior Test Tool is a device behavior checker that uses jQuery.
+It has these features:
+
+* A list of behaviors you can test, with information about test cases
+* Test cases for checking and evaluating the behavior of a device
+* Automatically generated test reports you can view and save for further analysis
+
+## Authors:
+
+* Lin, Wanming <wanmingx.lin@intel.com>
+
+## LICENSE
+
+Copyright (c) 2013 Intel Corporation.  All rights reserved.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please see the LICENSE file for the BSD-3-Clause License.
diff --git a/ivi/config.xml b/ivi/config.xml
new file mode 100644 (file)
index 0000000..2e4b2b0
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://tizen.org/test/tct-behavior-tests" version="3.0" viewmodes="">
+    <access origin="*"/>
+    <tizen:application id="tctbhtests.TCTBehaviorTests" package="tctbhtests" required_version="2.2"/>
+    <icon src="icon.png" height="117" width="117"/>
+    <name>tct-behavior-tests</name>
+    <tizen:privilege name="http://tizen.org/privilege/location"/>
+    <tizen:privilege name="http://tizen.org/privilege/mediacapture"/>
+    <tizen:privilege name="http://tizen.org/privilege/alarm"/>
+    <tizen:privilege name="http://tizen.org/privilege/application.launch"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetooth.admin"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetooth.gap"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetooth.spp"/>
+    <tizen:privilege name="http://tizen.org/privilege/calendar.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/calendar.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/callhistory.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/callhistory.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/contact.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/contact.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/download"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/messaging.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/messaging.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.admin"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.cardemulation"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.common"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.p2p"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.tag"/>
+    <tizen:privilege name="http://tizen.org/privilege/notification"/>
+    <tizen:privilege name="http://tizen.org/privilege/power"/>
+    <tizen:privilege name="http://tizen.org/privilege/system"/>
+    <tizen:privilege name="http://tizen.org/privilege/time"/>
+    <tizen:privilege name="http://tizen.org/privilege/datasync"/>
+    <tizen:privilege name="http://tizen.org/privilege/package.info"/>
+    <tizen:privilege name="http://tizen.org/privilege/packagemanager.install"/>
+    <tizen:privilege name="http://tizen.org/privilege/setting"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetoothmanager"/>
+    <tizen:privilege name="http://tizen.org/privilege/push"/>
+    <tizen:privilege name="http://tizen.org/privilege/systemmanager"/>
+    <tizen:setting context-menu="disable" background-support="disable" encryption="disable" install-location="auto"/>
+</widget>
diff --git a/ivi/css/images/COPYING b/ivi/css/images/COPYING
new file mode 100644 (file)
index 0000000..b35efee
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+fail.png,
+pass.png:
+Created by the Paint application.
+The above files are licensed under Intel BSD-3-Clause License.
diff --git a/ivi/css/images/fail.png b/ivi/css/images/fail.png
new file mode 100644 (file)
index 0000000..fa6a888
Binary files /dev/null and b/ivi/css/images/fail.png differ
diff --git a/ivi/css/images/jquery/COPYING b/ivi/css/images/jquery/COPYING
new file mode 100644 (file)
index 0000000..0c72052
--- /dev/null
@@ -0,0 +1,14 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+ajax-loader.gif,
+icons-18-black.png,
+icons-18-white.png,
+icons-36-black.png,
+icons-36-white.png:
+The above files are licensed under jQuery MIT License:
+From https://github.com/jquery/jquery-mobile/tree/1.2-stable/css/themes/default/images
+Please see the LICENSE.MIT for the MIT terms and conditions.
diff --git a/ivi/css/images/jquery/ajax-loader.gif b/ivi/css/images/jquery/ajax-loader.gif
new file mode 100644 (file)
index 0000000..fd1a189
Binary files /dev/null and b/ivi/css/images/jquery/ajax-loader.gif differ
diff --git a/ivi/css/images/jquery/icons-18-black.png b/ivi/css/images/jquery/icons-18-black.png
new file mode 100644 (file)
index 0000000..ce1b758
Binary files /dev/null and b/ivi/css/images/jquery/icons-18-black.png differ
diff --git a/ivi/css/images/jquery/icons-18-white.png b/ivi/css/images/jquery/icons-18-white.png
new file mode 100644 (file)
index 0000000..1ab0127
Binary files /dev/null and b/ivi/css/images/jquery/icons-18-white.png differ
diff --git a/ivi/css/images/jquery/icons-36-black.png b/ivi/css/images/jquery/icons-36-black.png
new file mode 100644 (file)
index 0000000..1a59d7c
Binary files /dev/null and b/ivi/css/images/jquery/icons-36-black.png differ
diff --git a/ivi/css/images/jquery/icons-36-white.png b/ivi/css/images/jquery/icons-36-white.png
new file mode 100644 (file)
index 0000000..5647bdc
Binary files /dev/null and b/ivi/css/images/jquery/icons-36-white.png differ
diff --git a/ivi/css/images/pass.png b/ivi/css/images/pass.png
new file mode 100644 (file)
index 0000000..e215f83
Binary files /dev/null and b/ivi/css/images/pass.png differ
diff --git a/ivi/css/jquery.mobile.css b/ivi/css/jquery.mobile.css
new file mode 100644 (file)
index 0000000..8fb790e
--- /dev/null
@@ -0,0 +1,2609 @@
+/*
+* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Released under the MIT license.
+* http://jquery.org/license
+*
+*/
+
+
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+       border: 1px solid               #333 /*{a-bar-border}*/;
+       background:                     #111 /*{a-bar-background-color}*/;
+       color:                                  #fff /*{a-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+       color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a a.ui-link {
+       color: #7cc4e7 /*{a-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-a a.ui-link:visited {
+    color: #2489ce /*{a-bar-link-visited}*/;
+}
+.ui-bar-a a.ui-link:hover {
+       color: #2489ce /*{a-bar-link-hover}*/;
+}
+.ui-bar-a a.ui-link:active {
+       color: #2489ce /*{a-bar-link-active}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+       border: 1px solid               #444 /*{a-body-border}*/;
+       background:                     #222 /*{a-body-background-color}*/;
+       color:                                  #fff /*{a-body-color}*/;
+       text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);       
+}
+.ui-overlay-a {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+       color:  #fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+       color: #2489ce /*{a-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-a .ui-link:visited {
+    color: #2489ce /*{a-body-link-visited}*/;
+}
+.ui-body-a .ui-link:hover {
+       color: #2489ce /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+       color: #2489ce /*{a-body-link-active}*/;
+}
+.ui-btn-up-a {
+       border: 1px solid               #111 /*{a-bup-border}*/;
+       background:                     #333 /*{a-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bup-color}*/;
+       text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a:visited,
+.ui-btn-up-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+       border: 1px solid               #000 /*{a-bhover-border}*/;
+       background:                     #444 /*{a-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bhover-color}*/;
+       text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+       border: 1px solid               #000 /*{a-bdown-border}*/;
+       background:                     #222 /*{a-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bdown-color}*/;
+       text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a:visited,
+.ui-btn-down-a:hover,
+.ui-btn-down-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+       border: 1px solid               #456f9a /*{b-bar-border}*/;
+       background:                     #5e87b0 /*{b-bar-background-color}*/;
+       color:                                  #fff /*{b-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+       color:  #fff /*{b-bar-color}*/;
+}
+.ui-bar-b a.ui-link {
+       color: #ddf0f8 /*{b-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-b a.ui-link:visited {
+    color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-bar-b a.ui-link:hover {
+       color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b a.ui-link:active {
+       color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+       border: 1px solid               #999 /*{b-body-border}*/;
+       background:                     #f3f3f3 /*{b-body-background-color}*/;
+       color:                                  #222 /*{b-body-color}*/;
+       text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+       color:  #333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+       color: #2489ce /*{b-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-b .ui-link:visited {
+    color: #2489ce /*{b-body-link-visited}*/;
+}
+.ui-body-b .ui-link:hover {
+       color: #2489ce /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+       color: #2489ce /*{b-body-link-active}*/;
+}
+.ui-btn-up-b {
+       border: 1px solid               #044062 /*{b-bup-border}*/;
+       background:                     #396b9e /*{b-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bup-color}*/;
+       text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b:visited,
+.ui-btn-up-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+       border: 1px solid               #00415e /*{b-bhover-border}*/;
+       background:                     #4b88b6 /*{b-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bhover-color}*/;
+       text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b:visited,
+.ui-btn-hover-b:hover,
+.ui-btn-hover-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+       border: 1px solid               #225377 /*{b-bdown-border}*/;
+       background:                     #4e89c5 /*{b-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bdown-color}*/;
+       text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b:visited,
+.ui-btn-down-b:hover,
+.ui-btn-down-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+       border: 1px solid               #b3b3b3 /*{c-bar-border}*/;
+       background:                     #eee /*{c-bar-background-color}*/;
+       color:                                  #3e3e3e /*{c-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/      #fff /*{c-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+       color:  #3e3e3e /*{c-bar-color}*/;
+}
+.ui-bar-c a.ui-link {
+       color: #7cc4e7 /*{c-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-c a.ui-link:visited {
+    color: #2489ce /*{c-bar-link-visited}*/;
+}
+.ui-bar-c a.ui-link:hover {
+       color: #2489ce /*{c-bar-link-hover}*/;
+}
+.ui-bar-c a.ui-link:active {
+       color: #2489ce /*{c-bar-link-active}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+       border: 1px solid               #aaa /*{c-body-border}*/;
+       color:                                  #333 /*{c-body-color}*/;
+       text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+       background:                     #f9f9f9 /*{c-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+       color:  #333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+       color: #2489ce /*{c-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-c .ui-link:visited {
+    color: #2489ce /*{c-body-link-visited}*/;
+}
+.ui-body-c .ui-link:hover {
+       color: #2489ce /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+       color: #2489ce /*{c-body-link-active}*/;
+}
+.ui-btn-up-c {
+       border: 1px solid               #ccc /*{c-bup-border}*/;
+       background:                     #eee /*{c-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bup-color}*/;
+       text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c:visited,
+.ui-btn-up-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+       border: 1px solid               #bbb /*{c-bhover-border}*/;
+       background:                     #dfdfdf /*{c-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bhover-color}*/;
+       text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c:visited,
+.ui-btn-hover-c:hover,
+.ui-btn-hover-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+       border: 1px solid               #bbb /*{c-bdown-border}*/;
+       background:                     #d6d6d6 /*{c-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bdown-color}*/;
+       text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c:visited,
+.ui-btn-down-c:hover,
+.ui-btn-down-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+       border: 1px solid               #bbb /*{d-bar-border}*/;
+       background:                     #bbb /*{d-bar-background-color}*/;
+       color:                                  #333 /*{d-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+       color:  #333 /*{d-bar-color}*/;
+}
+.ui-bar-d a.ui-link {
+       color: #2489ce /*{d-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-d a.ui-link:visited {
+    color: #2489ce /*{d-bar-link-visited}*/;
+}
+.ui-bar-d a.ui-link:hover {
+       color: #2489ce /*{d-bar-link-hover}*/;
+}
+.ui-bar-d a.ui-link:active {
+       color: #2489ce /*{d-bar-link-active}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+       border: 1px solid               #bbb /*{d-body-border}*/;
+       color:                                  #333 /*{d-body-color}*/;
+       text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/     #fff /*{d-body-shadow-color}*/;
+       background:                     #fff /*{d-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+       color:  #333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+       color: #2489ce /*{d-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-d .ui-link:visited {
+    color: #2489ce /*{d-body-link-visited}*/;
+}
+.ui-body-d .ui-link:hover {
+       color: #2489ce /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+       color: #2489ce /*{d-body-link-active}*/;
+}
+.ui-btn-up-d {
+       border: 1px solid               #bbb /*{d-bup-border}*/;
+       background:                     #fff /*{d-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bup-color}*/;
+       text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d:visited,
+.ui-btn-up-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+       border: 1px solid               #aaa /*{d-bhover-border}*/;
+       background:                     #eee /*{d-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bhover-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/       #fff /*{d-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d:visited,
+.ui-btn-hover-d:hover,
+.ui-btn-hover-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+       border: 1px solid               #aaa /*{d-bdown-border}*/;
+       background:                     #eee /*{d-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bdown-color}*/;
+       text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/  #fff /*{d-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d:visited,
+.ui-btn-down-d:hover,
+.ui-btn-down-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-e a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-e a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-e a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-e a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-e .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-e .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-e {
+       border: 1px solid               #f4c63f /*{e-bup-border}*/;
+       background:                     #fadb4e /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e:visited,
+.ui-btn-up-e a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+       border: 1px solid               #f2c43d /*{e-bhover-border}*/;
+       background:                     #fbe26f /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e:visited,
+.ui-btn-hover-e:hover,
+.ui-btn-hover-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+       border: 1px solid               #f2c43d /*{e-bdown-border}*/;
+       background:                     #fceda7 /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e:visited,
+.ui-btn-down-e:hover,
+.ui-btn-down-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* r
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-r {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-r,
+.ui-bar-r input,
+.ui-bar-r select,
+.ui-bar-r textarea,
+.ui-bar-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-r .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-r a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-r a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-r a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-r a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-r,
+.ui-overlay-r {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-r {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-r,
+.ui-body-r input,
+.ui-body-r select,
+.ui-body-r textarea,
+.ui-body-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-r .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-r .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-r .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-r .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-r .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bup-border}*/;
+       background:                     rgb(241, 163, 150) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bup-background-start}*/), rgb(241, 163, 150) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-r:visited,
+.ui-btn-up-r a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bhover-border}*/;
+       background:                     rgb(245, 219, 196) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bhover-background-start}*/), to( rgb(241, 163, 150) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-r:visited,
+.ui-btn-hover-r:hover,
+.ui-btn-hover-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-r {
+       border: 1px solid               rgb(250, 230, 220) /*{e-bdown-border}*/;
+       background:                     rgb(250, 230, 220) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(250, 230, 220) /*{e-bdown-background-start}*/), to( rgb(241, 163, 150) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-r:visited,
+.ui-btn-down-r:hover,
+.ui-btn-down-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-r,
+.ui-btn-hover-r,
+.ui-btn-down-r {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* g
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-g {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-g,
+.ui-bar-g input,
+.ui-bar-g select,
+.ui-bar-g textarea,
+.ui-bar-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-g .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-g a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-g a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-g a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-g a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-g,
+.ui-overlay-g {
+        border: 1px solid               #f7c942 /*{e-body-border}*/;
+        color:                                  #222 /*{e-body-color}*/;
+        text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+        background:                     #fff9df /*{e-body-background-color}*/;
+        background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+        background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+        background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+        background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+        background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+        background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+       //background-image:         linear-gradient( rgb(253, 102, 127) /*{e-body-background-start}*/, rgb(189, 215, 175) /*{e-body-background-end}*/);
+}
+.ui-overlay-g {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-g,
+.ui-body-g input,
+.ui-body-g select,
+.ui-body-g textarea,
+.ui-body-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-g .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-g .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-g .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-g .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-g .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bup-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bup-background-start}*/), to( rgb(99, 220, 179) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-g:visited,
+.ui-btn-up-g a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bhover-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bhover-background-start}*/), to( rgb(99, 220, 179) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-g:visited,
+.ui-btn-hover-g:hover,
+.ui-btn-hover-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-g {
+       border: 1px solid               rgb(220, 250, 250) /*{e-bdown-border}*/;
+       background:                     rgb(220, 250, 250) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 250) /*{e-bdown-background-start}*/), to( rgb(99, 220, 179) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-g:visited,
+.ui-btn-down-g:hover,
+.ui-btn-down-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-g,
+.ui-btn-hover-g,
+.ui-btn-down-g {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* Structure */
+/* links within "buttons" 
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+       text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+       border: 1px solid               #2373a5 /*{global-active-border}*/;
+       background:                     #5393c5 /*{global-active-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{global-active-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+       text-decoration: none;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active:visited,
+.ui-btn-active:hover,
+.ui-btn-active a.ui-link-inherit {
+       color:                                  #fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+       border-top: 1px solid   #fff;
+       border-color:                   rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+       }
+.ui-corner-right {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+       -moz-border-radius:                             .6em /*{global-radii-blocks}*/;
+       -webkit-border-radius:                          .6em /*{global-radii-blocks}*/;
+       border-radius:                                          .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+       -moz-border-radius:                                0;
+       -webkit-border-radius:                             0;
+       border-radius:                                             0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+       border-bottom: rgb(130,130,130);
+       border-bottom: rgba(130,130,130,.3);
+       border-bottom-width: 1px;
+       border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+       filter: Alpha(Opacity=30);
+       opacity: .3;
+       zoom: 1;
+}
+.ui-disabled,
+.ui-disabled a {
+       cursor: default !important;
+       pointer-events: none;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+       background:                                             #666 /*{global-icon-color}*/;
+       background:                                             rgba(0,0,0,.4) /*{global-icon-disc}*/;
+       background-image: url(images/jquery/icons-18-white.png) /*{global-icon-set}*/;
+       background-repeat: no-repeat;
+       -moz-border-radius:                             9px;
+       -webkit-border-radius:                          9px;
+       border-radius:                                          9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+       background:                                             #fff;
+       background:                                             rgba(255,255,255,.3);
+       background-image: url(images/jquery/icons-18-black.png);
+       background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+       only screen and (min--moz-device-pixel-ratio: 1.5),
+       only screen and (min-resolution: 240dpi) {
+       
+       .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+       .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+       .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+       .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 
+       .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+               background-image: url(images/jquery/icons-36-white.png);
+               -moz-background-size: 776px 18px;
+               -o-background-size: 776px 18px;
+               -webkit-background-size: 776px 18px;
+               background-size: 776px 18px;
+       }
+       .ui-icon-alt {
+               background-image: url(images/jquery/icons-36-black.png);
+       }
+}
+/* plus minus */
+.ui-icon-plus {
+       background-position:    -0 50%;
+}
+.ui-icon-minus {
+       background-position:    -36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+       background-position:    -72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+       background-position:    -108px 50%;
+}
+.ui-icon-arrow-l {
+       background-position:    -144px 50%;
+}
+.ui-icon-arrow-u {
+       background-position:    -180px 50%;
+}
+.ui-icon-arrow-d {
+       background-position:    -216px 50%;
+}
+/* misc */
+.ui-icon-check {
+       background-position:    -252px 50%;
+}
+.ui-icon-gear {
+       background-position:    -288px 50%;
+}
+.ui-icon-refresh {
+       background-position:    -324px 50%;
+}
+.ui-icon-forward {
+       background-position:    -360px 50%;
+}
+.ui-icon-back {
+       background-position:    -396px 50%;
+}
+.ui-icon-grid {
+       background-position:    -432px 50%;
+}
+.ui-icon-star {
+       background-position:    -468px 50%;
+}
+.ui-icon-alert {
+       background-position:    -504px 50%;
+}
+.ui-icon-info {
+       background-position:    -540px 50%;
+}
+.ui-icon-home {
+       background-position:    -576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+       background-position:    -612px 50%;
+}
+.ui-icon-checkbox-off {
+       background-position:    -684px 50%;
+}
+.ui-icon-checkbox-on {
+       background-position:    -648px 50%;
+}
+.ui-icon-radio-off {
+       background-position:    -756px 50%;
+}
+.ui-icon-radio-on {
+       background-position:    -720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon,
+.ui-selectmenu-list .ui-icon {
+       -moz-border-radius: 3px;
+       -webkit-border-radius: 3px;
+       border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+       background-color: transparent;  
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+       background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+       background: url(images/jquery/ajax-loader.gif);
+       background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+        -moz-border-radius-topright:           1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+       -moz-border-radius:                             1em /*{global-radii-buttons}*/;
+       -webkit-border-radius:                          1em /*{global-radii-buttons}*/;
+       border-radius:                                          1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+       background: #666;
+       filter: Alpha(Opacity=50);
+       opacity: .5;
+       position: absolute;
+       width: 100%;
+       height: 100%;
+}
+.ui-overlay-shadow {
+       -moz-box-shadow: 0px 0px 12px                   rgba(0,0,0,.6);
+       -webkit-box-shadow: 0px 0px 12px                rgba(0,0,0,.6);
+       box-shadow: 0px 0px 12px                                rgba(0,0,0,.6);
+}
+.ui-shadow {
+       -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                       rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow  {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.3);
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.3);
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+       -moz-box-shadow: inset 0px 1px 4px              rgba(0,0,0,.2);
+       -webkit-box-shadow: inset 0px 1px 4px   rgba(0,0,0,.2);
+       box-shadow: inset 0px 1px 4px                   rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus, .ui-link-inherit:focus {
+       outline: 0;
+}
+.ui-btn.ui-focus {
+       z-index: 1;
+}
+.ui-focus,
+.ui-btn:focus {
+       -moz-box-shadow: inset 0px 0px 3px              #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: inset 0px 0px 3px   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       box-shadow: inset 0px 0px 3px                   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+}
+.ui-input-text.ui-focus,
+.ui-input-search.ui-focus {
+       -moz-box-shadow: 0px 0px 12px                   #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: 0px 0px 12px                #387bbe /*{global-active-background-color}*/;
+       box-shadow: 0px 0px 12px                                        #387bbe /*{global-active-background-color}*/;   
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+       -moz-box-shadow: none !important;
+       -webkit-box-shadow: none !important;
+       box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus,
+.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
+       outline-width: 1px;
+       outline-style: auto;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
+.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+       width: 100%;
+       height: 100%;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+}
+.ui-page-pre-in {
+       opacity: 0;
+}
+.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.out {
+       -webkit-animation-timing-function: ease-in;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-timing-function: ease-in;
+       -moz-animation-duration: 225ms;
+}
+@-webkit-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+.fade.out {
+       opacity: 0;
+       -webkit-animation-duration: 125ms;
+       -webkit-animation-name: fadeout;
+       -moz-animation-duration: 125ms;
+       -moz-animation-name: fadeout;
+}
+.fade.in {
+       opacity: 1;
+       -webkit-animation-duration: 225ms;
+       -webkit-animation-name: fadein;
+       -moz-animation-duration: 225ms;
+       -moz-animation-name: fadein;
+}
+.pop {
+       -webkit-transform-origin: 50% 50%;
+       -moz-transform-origin: 50% 50%;
+}
+.pop.in {
+       -webkit-transform: scale(1);
+       -moz-transform: scale(1);
+    opacity: 1;
+       -webkit-animation-name: popin;
+       -moz-animation-name: popin;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-duration: 350ms;
+}
+.pop.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       opacity: 0;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+}
+.pop.out.reverse {
+       -webkit-transform: scale(.8);
+       -moz-transform: scale(.8);
+       -webkit-animation-name: popout;
+       -moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+    from {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-moz-keyframes popin {
+    from {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-webkit-keyframes popout {
+    from {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+}
+@-moz-keyframes popout {
+    from {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+    from { -webkit-transform: translateX(100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+    from { -moz-transform: translateX(100%); }
+    to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+    from { -webkit-transform: translateX(-100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+    from { -moz-transform: translateX(-100%); }
+    to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.slide.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+}
+.slide.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromright;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromleft;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-duration: 225ms;
+}
+.slidefade.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slidedown.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfromtop;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfromtop;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+       -webkit-transform: translateY(-100%);
+       -moz-transform: translateY(-100%);
+       -webkit-animation-name: slideouttotop;
+       -moz-animation-name: slideouttotop;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+    from { -webkit-transform: translateY(-100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+    from { -moz-transform: translateY(-100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slideup.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfrombottom;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfrombottom;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+       -webkit-transform: translateY(100%);
+       -moz-transform: translateY(100%);
+       -webkit-animation-name: slideouttobottom;
+       -moz-animation-name: slideouttobottom;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+    from { -webkit-transform: translateY(100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+    from { -moz-transform: translateY(100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.flip {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0);
+}
+.flip.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -webkit-animation-duration: 175ms;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -moz-animation-duration: 175ms;
+}
+.flip.in {
+       -webkit-animation-name: flipintoright;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-name: flipintoright;
+       -moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.turn {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -webkit-transform-origin: 0;
+       
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-transform-origin: 0;
+}
+.turn.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -webkit-animation-duration: 125ms;
+       -moz-animation-duration: 125ms;
+}
+.turn.in {
+       -webkit-animation-name: flipintoright;
+       -moz-animation-name: flipintoright;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+       
+}
+.turn.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+       -webkit-transform-origin: 50% 30%;
+       -moz-transform-origin: 50% 30%; 
+       -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+       -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+       -webkit-transform-origin: none;
+       -moz-transform-origin: none;    
+       -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+}
+.flow.out {
+       -webkit-transform: translateX(-100%) scale(.7);
+       -webkit-animation-name: flowouttoleft;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(-100%) scale(.7);
+       -moz-animation-name: flowouttoleft;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.in {
+       -webkit-transform: translateX(0) scale(1);
+       -webkit-animation-name: flowinfromright;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(0) scale(1);
+       -moz-animation-name: flowinfromright;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: flowouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+       -webkit-animation-name: flowinfromleft;
+       -moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform:  translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+    0% { -webkit-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+    0% { -moz-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+    0% { -webkit-transform: translateX(100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+    0% { -moz-transform: translateX(100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { display: block; float: none; }
+/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
+.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
+.ui-grid-a .ui-block-a { clear: left; }
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
+.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
+.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
+.ui-grid-d > :nth-child(n) { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+       left: 0;
+       right: 0;
+       width: 100%;
+       position: fixed;
+       z-index: 1000;
+}
+.ui-header-fixed {
+       top: 0;
+}
+.ui-footer-fixed {
+       bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+       filter: Alpha(Opacity=90);
+       opacity: .9;
+}
+.ui-page-header-fixed {
+       padding-top: 2.6875em;
+}
+.ui-page-footer-fixed {
+       padding-bottom: 2.6875em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+       padding: 0;
+}
+.ui-fixed-hidden {
+       position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+       left: -9999px;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn { 
+       z-index: 10;
+}
+.ui-navbar { max-width: 100%; }
+.ui-navbar.ui-mini { margin: 0; }
+.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; }
+.ui-navbar ul:after { clear: both; }
+.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; }
+.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
+.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
+/* add border if not in header/footer (full width) */
+.ui-navbar li:last-child .ui-btn,
+.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
+.ui-header .ui-navbar li:last-child .ui-btn,
+.ui-footer .ui-navbar li:last-child .ui-btn,
+.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
+.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
+.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
+.ui-header .ui-navbar li .ui-btn,
+.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+/* fixing gaps caused by subpixel problem */
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
+.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
+.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
+.ui-mini { margin-top: .25em; margin-bottom: .25em; }
+.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
+.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; }
+.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; }
+.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right { margin: 0; } /* .ui-mobile to increase specificity level */
+.ui-btn-block { display: block; }
+.ui-header > .ui-btn,
+.ui-footer > .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-block,
+.ui-footer .ui-btn-block { display: block; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-fullsize .ui-btn-inner,
+.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini.ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini.ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-mini.ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; }
+/* Fixes IE/WP filter alpha opacity bugs */
+.ui-disabled .ui-btn-hidden { display: none; }
+.ui-disabled { z-index: 1; }
+.ui-field-contain .ui-btn.ui-submit { margin: 0; }
+label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+       .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
+}
+.ui-collapsible-inset { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
+.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
+.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
+.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; }
+.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+       display: block;
+       margin: 0 -15px;        
+       padding: 10px 15px;
+       border-left-width: 0;
+       border-right-width: 0;
+       border-top: none;      /* Overrides ui-body-* */
+       background-image: none; /* Overrides ui-body-* */
+}
+.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-collapsible-set .ui-collapsible:first-child { margin-top: 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
+.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
+.ui-bar .ui-controlgroup { margin: 0 5px; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px }
+.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; }
+.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,
+.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,
+.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
+.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-select .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn { float: none; margin: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last, .ui-controlgroup-horizontal .ui-select:last-child,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+@media all and (min-width: 450px){
+       .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; }
+       .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
+       .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+       .ui-hide-label .ui-controlgroup-controls { width: 100%; }
+}      
+.ui-dialog {
+        background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain {
+       width: 92.5%;
+       max-width: 500px;
+       margin: 10% auto 15px auto;
+       padding: 0;
+       position: relative;
+       top: -15px;
+}
+.ui-dialog-contain > .ui-header, 
+.ui-dialog-contain > .ui-content, 
+.ui-dialog-contain > .ui-footer { 
+       display: block;
+       position: relative; 
+       width: auto;
+       margin: 0;
+}
+.ui-dialog-contain > .ui-header {
+       border: none;
+       overflow: hidden;
+       z-index: 10; 
+       padding: 0;
+}
+.ui-dialog-contain > .ui-content { 
+       padding: 15px; 
+}
+.ui-dialog-contain > .ui-footer {
+       z-index: 10; 
+       padding: 0 15px; 
+}
+.ui-popup-open .ui-header-fixed,
+.ui-popup-open .ui-footer-fixed {
+       position: absolute !important;  /* See line #553 of popup.js */
+}
+.ui-popup-screen {
+       background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */
+       top: 0px;
+       left: 0px;
+       right: 0px;
+       bottom: 1px;
+       position: absolute;
+       filter: Alpha(Opacity=0);
+       opacity: 0;
+       z-index: 1099;
+}
+.ui-popup-screen.in {
+       opacity: 0.5;
+       filter: Alpha(Opacity=50);
+}
+.ui-popup-screen.out {
+       opacity: 0;
+       filter: Alpha(Opacity=0);
+}
+.ui-popup-container {
+       z-index: 1100;
+       display: inline-block;
+       position: absolute;
+       padding: 0;
+       outline: 0;
+}
+.ui-popup {
+       position: relative;
+}
+.ui-popup.ui-content,
+.ui-popup .ui-content {
+       overflow: visible;
+}
+.ui-popup > p,
+.ui-popup > h1,
+.ui-popup > h2,
+.ui-popup > h3,
+.ui-popup > h4,
+.ui-popup > h5,
+.ui-popup > h6 {
+       margin: .5em 7px;
+}
+.ui-popup > span {
+       display: block;
+       margin: .5em 7px;
+}
+.ui-popup .ui-title {
+       font-size: 16px;
+       font-weight: bold;
+       margin-top: .5em;
+       margin-bottom: .5em;
+}
+.ui-popup-container .ui-content > p,
+.ui-popup-container .ui-content > h1,
+.ui-popup-container .ui-content > h2,
+.ui-popup-container .ui-content > h3,
+.ui-popup-container .ui-content > h4,
+.ui-popup-container .ui-content > h5,
+.ui-popup-container .ui-content > h6 {
+       margin: .5em 0;
+}
+.ui-popup-container .ui-content > span {
+       margin: 0;
+}
+.ui-popup-container .ui-content > p:first-child,
+.ui-popup-container .ui-content > h1:first-child,
+.ui-popup-container .ui-content > h2:first-child,
+.ui-popup-container .ui-content > h3:first-child,
+.ui-popup-container .ui-content > h4:first-child,
+.ui-popup-container .ui-content > h5:first-child,
+.ui-popup-container .ui-content > h6:first-child {
+       margin-top: 0;
+}
+.ui-popup-container .ui-content > p:last-child,
+.ui-popup-container .ui-content > h1:last-child,
+.ui-popup-container .ui-content > h2:last-child,
+.ui-popup-container .ui-content > h3:last-child,
+.ui-popup-container .ui-content > h4:last-child,
+.ui-popup-container .ui-content > h5:last-child,
+.ui-popup-container .ui-content > h6:last-child {
+       margin-bottom: 0;
+}
+.ui-popup > img {
+       width: auto;
+       height: auto;
+       max-width: 100%;
+       max-height: 100%;
+       vertical-align: middle;
+}
+.ui-popup iframe {
+       vertical-align: middle;
+}
+@media all and (min-width: 450px){
+       .ui-popup .ui-field-contain label.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-label,
+       .ui-popup .ui-field-contain label.ui-select,
+       .ui-popup .ui-field-contain label.ui-input-text {
+               font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em;
+       }
+       .ui-popup .ui-field-contain .ui-btn.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-controls,
+       .ui-popup .ui-field-contain .ui-select,
+       .ui-popup .ui-field-contain input.ui-input-text,
+       .ui-popup .ui-field-contain textarea.ui-input-text,
+       .ui-popup .ui-field-contain .ui-input-search {
+               width: 100%; display: block;
+       }
+}
+.ui-popup > .ui-btn-left,
+.ui-popup > .ui-btn-right {
+       position: absolute; 
+       top: -9px;
+       margin: 0;
+       z-index: 1101;
+}
+.ui-popup > .ui-btn-left { left: -9px; }
+.ui-popup > .ui-btn-right { right: -9px; }
+.ui-popup.ui-corner-all > .ui-header,
+.ui-popup.ui-corner-all ~ .ui-content,
+.ui-popup.ui-corner-all > .ui-content:first-child {
+       -webkit-border-top-left-radius:  inherit;
+       border-top-left-radius:          inherit;
+       -webkit-border-top-right-radius: inherit;
+       border-top-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content,
+.ui-popup.ui-corner-all > .ui-footer,
+.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child {
+       -webkit-border-bottom-left-radius:  inherit;
+       border-bottom-left-radius:          inherit;
+       -webkit-border-bottom-right-radius: inherit;
+       border-bottom-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-child(2),
+.ui-popup.ui-corner-all > .ui-header:nth-child(2) {
+       -webkit-border-top-left-radius:  0;
+       border-top-left-radius:          0;
+       -webkit-border-top-right-radius: 0;
+       border-top-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2),
+.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2) {
+       -webkit-border-bottom-left-radius:  0;
+       border-bottom-left-radius:          0;
+       -webkit-border-bottom-right-radius: 0;
+       border-bottom-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-header:only-child,
+.ui-popup.ui-corner-all > .ui-footer:only-child {
+       -webkit-border-radius: inherit;
+       border-radius:         inherit;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin-top: .5em; margin-bottom: .5em; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; }
+.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:last-child { border-bottom-width: 0; }
+.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
+@media all and (min-width: 450px){
+       .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; }
+.ui-field-contain .ui-select .ui-btn { margin: 0; }
+/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+/* Display none because of issues with IE/WP's filter alpha opacity */
+.ui-select .ui-disabled select { display: none; }
+@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; }
+.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; }
+.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { padding: 6px; min-width: 160px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -99999px; left: -9999px; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header { margin: 0; padding: 0; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-select { width: 78%; display: inline-block; }
+       .ui-hide-label .ui-select { width: 100%; } 
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; display: block; width: 100%; outline: 0; }
+input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; }
+.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; }
+input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; }
+.ui-input-search.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-input-search { margin: 0; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-input-text  { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+       .ui-field-contain input.ui-input-text, 
+       .ui-field-contain textarea.ui-input-text, 
+       .ui-field-contain .ui-input-search { width: 78%; display: inline-block; } 
+       .ui-hide-label input.ui-input-text, 
+       .ui-hide-label textarea.ui-input-text, 
+       .ui-hide-label .ui-input-search { width: 100%; }
+       .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; }
+ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-collapsible-content > .ui-listview { margin: -10px -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-collapsible-content .ui-listview-inset { margin: .5em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li.ui-btn { margin: 0; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-static { background-image: none; }
+.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li-last, .ui-li.ui-field-contain.ui-li-last { border-bottom-width: 1px; }
+.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last { border-bottom-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child { border-top-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last { -webkit-border-bottom-left-radius: inherit; -webkit-border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt { -webkit-border-bottom-right-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+        .ui-li-aside { width: 45%; }
+}       
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
+.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
+.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
+.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
+.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; }
+.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; }
+.ui-listview-filter-inset { margin: -15px -5px; background: transparent; }
+.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-li.ui-screen-hidden{ display:none; }
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+    .ui-li .ui-btn-text { overflow:  visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; }
+input.ui-slider-input.ui-mini,
+.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; }
+.ui-field-contain input.ui-slider-input { margin: 0; }
+input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; }
+/* Fixes input fields being to small on Safari/Mac because of the up and down arrows. */
+.ui-slider-input::-webkit-outer-spin-button { margin: 0; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-btn.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin: -15px 0 0 -15px; outline: 0; }
+a.ui-btn.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain div.ui-slider { width: 43%; }
+       .ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}      
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle { margin: 1px 0 0 -15px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }
diff --git a/ivi/css/main.css b/ivi/css/main.css
new file mode 100644 (file)
index 0000000..b2f945d
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+.ui-page .ui-content .ui-listview img {
+    position:absolute;
+    top:0;
+    bottom:0;
+    margin:auto;
+}
+
+.ui-page .ui-content .ui-listview h1 {
+    line-height : 45px;
+    vertical-align : middle;
+    white-space : normal;
+}
+
+.ui-li-count {
+    min-width: 30px;
+    text-align: center;
+}
+
+#overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: #000;
+    opacity: 0.6;
+    filter: alpha(opacity=60);
+    z-index:50;
+}
+
+.wgtButton {
+    height:40px;
+    line-height:20px;
+}
+
+.hideButton {
+    display:none;
+}
+
+.fontSize {
+    font-size:85%
+}
diff --git a/ivi/icon.png b/ivi/icon.png
new file mode 100644 (file)
index 0000000..f5578b3
Binary files /dev/null and b/ivi/icon.png differ
diff --git a/ivi/index.html b/ivi/index.html
new file mode 100644 (file)
index 0000000..5d623e3
--- /dev/null
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+        Shentu, Jiazhen <jiazhenx.shentu@intel.com>
+
+-->
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="css/main.css" />
+    <script src="js/thirdparty/jquery.js"></script>
+    <script src="js/thirdparty/jquery.mobile.js"></script>
+    <script src="js/main.js"></script>
+</head>
+<body>
+<div data-role="page" id="home_ui">
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 style="width:75%; margin-left:auto; margin-right:auto;">TCT Behavior Test Tool</h1>
+        <a id="version" class="ui-btn-right"></a>
+    </div>
+    <div id="app_selector" data-role="content">
+        <ul data-role="listview" id="mylist" data-mini="true" data-inset="true"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false" align="center">
+        <div data-role="controlgroup" data-type="horizontal">
+            <a href="javascript:exportResult();" data-role="button" data-icon="gear">Export</a>
+            <a id="reset" data-role="button" data-icon="refresh">Reset</a>
+            <a href="#popup_exit" data-rel="popup" data-position-to="window" data-role="button" data-inline="true" data-transition="pop" data-icon="back">Exit</a>
+        </div>
+    </div>
+    <div data-role="popup" id="popup_exit" data-overlay-theme="a" data-theme="c" data-dismissible="false" style="max-width:400px;" class="ui-corner-all">
+        <div data-role="header" data-theme="a" class="ui-corner-top">
+            <h1>Reminder</h1>
+        </div>
+        <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
+            <h3 class="ui-title">Do you want to save test result before exit?</h3>
+            <a id="exit" data-role="button" data-rel="back" data-theme="c">Yes</a>
+            <a data-role="button" data-rel="back" data-theme="e">No, thanks</a>
+        </div>
+    </div>
+</div>
+<div data-role="page" id="test_ui">
+    <iframe id="test_frame" width="100%" frameborder="no" border="0" src="" allowfullscreen="true"></iframe>
+</div>
+</body>
+</html>
diff --git a/ivi/inst.apk.py b/ivi/inst.apk.py
new file mode 100755 (executable)
index 0000000..472790c
--- /dev/null
@@ -0,0 +1,109 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+from optparse import OptionParser, make_option
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PARAMETERS = None
+ADB_CMD = "adb"
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip('\n')
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s uninstall org.xwalk.%s" % (
+                    ADB_CMD, PARAMETERS.device, os.path.basename(os.path.splitext(file)[0]))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s install %s" % (ADB_CMD,
+                                               PARAMETERS.device, os.path.join(root, file))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.device:
+        (return_code, output) = doCMD("adb devices")
+        for line in output:
+            if str.find(line, "\tdevice") != -1:
+                PARAMETERS.device = line.split("\t")[0]
+                break
+
+    if not PARAMETERS.device:
+        print "No device found"
+        sys.exit(1)
+
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/ivi/inst.wgt.py b/ivi/inst.wgt.py
new file mode 100755 (executable)
index 0000000..989b152
--- /dev/null
@@ -0,0 +1,221 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+SRC_DIR = "/home/app/content"
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -u -t wgt -q -n %s" % pkg_id)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -i -t wgt -q -p %s/%s" % (SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".wgt"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "app"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/ivi/inst.xpk.py b/ivi/inst.xpk.py
new file mode 100755 (executable)
index 0000000..e030f80
--- /dev/null
@@ -0,0 +1,221 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+SRC_DIR = "/home/app/content"
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -u -t xpk -q -n %s" % pkg_id)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -i -t xpk -q -p %s/%s" % (SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".xpk"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "app"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/ivi/js/main.js b/ivi/js/main.js
new file mode 100644 (file)
index 0000000..a4901b0
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+        Jiazhen, Shentu <jiazhenx.shentu@intel.com>
+
+*/
+
+var sstorage = window.sessionStorage;
+var applist;
+
+function exportResult() {
+    //TODO: export the test result from the saved result in session storage.
+}
+
+function SaveAndExit() {
+    //TODO: export the test result from the saved result in session storage, then exit the app.
+}
+
+function getVersion() {
+  var version = "";
+  $.ajax({
+    async : false,
+    type : "GET",
+    url : "config.xml",
+    dataType : "xml",
+    success : function(xml){
+      $(xml).find("widget").each(function(){version = $(this).attr("version");});
+    }
+  });
+  return version;
+}
+
+function getApps() {
+  var tests = "";
+  $.ajax({
+    async : false,
+    type : "GET",
+    url : "tests.xml",
+    dataType : "xml",
+    success : function(xml){tests = xml;}
+  });
+  return tests;
+}
+
+function updateList() {
+  $("#mylist").empty();
+  $(applist).find("set").each(function(){
+    $("#mylist").append("<li data-role=\"list-divider\">"+$(this).attr("name")+"</li>");
+    $(this).find("testcase").each(function(){
+      var url = "tests/" + $(this).attr("id") + "/index.html?test_name="+$(this).attr("purpose");
+      var appLine = "<li class=\"app\" id=\"" + $(this).attr("id") + "\">"
+                  + "<a href=\"" + url + "\">" + "<h2>" + $(this).attr("purpose") + "</h2></a></li>";
+      $("#mylist").append(appLine);
+    });
+  });
+
+  for(var i=0; i<sstorage.length; i++){
+    var name = sstorage.key(i);
+    var item = sstorage.getItem(name);
+    var node = $("h2:contains('"+ name + "')").parent().parent();
+    if (item == "PASS") {
+      node.attr("data-theme", "g");
+      node.append("<img src='css/images/pass.png' class='ui-li-thumb'>");
+      node.append("<span class='ui-li-count' style='color:green;'>PASS</span>");
+      node.find("a h2").css("padding-left", "20px");
+    } else if (item == "FAIL"){
+      node.attr("data-theme", "r");
+      node.append("<img src='css/images/fail.png' class='ui-li-thumb'>");
+      node.append("<span class='ui-li-count' style='color:red;'>FAIL</span>");
+      node.find("a h2").css("padding-left", "20px");
+    } else {
+      resultnum = item.split(",");
+      if (resultnum[3] == "PASS") {
+        node.attr("data-theme", "g");
+        node.append("<img src='css/images/pass.png' class='ui-li-thumb'>");
+        node.append("<span class='ui-li-count' style='color:green;'>"  + resultnum[0] + "</span>");
+        node.append("<span class='ui-li-count' style='color:red;'>"  + resultnum[1] + "</span>");
+        node.append("<span class='ui-li-count' style='color:gray;'>"  + resultnum[2] + "</span>");
+        node.find("a h2").css("padding-left", "20px");
+      } else if (resultnum[3] == "FAIL"){
+        node.attr("data-theme", "r");
+        node.append("<img src='css/images/fail.png' class='ui-li-thumb'>");
+        node.append("<span class='ui-li-count' style='color:green;'>"  + resultnum[0] + "</span>");
+        node.append("<span class='ui-li-count' style='color:red;'>"  + resultnum[1] + "</span>");
+        node.append("<span class='ui-li-count' style='color:gray;'>"  + resultnum[2] + "</span>");
+        node.find("a h2").css("padding-left", "20px");
+      }
+    }
+  }
+  $("#mylist").listview("refresh");
+  $(".ui-li-has-count").each(function() {
+    var childs = $(this).find(".ui-li-count");
+    if (childs.length == 3) {
+      $(childs[0]).css("min-width","10px");
+      $(childs[1]).css("min-width","10px");
+      $(childs[2]).css("min-width","10px");
+      var shiftSecond = ($(childs[2]).position().left - $(childs[1]).outerWidth());
+      var shiftFirst = (shiftSecond - 23);
+      $(childs[0]).css("left", shiftFirst).css("right","auto");
+      $(childs[1]).css("left", shiftSecond).css("right","auto");
+    }
+  });
+}
+
+function updateFooter() {
+  $(':jqmData(role=footer)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 10px 15px 30px');
+}
+
+function launchMain(node) {
+  if ($("#home_ui").find("div").length > 0) {
+    updateList();
+    $.mobile.changePage("#home_ui", {
+      'allowSamePageTransition' : true,
+      'transition' : 'slide',
+      'reverse' : true
+    });
+    if (node != "") {
+      $("html,body").animate({
+        scrollTop:$("h2:contains(" + node +")").offset().top - 25
+      }, 500);
+    }
+  } else {
+    $.mobile.changePage("#main", {
+      'allowSamePageTransition' : true,
+      'transition' : 'slide',
+      'reverse' : true
+    });
+  }
+  $("#test_frame").attr("src", "");
+}
+
+function runApp(url) {
+  $.mobile.changePage("#test_ui", {
+    'allowSamePageTransition' : true,
+    'transition' : 'slide',
+    'changeHash' : false
+  });
+  $("#test_frame").attr("height", $(window).height());
+  $("#test_frame").attr("src", url);
+}
+
+$("#home_ui").live("pagebeforecreate", function () {
+  $("#version").text(getVersion());
+});
+
+$("#home_ui").live("pageshow", function () {
+  applist = getApps();
+  updateList();
+  updateFooter();
+});
+
+$("#exit").live("click", function () {
+  window.open('', '_self');
+  window.close();
+});
+
+$("#reset").live("click", function (event) {
+  sstorage.clear();
+  updateList();
+  return false;
+});
+
+$(".app").live("click", function () {
+  runApp($(this).find("div div a").attr("href"));
+  return false;
+});
+
+$('#main').live('pageshow',function(){
+  for(var i=0;i<sstorage.length;i++){
+    var key = sstorage.key(i);
+    var str = "h2:contains("+ key +")";
+    var node = $(str);
+    var item = sstorage.getItem(key);
+    if (item == "PASS") {
+      node.attr('style', 'color:green;');
+    } else if (item == "FAIL"){
+      node.attr('style', 'color:red;');
+    }
+  }
+  updateFooter();
+});
diff --git a/ivi/js/tests.js b/ivi/js/tests.js
new file mode 100644 (file)
index 0000000..c814dcb
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Li, Hao <haox.li@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+        Jiazhen, Shentu <jiazhenx.shentu@intel.com>
+
+*/
+
+function EnablePassButton(){
+  $('#pass_button').removeClass("ui-disabled");
+}
+
+function DisablePassButton(){
+  $('#pass_button').addClass("ui-disabled");
+}
+
+function getAppName() {
+  var lpath = window.parent._appURL;
+  var from = lpath.lastIndexOf("tests/") + 6;
+  var to = lpath.lastIndexOf("/");
+  return lpath.substring(from, to);
+}
+
+function backAppsHome() {
+  if (document.getElementById("wgt_name")) {
+    test = $("#wgt_name").attr("value");
+  } else {
+    test = document.title;
+  }
+  window.parent.launchMain(test);
+}
+
+function reportResult(res) {
+  if (document.getElementById("wgt_name")) {
+    test = $("#wgt_name").attr("value");
+  } else if (document.getElementById("sub_test")) {
+    var length = $("a h2").length;
+    var pass_num = 0;
+    var fail_num = 0;
+    $("a h2").each(function () {
+      var color = $(this).css("color");
+      if (color == "rgb(0, 128, 0)") {
+        pass_num++;
+      } else if (color == "rgb(255, 0, 0)") {
+        fail_num++;
+      }
+    });
+    res = [pass_num,fail_num,length-pass_num-fail_num, res];
+    test = document.title;
+  } else {
+    test = document.title;
+  }
+  window.sessionStorage.setItem(test, res);
+  backAppsHome();
+}
+
+function getParms() {
+  var parms = new Array();
+  var str = location.search.substring(1);
+  var items = str.split('&');
+  for ( var i = 0; i < items.length; i++) {
+    var pos = items[i].indexOf('=');
+    if (pos > 0) {
+      var key = items[i].substring(0, pos);
+      var val = items[i].substring(pos + 1);
+      if (!parms[key]) {
+        var rawVal = decodeURI(val);
+        if (rawVal.indexOf(',') < 0)
+          parms[key] = rawVal;
+        else
+          parms[key] = rawVal.split(',');
+      }
+    }
+  }
+  return parms["test_name"];
+}
+
+$(document).ready(function(){
+  var testname = getParms();
+  document.title = testname;
+  $("#main_page_title").text(testname);
+});
+
+$(document).bind('pagecreate', function () {
+  var footbar = $(':jqmData(role=footer)');
+  footbar.empty();
+  footbar.attr("data-tap-toggle", "false");
+  footbar.append("<div data-role=\"controlgroup\" data-type=\"horizontal\" align=\"center\">" +
+      "<a href=\"javascript:reportResult('PASS');\" id=\"pass_button\" data-role=\"button\" data-icon=\"check\" style=\"color: green\">Pass</a>" +
+      "<a href=\"javascript:reportResult('FAIL');\" id=\"fail_button\" data-role=\"button\" data-icon=\"delete\" style=\"color: red\">Fail</a>" +
+      "<a href=\"#popup_info\" data-icon=\"info\" data-role=\"button\" data-rel=\"popup\" data-transition=\"pop\">Info</a>" +
+      "<a href=\"javascript:backAppsHome();\" data-role=\"button\" data-rel=\"popup\" data-icon=\"home\">Back</a></div>");
+  footbar.trigger("create");
+  $(':jqmData(role=footer)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 10px 15px 30px');
+  $("#popup_info").popup( "option", "theme", "a");
+  var maxHeight = $(window).height() - 100 + "px";
+  $("#popup_info").css("max-height", maxHeight);
+  $("#popup_info").css("margin-bottom", "30px");
+});
+
+function checkInstalledPkg(pkgId) {
+    var packageInfo = null;
+    try {
+        if(pkgId && (typeof(tizen) != 'undefined')) {
+            packageInfo = tizen.package.getPackageInfo(pkgId);
+        }
+    } catch (e) {}
+
+    return packageInfo === null ? false : true;
+}
diff --git a/ivi/js/thirdparty/jquery.js b/ivi/js/thirdparty/jquery.js
new file mode 100644 (file)
index 0000000..f65cf1d
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */\r
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/ivi/js/thirdparty/jquery.mobile.js b/ivi/js/thirdparty/jquery.mobile.js
new file mode 100644 (file)
index 0000000..e0d02a9
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery Mobile vGit Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 jquerymobile.com | jquery.org/license !*/
+(function(a,b,c){typeof define=="function"&&define.amd?define(["jquery"],function(d){return c(d,a,b),d.mobile}):c(a.jQuery,a,b)})(this,document,function(a,b,c,d){(function(a,b,d){var e={};a.mobile=a.extend({},{version:"1.2.0",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:!0,hashListeningEnabled:!0,linkBindingEnabled:!0,defaultPageTransition:"fade",maxTransitionWidth:!1,minScrollBack:250,touchOverflowEnabled:!1,defaultDialogTransition:"pop",pageLoadErrorMessage:"Error Loading Page",pageLoadErrorMessageTheme:"e",phonegapNavigationEnabled:!1,autoInitializePage:!0,pushStateEnabled:!0,ignoreContentEnabled:!1,orientationChangeEnabled:!0,buttonMarkup:{hoverDelay:200},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91},silentScroll:function(d){a.type(d)!=="number"&&(d=a.mobile.defaultHomeScroll),a.event.special.scrollstart.enabled=!1,setTimeout(function(){b.scrollTo(0,d),a(c).trigger("silentscroll",{x:0,y:d})},20),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},nsNormalizeDict:e,nsNormalize:function(b){if(!b)return;return e[b]||(e[b]=a.camelCase(a.mobile.ns+b))},getInheritedTheme:function(a,b){var c=a[0],d="",e=/ui-(bar|body|overlay)-([a-z])\b/,f,g;while(c){f=c.className||"";if(f&&(g=e.exec(f))&&(d=g[2]))break;c=c.parentNode}return d||b||"a"},closestPageData:function(a){return a.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("page")},enhanceable:function(a){return this.haveParents(a,"enhance")},hijackable:function(a){return this.haveParents(a,"ajax")},haveParents:function(b,c){if(!a.mobile.ignoreContentEnabled)return b;var d=b.length,e=a(),f,g,h;for(var i=0;i<d;i++){g=b.eq(i),h=!1,f=b[i];while(f){var j=f.getAttribute?f.getAttribute("data-"+a.mobile.ns+c):"";if(j==="false"){h=!0;break}f=f.parentNode}h||(e=e.add(g))}return e},getScreenHeight:function(){return b.innerHeight||a(b).height()}},a.mobile),a.fn.jqmData=function(b,c){var e;return typeof b!="undefined"&&(b&&(b=a.mobile.nsNormalize(b)),arguments.length<2||c===d?e=this.data(b):e=this.data(b,c)),e},a.jqmData=function(b,c,d){var e;return typeof c!="undefined"&&(e=a.data(b,c?a.mobile.nsNormalize(c):c,d)),e},a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))},a.jqmRemoveData=function(b,c){return a.removeData(b,a.mobile.nsNormalize(c))},a.fn.removeWithDependents=function(){a.removeWithDependents(this)},a.removeWithDependents=function(b){var c=a(b);(c.jqmData("dependents")||a()).remove(),c.remove()},a.fn.addDependents=function(b){a.addDependents(a(this),b)},a.addDependents=function(b,c){var d=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(d,c))},a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()},a.fn.jqmEnhanceable=function(){return a.mobile.enhanceable(this)},a.fn.jqmHijackable=function(){return a.mobile.hijackable(this)};var f=a.find,g=/:jqmData\(([^)]*)\)/g;a.find=function(b,c,d,e){return b=b.replace(g,"[data-"+(a.mobile.ns||"")+"$1]"),f.call(this,b,c,d,e)},a.extend(a.find,f),a.find.matches=function(b,c){return a.find(b,null,null,c)},a.find.matchesSelector=function(b,c){return a.find(c,null,null,[b]).length>0}})(a,this),function(a,b){var c=0,d=Array.prototype.slice,e=a.cleanData;a.cleanData=function(b){for(var c=0,d;(d=b[c])!=null;c++)try{a(d).triggerHandler("remove")}catch(f){}e(b)},a.widget=function(b,c,d){var e,f,g,h,i=b.split(".")[0];b=b.split(".")[1],e=i+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][e]=function(b){return!!a.data(b,e)},a[i]=a[i]||{},f=a[i][b],g=a[i][b]=function(a,b){if(!this._createWidget)return new g(a,b);arguments.length&&this._createWidget(a,b)},a.extend(g,f,{version:d.version,_proto:a.extend({},d),_childConstructors:[]}),h=new c,h.options=a.widget.extend({},h.options),a.each(d,function(b,e){a.isFunction(e)&&(d[b]=function(){var a=function(){return c.prototype[b].apply(this,arguments)},d=function(a){return c.prototype[b].apply(this,a)};return function(){var b=this._super,c=this._superApply,f;return this._super=a,this._superApply=d,f=e.apply(this,arguments),this._super=b,this._superApply=c,f}}())}),g.prototype=a.widget.extend(h,{widgetEventPrefix:b},d,{constructor:g,namespace:i,widgetName:b,widgetBaseClass:e,widgetFullName:e}),f?(a.each(f._childConstructors,function(b,c){var d=c.prototype;a.widget(d.namespace+"."+d.widgetName,g,c._proto)}),delete f._childConstructors):c._childConstructors.push(g),a.widget.bridge(b,g)},a.widget.extend=function(c){var e=d.call(arguments,1),f=0,g=e.length,h,i;for(;f<g;f++)for(h in e[f])i=e[f][h],e[f].hasOwnProperty(h)&&i!==b&&(c[h]=a.isPlainObject(i)?a.widget.extend({},c[h],i):i);return c},a.widget.bridge=function(c,e){var f=e.prototype.widgetFullName;a.fn[c]=function(g){var h=typeof g=="string",i=d.call(arguments,1),j=this;return g=!h&&i.length?a.widget.extend.apply(null,[g].concat(i)):g,h?this.each(function(){var d,e=a.data(this,f);if(!e)return a.error("cannot call methods on "+c+" prior to initialization; "+"attempted to call method '"+g+"'");if(!a.isFunction(e[g])||g.charAt(0)==="_")return a.error("no such method '"+g+"' for "+c+" widget instance");d=e[g].apply(e,i);if(d!==e&&d!==b)return j=d&&d.jquery?j.pushStack(d.get()):d,!1}):this.each(function(){var b=a.data(this,f);b?b.option(g||{})._init():new e(g,this)}),j}},a.Widget=function(a,b){},a.Widget._childConstructors=[],a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(b,d){d=a(d||this.defaultElement||this)[0],this.element=a(d),this.uuid=c++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=a.widget.extend({},this.options,this._getCreateOptions(),b),this.bindings=a(),this.hoverable=a(),this.focusable=a(),d!==this&&(a.data(d,this.widgetName,this),a.data(d,this.widgetFullName,this),this._on({remove:"destroy"}),this.document=a(d.style?d.ownerDocument:d.document||d),this.window=a(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:a.noop,_getCreateEventData:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(c,d){var e=c,f,g,h;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof c=="string"){e={},f=c.split("."),c=f.shift();if(f.length){g=e[c]=a.widget.extend({},this.options[c]);for(h=0;h<f.length-1;h++)g[f[h]]=g[f[h]]||{},g=g[f[h]];c=f.pop();if(d===b)return g[c]===b?null:g[c];g[c]=d}else{if(d===b)return this.options[c]===b?null:this.options[c];e[c]=d}}return this._setOptions(e),this},_setOptions:function(a){var b;for(b in a)this._setOption(b,a[b]);return this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!b).attr("aria-disabled",b),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(b,c){c?(b=a(b),this.bindings=this.bindings.add(b)):(c=b,b=this.element);var d=this;a.each(c,function(c,e){function f(){if(d.options.disabled===!0||a(this).hasClass("ui-state-disabled"))return;return(typeof e=="string"?d[e]:e).apply(d,arguments)}typeof e!="string"&&(f.guid=e.guid=e.guid||f.guid||a.guid++);var g=c.match(/^(\w+)\s*(.*)$/),h=g[1]+d.eventNamespace,i=g[2];i?d.widget().delegate(i,h,f):b.bind(h,f)})},_off:function(a,b){b=(b||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,a.unbind(b).undelegate(b)},_delay:function(a,b){function c(){return(typeof a=="string"?d[a]:a).apply(d,arguments)}var d=this;return setTimeout(c,b||0)},_hoverable:function(b){this.hoverable=this.hoverable.add(b),this._on(b,{mouseenter:function(b){a(b.currentTarget).addClass("ui-state-hover")},mouseleave:function(b){a(b.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(b){this.focusable=this.focusable.add(b),this._on(b,{focusin:function(b){a(b.currentTarget).addClass("ui-state-focus")},focusout:function(b){a(b.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.apply(this.element[0],[c].concat(d))===!1||c.isDefaultPrevented())}},a.each({show:"fadeIn",hide:"fadeOut"},function(b,c){a.Widget.prototype["_"+b]=function(d,e,f){typeof e=="string"&&(e={effect:e});var g,h=e?e===!0||typeof e=="number"?c:e.effect||c:b;e=e||{},typeof e=="number"&&(e={duration:e}),g=!a.isEmptyObject(e),e.complete=f,e.delay&&d.delay(e.delay),g&&a.effects&&(a.effects.effect[h]||a.uiBackCompat!==!1&&a.effects[h])?d[b](e):h!==b&&d[h]?d[h](e.duration,e.easing,f):d.queue(function(c){a(this)[b](),f&&f.call(d[0]),c()})}}),a.uiBackCompat!==!1&&(a.Widget.prototype._getCreateOptions=function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]})}(a),function(a,b){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments),this._trigger("init")},_getCreateOptions:function(){var c=this.element,d={};return a.each(this.options,function(a){var e=c.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));e!==b&&(d[a]=e)}),d},enhanceWithin:function(b,c){this.enhance(a(this.options.initSelector,a(b)),c)},enhance:function(b,c){var d,e,f=a(b),g=this;f=a.mobile.enhanceable(f),c&&f.length&&(d=a.mobile.closestPageData(f),e=d&&d.keepNativeSelector()||"",f=f.not(e)),f[this.widgetName]()},raise:function(a){throw"Widget ["+this.widgetName+"]: "+a}})}(a),function(a,b){a.extend(a.mobile,{loadingMessageTextVisible:d,loadingMessageTheme:d,loadingMessage:d,showPageLoadingMsg:function(b,c,d){a.mobile.loading("show",b,c,d)},hidePageLoadingMsg:function(){a.mobile.loading("hide")},loading:function(){this.loaderWidget.loader.apply(this.loaderWidget,arguments)}});var c="ui-loader",e=a("html"),f=a(b);a.widget("mobile.loader",{options:{theme:"a",textVisible:!1,html:"",text:"loading"},defaultHtml:"<div class='"+c+"'>"+"<span class='ui-icon ui-icon-loading'></span>"+"<h1></h1>"+"</div>",fakeFixLoader:function(){var b=a("."+a.mobile.activeBtnClass).first();this.element.css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})},checkLoaderPosition:function(){var b=this.element.offset(),c=f.scrollTop(),d=a.mobile.getScreenHeight();if(b.top<c||b.top-c>d)this.element.addClass("ui-loader-fakefix"),this.fakeFixLoader(),f.unbind("scroll",this.checkLoaderPosition).bind("scroll",this.fakeFixLoader)},resetHtml:function(){this.element.html(a(this.defaultHtml).html())},show:function(b,g,h){var i,j,k,l;this.resetHtml(),a.type(b)==="object"?(l=a.extend({},this.options,b),b=l.theme||a.mobile.loadingMessageTheme):(l=this.options,b=b||a.mobile.loadingMessageTheme||l.theme),j=g||a.mobile.loadingMessage||l.text,e.addClass("ui-loading");if(a.mobile.loadingMessage!==!1||l.html)a.mobile.loadingMessageTextVisible!==d?i=a.mobile.loadingMessageTextVisible:i=l.textVisible,this.element.attr("class",c+" ui-corner-all ui-body-"+b+" ui-loader-"+(i||g||b.text?"verbose":"default")+(l.textonly||h?" ui-loader-textonly":"")),l.html?this.element.html(l.html):this.element.find("h1").text(j),this.element.appendTo(a.mobile.pageContainer),this.checkLoaderPosition(),f.bind("scroll",a.proxy(this.checkLoaderPosition,this))},hide:function(){e.removeClass("ui-loading"),a.mobile.loadingMessage&&this.element.removeClass("ui-loader-fakefix"),a(b).unbind("scroll",a.proxy(this.fakeFixLoader,this)),a(b).unbind("scroll",a.proxy(this.checkLoaderPosition,this))}}),f.bind("pagecontainercreate",function(){a.mobile.loaderWidget=a.mobile.loaderWidget||a(a.mobile.loader.prototype.defaultHtml).loader()})}(a,this),function(a,b,c,d){function x(a){while(a&&typeof a.originalEvent!="undefined")a=a.originalEvent;return a}function y(b,c){var e=b.type,f,g,i,k,l,m,n,o,p;b=a.Event(b),b.type=c,f=b.originalEvent,g=a.event.props,e.search(/^(mouse|click)/)>-1&&(g=j);if(f)for(n=g.length,k;n;)k=g[--n],b[k]=f[k];e.search(/mouse(down|up)|click/)>-1&&!b.which&&(b.which=1);if(e.search(/^touch/)!==-1){i=x(f),e=i.touches,l=i.changedTouches,m=e&&e.length?e[0]:l&&l.length?l[0]:d;if(m)for(o=0,p=h.length;o<p;o++)k=h[o],b[k]=m[k]}return b}function z(b){var c={},d,f;while(b){d=a.data(b,e);for(f in d)d[f]&&(c[f]=c.hasVirtualBinding=!0);b=b.parentNode}return c}function A(b,c){var d;while(b){d=a.data(b,e);if(d&&(!c||d[c]))return b;b=b.parentNode}return null}function B(){r=!1}function C(){r=!0}function D(){v=0,p.length=0,q=!1,C()}function E(){B()}function F(){G(),l=setTimeout(function(){l=0,D()},a.vmouse.resetTimerDuration)}function G(){l&&(clearTimeout(l),l=0)}function H(b,c,d){var e;if(d&&d[b]||!d&&A(c.target,b))e=y(c,b),a(c.target).trigger(e);return e}function I(b){var c=a.data(b.target,f);if(!q&&(!v||v!==c)){var d=H("v"+b.type,b);d&&(d.isDefaultPrevented()&&b.preventDefault(),d.isPropagationStopped()&&b.stopPropagation(),d.isImmediatePropagationStopped()&&b.stopImmediatePropagation())}}function J(b){var c=x(b).touches,d,e;if(c&&c.length===1){d=b.target,e=z(d);if(e.hasVirtualBinding){v=u++,a.data(d,f,v),G(),E(),o=!1;var g=x(b).touches[0];m=g.pageX,n=g.pageY,H("vmouseover",b,e),H("vmousedown",b,e)}}}function K(a){if(r)return;o||H("vmousecancel",a,z(a.target)),o=!0,F()}function L(b){if(r)return;var c=x(b).touches[0],d=o,e=a.vmouse.moveDistanceThreshold,f=z(b.target);o=o||Math.abs(c.pageX-m)>e||Math.abs(c.pageY-n)>e,o&&!d&&H("vmousecancel",b,f),H("vmousemove",b,f),F()}function M(a){if(r)return;C();var b=z(a.target),c;H("vmouseup",a,b);if(!o){var d=H("vclick",a,b);d&&d.isDefaultPrevented()&&(c=x(a).changedTouches[0],p.push({touchID:v,x:c.clientX,y:c.clientY}),q=!0)}H("vmouseout",a,b),o=!1,F()}function N(b){var c=a.data(b,e),d;if(c)for(d in c)if(c[d])return!0;return!1}function O(){}function P(b){var c=b.substr(1);return{setup:function(d,f){N(this)||a.data(this,e,{});var g=a.data(this,e);g[b]=!0,k[b]=(k[b]||0)+1,k[b]===1&&t.bind(c,I),a(this).bind(c,O),s&&(k.touchstart=(k.touchstart||0)+1,k.touchstart===1&&t.bind("touchstart",J).bind("touchend",M).bind("touchmove",L).bind("scroll",K))},teardown:function(d,f){--k[b],k[b]||t.unbind(c,I),s&&(--k.touchstart,k.touchstart||t.unbind("touchstart",J).unbind("touchmove",L).unbind("touchend",M).unbind("scroll",K));var g=a(this),h=a.data(this,e);h&&(h[b]=!1),g.unbind(c,O),N(this)||g.removeData(e)}}}var e="virtualMouseBindings",f="virtualTouchID",g="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),h="clientX clientY pageX pageY screenX screenY".split(" "),i=a.event.mouseHooks?a.event.mouseHooks.props:[],j=a.event.props.concat(i),k={},l=0,m=0,n=0,o=!1,p=[],q=!1,r=!1,s="addEventListener"in c,t=a(c),u=1,v=0,w;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var Q=0;Q<g.length;Q++)a.event.special[g[Q]]=P(g[Q]);s&&c.addEventListener("click",function(b){var c=p.length,d=b.target,e,g,h,i,j,k;if(c){e=b.clientX,g=b.clientY,w=a.vmouse.clickDistanceThreshold,h=d;while(h){for(i=0;i<c;i++){j=p[i],k=0;if(h===d&&Math.abs(j.x-e)<w&&Math.abs(j.y-g)<w||a.data(h,f)===j.touchID){b.preventDefault(),b.stopPropagation();return}}h=h.parentNode}}},!0)}(a,b,c),function(a,b){var d={touch:"ontouchend"in c};a.mobile=a.mobile||{},a.mobile.support=a.mobile.support||{},a.extend(a.support,d),a.extend(a.mobile.support,d)}(a),function(a,b,d){function j(b,c,d){var e=d.type;d.type=c,a.event.handle.call(b,d),d.type=e}a.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)},a.attrFn&&(a.attrFn[c]=!0)});var e=a.mobile.support.touch,f="touchmove scroll",g=e?"touchstart":"mousedown",h=e?"touchend":"mouseup",i=e?"touchmove":"mousemove";a.event.special.scrollstart={enabled:!0,setup:function(){function g(a,c){d=c,j(b,d?"scrollstart":"scrollstop",a)}var b=this,c=a(b),d,e;c.bind(f,function(b){if(!a.event.special.scrollstart.enabled)return;d||g(b,!0),clearTimeout(e),e=setTimeout(function(){g(b,!1)},50)})}},a.event.special.tap={tapholdThreshold:750,setup:function(){var b=this,d=a(b);d.bind("vmousedown",function(e){function i(){clearTimeout(h)}function k(){i(),d.unbind("vclick",l).unbind("vmouseup",i),a(c).unbind("vmousecancel",k)}function l(a){k(),f===a.target&&j(b,"tap",a)}if(e.which&&e.which!==1)return!1;var f=e.target,g=e.originalEvent,h;d.bind("vmouseup",i).bind("vclick",l),a(c).bind("vmousecancel",k),h=setTimeout(function(){j(b,"taphold",a.Event("taphold",{target:f}))},a.event.special.tap.tapholdThreshold)})}},a.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var b=this,c=a(b);c.bind(g,function(b){function j(b){if(!f)return;var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;g={time:(new Date).getTime(),coords:[c.pageX,c.pageY]},Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&b.preventDefault()}var e=b.originalEvent.touches?b.originalEvent.touches[0]:b,f={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(b.target)},g;c.bind(i,j).one(h,function(b){c.unbind(i,j),f&&g&&g.time-f.time<a.event.special.swipe.durationThreshold&&Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(f.coords[1]-g.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&f.origin.trigger("swipe").trigger(f.coords[0]>g.coords[0]?"swipeleft":"swiperight"),f=g=d})})}},a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})}(a,this),function(a,c){a.extend(a.support,{orientation:"orientation"in b&&"onorientationchange"in b})}(a),function(a){a.event.special.throttledresize={setup:function(){a(this).bind("resize",c)},teardown:function(){a(this).unbind("resize",c)}};var b=250,c=function(){f=(new Date).getTime(),g=f-d,g>=b?(d=f,a(this).trigger("throttledresize")):(e&&clearTimeout(e),e=setTimeout(c,b-g))},d=0,e,f,g}(a),function(a,b){function o(){var a=g();a!==h&&(h=a,d.trigger(e))}var d=a(b),e="orientationchange",f,g,h,i,j,k={0:!0,180:!0};if(a.support.orientation){var l=b.innerWidth||a(b).width(),m=b.innerHeight||a(b).height(),n=50;i=l>m&&l-m>n,j=k[b.orientation];if(i&&j||!i&&!j)k={"-90":!0,90:!0}}a.event.special.orientationchange=a.extend({},a.event.special.orientationchange,{setup:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;h=g(),d.bind("throttledresize",o)},teardown:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;d.unbind("throttledresize",o)},add:function(a){var b=a.handler;a.handler=function(a){return a.orientation=g(),b.apply(this,arguments)}}}),a.event.special.orientationchange.orientation=g=function(){var d=!0,e=c.documentElement;return a.support.orientation?d=k[b.orientation]:d=e&&e.clientWidth/e.clientHeight<1.1,d?"portrait":"landscape"},a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.attrFn&&(a.attrFn[e]=!0)}(a,this),function(a,d){var e=a(b),f=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'></div>"),e=a("<body>").append(d);return function(a){if(!(a in b)){var g=c.createElement("style"),h="@media "+a+" { #jquery-mediatest { position:absolute; } }";g.type="text/css",g.styleSheet?g.styleSheet.cssText=h:g.appendChild(c.createTextNode(h)),f.prepend(e).prepend(g),b[a]=d.css("position")==="absolute",e.add(g).remove()}return b[a]}}()}(a),function(a,d){function e(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+" "+h.join(b+" ")+b).split(" ");for(var e in c)if(g[c[e]]!==d)return!0}function m(a,b,d){var e=c.createElement("div"),f=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},g=function(a){return"-"+a.charAt(0).toLowerCase()+a.substr(1)+"-"},i=function(c){var d=g(c)+a+": "+b+";",h=f(c),i=h+f(a);e.setAttribute("style",d),!e.style[i]||(k=!0)},j=d?[d]:h,k;for(var l=0;l<j.length;l++)i(j[l]);return!!k}function n(){var b="transform-3d";return m("perspective","10px","moz")||a.mobile.media("(-"+h.join("-"+b+"),(-")+"-"+b+"),("+b+")")}function o(){var b=location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),d=null,e="",g,h;return c.length?e=c.attr("href"):c=d=a("<base>",{href:b}).appendTo("head"),g=a("<a href='testurl' />").prependTo(f),h=g[0].href,c[0].href=e||location.pathname,d&&d.remove(),h.indexOf(b)===0}function p(){var a=c.createElement("x"),d=c.documentElement,e=b.getComputedStyle,f;return"pointerEvents"in a.style?(a.style.pointerEvents="auto",a.style.pointerEvents="x",d.appendChild(a),f=e&&e(a,"").pointerEvents==="auto",d.removeChild(a),!!f):!1}function q(){var a=c.createElement("div");return typeof a.getBoundingClientRect!="undefined"}var f=a("<body>").prependTo("html"),g=f[0].style,h=["Webkit","Moz","O"],i="palmGetResource"in b,j=b.opera,k=b.operamini&&{}.toString.call(b.operamini)==="[object OperaMini]",l=b.blackberry&&!e("-webkit-transform");a.extend(a.mobile,{browser:{}}),a.mobile.browser.ie=function(){var a=3,b=c.createElement("div"),d=b.all||[];do b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->";while(d[0]);return a>4?a:!a}(),a.extend(a.support,{cssTransitions:"WebKitTransitionEvent"in b||m("transition","height 100ms linear")&&!j,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!e("content"),touchOverflow:!!e("overflowScrolling"),cssTransform3d:n(),boxShadow:!!e("boxShadow")&&!l,scrollTop:("pageXOffset"in b||"scrollTop"in c.documentElement||"scrollTop"in f[0])&&!i&&!k,dynamicBaseTag:o(),cssPointerEvents:p(),boundingRect:q()}),f.remove();var r=function(){var a=b.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();a.mobile.gradeA=function(){return(a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=7)&&(a.support.boundingRect||a.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/)!==null)},a.mobile.ajaxBlacklist=b.blackberry&&!b.WebKitPoint||k||r,r&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")}),a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")}(a),function(a,b){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:!1,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){var a=this;if(a._trigger("beforecreate")===!1)return!1;a.element.attr("tabindex","0").addClass("ui-page ui-body-"+a.options.theme).bind("pagebeforehide",function(){a.removeContainerBackground()}).bind("pagebeforeshow",function(){a.setContainerBackground()})},removeContainerBackground:function(){a.mobile.pageContainer.removeClass("ui-overlay-"+a.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(b){this.options.theme&&a.mobile.pageContainer.addClass("ui-overlay-"+(b||this.options.theme))},keepNativeSelector:function(){var b=this.options,c=b.keepNative&&a.trim(b.keepNative);return c&&b.keepNative!==b.keepNativeDefault?[b.keepNative,b.keepNativeDefault].join(", "):b.keepNativeDefault}})}(a),function(a,b,d){function k(a){return a=a||location.href,"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var e="hashchange",f=c,g,h=a.event.special,i=f.documentMode,j="on"+e in b&&(i===d||i>7);a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.fn[e].delay=50,h[e]=a.extend(h[e],{setup:function(){if(j)return!1;a(g.start)},teardown:function(){if(j)return!1;a(g.stop)}}),g=function(){function n(){var c=k(),d=m(h);c!==h?(l(h=c,d),a(b).trigger(e)):d!==h&&(location.href=location.href.replace(/#.*/,"")+d),g=setTimeout(n,a.fn[e].delay)}var c={},g,h=k(),i=function(a){return a},l=i,m=i;return c.start=function(){g||n()},c.stop=function(){g&&clearTimeout(g),g=d},a.browser.msie&&!j&&function(){var b,d;c.start=function(){b||(d=a.fn[e].src,d=d&&d+k(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){d||l(k()),n()}).attr("src",d||"javascript:0").insertAfter("body")[0].contentWindow,f.onpropertychange=function(){try{event.propertyName==="title"&&(b.document.title=f.title)}catch(a){}})},c.stop=i,m=function(){return k(b.location.href)},l=function(c,d){var g=b.document,h=a.fn[e].domain;c!==d&&(g.title=f.title,g.open(),h&&g.write('<script>document.domain="'+h+'"</script>'),g.close(),b.location.hash=c)}}(),c}()}(a,this),function(a,b,c){var d=function(d){return d===c&&(d=!0),function(c,e,f,g){var h=new a.Deferred,i=e?" reverse":"",j=a.mobile.urlHistory.getActive(),k=j.lastScroll||a.mobile.defaultHomeScroll,l=a.mobile.getScreenHeight(),m=a.mobile.maxTransitionWidth!==!1&&a(b).width()>a.mobile.maxTransitionWidth,n=!a.support.cssTransitions||m||!c||c==="none"||Math.max(a(b).scrollTop(),k)>a.mobile.getMaxScrollForTransition(),o=" ui-page-pre-in",p=function(){a.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+c)},q=function(){a.event.special.scrollstart.enabled=!1,b.scrollTo(0,k),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},r=function(){g.removeClass(a.mobile.activePageClass+" out in reverse "+c).height("")},s=function(){d?g.animationComplete(t):t(),g.height(l+a(b).scrollTop()).addClass(c+" out"+i)},t=function(){g&&d&&r(),u()},u=function(){f.css("z-index",-10),f.addClass(a.mobile.activePageClass+o),a.mobile.focusPage(f),f.height(l+k),q(),f.css("z-index",""),n||f.animationComplete(v),f.removeClass(o).addClass(c+" in"+i),n&&v()},v=function(){d||g&&r(),f.removeClass("out in reverse "+c).height(""),p(),a(b).scrollTop()!==k&&q(),h.resolve(c,e,f,g,!0)};return p(),g&&!n?s():t(),h.promise()}},e=d(),f=d(!1),g=function(){return a.mobile.getScreenHeight()*3};a.mobile.defaultTransitionHandler=e,a.mobile.transitionHandlers={"default":a.mobile.defaultTransitionHandler,sequential:e,simultaneous:f},a.mobile.transitionFallbacks={},a.mobile._maybeDegradeTransition=function(b){return b&&!a.support.cssTransform3d&&a.mobile.transitionFallbacks[b]&&(b=a.mobile.transitionFallbacks[b]),b},a.mobile.getMaxScrollForTransition=a.mobile.getMaxScrollForTransition||g}(a,this),function(a,d){function u(b){!!i&&(!i.closest("."+a.mobile.activePageClass).length||b)&&i.removeClass(a.mobile.activeBtnClass),i=null}function v(){m=!1,l.length>0&&a.mobile.changePage.apply(null,l.pop())}function z(b,c,d,e){c&&c.data("page")._trigger("beforehide",null,{nextPage:b}),b.data("page")._trigger("beforeshow",null,{prevPage:c||a("")}),a.mobile.hidePageLoadingMsg(),d=a.mobile._maybeDegradeTransition(d);var f=a.mobile.transitionHandlers[d||"default"]||a.mobile.defaultTransitionHandler,g=f(d,e,b,c);return g.done(function(){c&&c.data("page")._trigger("hide",null,{nextPage:b}),b.data("page")._trigger("show",null,{prevPage:c||a("")})}),g}function A(){var b=a("."+a.mobile.activePageClass),c=parseFloat(b.css("padding-top")),d=parseFloat(b.css("padding-bottom")),e=parseFloat(b.css("border-top-width")),f=parseFloat(b.css("border-bottom-width"));b.css("min-height",s()-c-d-e-f)}function B(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c),b.page()}function C(a){while(a){if(typeof a.nodeName=="string"&&a.nodeName.toLowerCase()==="a")break;a=a.parentNode}return a}function D(b){var c=a(b).closest(".ui-page").jqmData("url"),d=q.hrefNoHash;if(!c||!h.isPath(c))c=d;return h.makeUrlAbsolute(c,d)}var e=a(b),f=a("html"),g=a("head"),h={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,getLocation:function(a){var b=a?this.parseUrl(a):location,c=this.parseUrl(a||location.href).hash;return c=c==="#"?"":c,b.protocol+"//"+b.host+b.pathname+b.search+c},parseLocation:function(){return this.parseUrl(this.getLocation())},parseUrl:function(b){if(a.type(b)==="object")return b;var c=h.urlParseRE.exec(b||"")||[];return{href:c[0]||"",hrefNoHash:c[1]||"",hrefNoSearch:c[2]||"",domain:c[3]||"",protocol:c[4]||"",doubleSlash:c[5]||"",authority:c[6]||"",username:c[8]||"",password:c[9]||"",host:c[10]||"",hostname:c[11]||"",port:c[12]||"",pathname:c[13]||"",directory:c[14]||"",filename:c[15]||"",search:c[16]||"",hash:c[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;a=a||"",b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"";var c=b?b.split("/"):[],d=a.split("/");for(var e=0;e<d.length;e++){var f=d[e];switch(f){case".":break;case"..":c.length&&c.pop();break;default:c.push(f)}}return"/"+c.join("/")},isSameDomain:function(a,b){return h.parseUrl(a).domain===h.parseUrl(b).domain},isRelativeUrl:function(a){return h.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return h.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!h.isRelativeUrl(a))return a;b===d&&(b=q);var c=h.parseUrl(a),e=h.parseUrl(b),f=c.protocol||e.protocol,g=c.protocol?c.doubleSlash:c.doubleSlash||e.doubleSlash,i=c.authority||e.authority,j=c.pathname!=="",k=h.makePathAbsolute(c.pathname||e.filename,e.pathname),l=c.search||!j&&e.search||"",m=c.hash;return f+g+i+k+l+m},addSearchParams:function(b,c){var d=h.parseUrl(b),e=typeof c=="object"?a.param(c):c,f=d.search||"?";return d.hrefNoSearch+f+(f.charAt(f.length-1)!=="?"?"&":"")+e+(d.hash||"")},convertUrlToDataUrl:function(a){var c=h.parseUrl(a);return h.isEmbeddedPage(c)?c.hash.split(n)[0].replace(/^#/,""):h.isSameDomain(c,q)?c.hrefNoHash.replace(q.domain,"").split(n)[0]:b.decodeURIComponent(a)},get:function(a){return a===d&&(a=h.parseLocation().hash),h.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(n)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(q.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return h.stripHash(a.replace(/\?.*$/,"").replace(n,""))},isHashValid:function(a){return/^#[^#]+$/.test(a)},isExternal:function(a){var b=h.parseUrl(a);return b.protocol&&b.domain!==p.domain?!0:!1},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var c=h.parseUrl(h.makeUrlAbsolute(b,q)),e=c.hrefNoHash===p.hrefNoHash||r&&c.hrefNoHash===q.hrefNoHash,f=a.mobile.firstPage,g=f&&f[0]?f[0].id:d;return e&&(!c.hash||c.hash==="#"||g&&c.hash.replace(/^#/,"")===g)},isEmbeddedPage:function(a){var b=h.parseUrl(a);return b.protocol!==""?b.hash&&(b.hrefNoHash===p.hrefNoHash||r&&b.hrefNoHash===q.hrefNoHash):/^#/.test(b.href)},isPermittedCrossDomainRequest:function(b,c){return a.mobile.allowCrossDomainPages&&b.protocol==="file:"&&c.search(/^https?:/)!==-1}},i=null,j={stack:[],activeIndex:0,getActive:function(){return j.stack[j.activeIndex]},getPrev:function(){return j.stack[j.activeIndex-1]},getNext:function(){return j.stack[j.activeIndex+1]},addNew:function(a,b,c,d,e){j.getNext()&&j.clearForward(),j.stack.push({url:a,transition:b,title:c,pageUrl:d,role:e}),j.activeIndex=j.stack.length-1},clearForward:function(){j.stack=j.stack.slice(0,j.activeIndex+1)},directHashChange:function(b){var c,e,f,g=this.getActive();a.each(j.stack,function(a,d){decodeURIComponent(b.currentUrl)===decodeURIComponent(d.url)&&(c=a<j.activeIndex,e=!c,f=a)}),this.activeIndex=f!==d?f:this.activeIndex,c?(b.either||b.isBack)(!0):e&&(b.either||b.isForward)(!1)},ignoreNextHashChange:!1},k="[tabindex],a,button:visible,select:visible,input",l=[],m=!1,n="&ui-state=dialog",o=g.children("base"),p=h.parseLocation(),q=o.length?h.parseUrl(h.makeUrlAbsolute(o.attr("href"),p.href)):p,r=p.hrefNoHash!==q.hrefNoHash,s=a.mobile.getScreenHeight,t=a.support.dynamicBaseTag?{element:o.length?o:a("<base>",{href:q.hrefNoHash}).prependTo(g),set:function(a){t.element.attr("href",h.makeUrlAbsolute(a,q))},reset:function(){t.element.attr("href",q.hrefNoHash)}}:d;a.mobile.back=function(){var a=b.navigator;this.phonegapNavigationEnabled&&a&&a.app&&a.app.backHistory?a.app.backHistory():b.history.back()},a.mobile.focusPage=function(a){var b=a.find("[autofocus]"),c=a.find(".ui-title:eq(0)");if(b.length){b.focus();return}c.length?c.focus():a.focus()};var w=!0,x,y;x=function(){if(!w)return;var b=a.mobile.urlHistory.getActive();if(b){var c=e.scrollTop();b.lastScroll=c<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:c}},y=function(){setTimeout(x,100)},e.bind(a.support.pushState?"popstate":"hashchange",function(){w=!1}),e.one(a.support.pushState?"popstate":"hashchange",function(){w=!0}),e.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){w=!0,e.unbind("scrollstop",y),e.bind("scrollstop",y)})}),e.bind("scrollstop",y),a.mobile._maybeDegradeTransition=a.mobile._maybeDegradeTransition||function(a){return a},a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd animationend",b):(setTimeout(b,0),a(this))},a.mobile.path=h,a.mobile.base=t,a.mobile.urlHistory=j,a.mobile.dialogHashKey=n,a.mobile.allowCrossDomainPages=!1,a.mobile.getDocumentUrl=function(b){return b?a.extend({},p):p.href},a.mobile.getDocumentBase=function(b){return b?a.extend({},q):q.href},a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c),c.isDefaultPrevented()||b.removeWithDependents()})},a.mobile.loadPage=function(b,c){var e=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),g=null,i=null,j=function(){var b=a.mobile.activePage&&D(a.mobile.activePage);return b||q.hrefNoHash},k=h.makeUrlAbsolute(b,j());f.data&&f.type==="get"&&(k=h.addSearchParams(k,f.data),f.data=d),f.data&&f.type==="post"&&(f.reloadPage=!0);var l=h.getFilePath(k),m=h.convertUrlToDataUrl(k);f.pageContainer=f.pageContainer||a.mobile.pageContainer,g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']"),g.length===0&&m&&!h.isPath(m)&&(g=f.pageContainer.children("#"+m).attr("data-"+a.mobile.ns+"url",m).jqmData("url",m));if(g.length===0)if(a.mobile.firstPage&&h.isFirstPageUrl(l))a.mobile.firstPage.parent().length&&(g=a(a.mobile.firstPage));else if(h.isEmbeddedPage(l))return e.reject(k,c),e.promise();if(g.length){if(!f.reloadPage)return B(g,f.role),e.resolve(k,c,g),e.promise();i=g}var n=f.pageContainer,o=new a.Event("pagebeforeload"),r={url:b,absUrl:k,dataUrl:m,deferred:e,options:f};n.trigger(o,r);if(o.isDefaultPrevented())return e.promise();if(f.showLoadMsg)var s=setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay),u=function(){clearTimeout(s),a.mobile.hidePageLoadingMsg()};return t&&t.reset(),!a.mobile.allowCrossDomainPages&&!h.isSameDomain(p,k)?e.reject(k,c):a.ajax({url:l,type:f.type,data:f.data,dataType:"html",success:function(d,j,n){var o=a("<div></div>"),p=d.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,q=new RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)"),s=new RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");q.test(d)&&RegExp.$1&&s.test(RegExp.$1)&&RegExp.$1&&(b=l=h.getFilePath(a("<div>"+RegExp.$1+"</div>").text())),t&&t.set(l),o.get(0).innerHTML=d,g=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first(),g.length||(g=a("<div data-"+a.mobile.ns+"role='page'>"+d.split(/<\/?body[^>]*>/gmi)[1]+"</div>")),p&&!g.jqmData("title")&&(~p.indexOf("&")&&(p=a("<div>"+p+"</div>").text()),g.jqmData("title",p));if(!a.support.dynamicBaseTag){var v=h.get(l);g.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b);c=c.replace(location.protocol+"//"+location.host+location.pathname,""),/^(\w+:|#|\/)/.test(c)||a(this).attr(b,v+c)})}g.attr("data-"+a.mobile.ns+"url",h.convertUrlToDataUrl(l)).attr("data-"+a.mobile.ns+"external-page",!0).appendTo(f.pageContainer),g.one("pagecreate",a.mobile._bindPageRemove),B(g,f.role),k.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']")),f.showLoadMsg&&u(),r.xhr=n,r.textStatus=j,r.page=g,f.pageContainer.trigger("pageload",r),e.resolve(k,c,g,i)},error:function(b,d,g){t&&t.set(h.get()),r.xhr=b,r.textStatus=d,r.errorThrown=g;var i=new a.Event("pageloadfailed");f.pageContainer.trigger(i,r);if(i.isDefaultPrevented())return;f.showLoadMsg&&(u(),a.mobile.showPageLoadingMsg(a.mobile.pageLoadErrorMessageTheme,a.mobile.pageLoadErrorMessage,!0),setTimeout(a.mobile.hidePageLoadingMsg,1500)),e.reject(k,c)}}),e.promise()},a.mobile.loadPage.defaults={type:"get",data:d,reloadPage:!1,role:d,showLoadMsg:!1,pageContainer:d,loadMsgDelay:50},a.mobile.changePage=function(b,e){if(m){l.unshift(arguments);return}var f=a.extend({},a.mobile.changePage.defaults,e);f.pageContainer=f.pageContainer||a.mobile.pageContainer,f.fromPage=f.fromPage||a.mobile.activePage;var g=f.pageContainer,i=new a.Event("pagebeforechange"),k={toPage:b,options:f};g.trigger(i,k);if(i.isDefaultPrevented())return;b=k.toPage,m=!0;if(typeof b=="string"){a.mobile.loadPage(b,f).done(function(b,c,d,e){m=!1,c.duplicateCachedPage=e,a.mobile.changePage(d,c)}).fail(function(a,b){m=!1,u(!0),v(),f.pageContainer.trigger("pagechangefailed",k)});return}b[0]===a.mobile.firstPage[0]&&!f.dataUrl&&(f.dataUrl=p.hrefNoHash);var o=f.fromPage,q=f.dataUrl&&h.convertUrlToDataUrl(f.dataUrl)||b.jqmData("url"),r=q,s=h.getFilePath(q),t=j.getActive(),w=j.activeIndex===0,x=0,y=c.title,A=f.role==="dialog"||b.jqmData("role")==="dialog";if(o&&o[0]===b[0]&&!f.allowSamePageTransition){m=!1,g.trigger("pagechange",k),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){},isForward:function(){}});return}B(b,f.role),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){x=-1},isForward:function(){x=1}});try{c.activeElement&&c.activeElement.nodeName.toLowerCase()!=="body"?a(c.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(C){}var D=!1;A&&t&&(t.url.indexOf(n)>-1&&!a.mobile.activePage.is(".ui-dialog")&&(f.changeHash=!1,D=!0),q=(t.url||"")+(D?"":n),j.activeIndex===0&&q===j.initialDst&&(q+=n)),f.changeHash!==!1&&q&&(j.ignoreNextHashChange=!0,h.set(q));var E=t?b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText():y;!!E&&y===c.title&&(y=E),b.jqmData("title")||b.jqmData("title",y),f.transition=f.transition||(x&&!w?t.transition:d)||(A?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition),x||(D&&(j.activeIndex=Math.max(0,j.activeIndex-1)),j.addNew(q,f.transition,y,r,f.role)),c.title=j.getActive().title,a.mobile.activePage=b,f.reverse=f.reverse||x<0,z(b,o,f.transition,f.reverse).done(function(c,d,e,h,i){u(),f.duplicateCachedPage&&f.duplicateCachedPage.remove(),i||a.mobile.focusPage(b),v(),g.trigger("pagechange",k)})},a.mobile.changePage.defaults={transition:d,reverse:!1,changeHash:!0,fromHashChange:!1,role:d,duplicateCachedPage:d,pageContainer:d,showLoadMsg:!0,dataUrl:d,fromPage:d,allowSamePageTransition:!1},a.mobile.navreadyDeferred=a.Deferred(),a.mobile.navreadyDeferred.done(function(){a(c).delegate("form","submit",function(b){var c=a(this);if(!a.mobile.ajaxEnabled||c.is(":jqmData(ajax='false')")||!c.jqmHijackable().length)return;var d=c.attr("method"),e=c.attr("target"),f=c.attr("action");f||(f=D(c),f===q.hrefNoHash&&(f=p.hrefNoSearch)),f=h.makeUrlAbsolute(f,D(c));if(h.isExternal(f)&&!h.isPermittedCrossDomainRequest(p,f)||e)return;a.mobile.changePage(f,{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),reverse:c.jqmData("direction")==="reverse",reloadPage:!0}),b.preventDefault()}),a(c).bind("vclick",function(b){if(b.which>1||!a.mobile.linkBindingEnabled)return;var c=C(b.target);if(!a(c).jqmHijackable().length)return;c&&h.parseUrl(c.getAttribute("href")||"#").hash!=="#"&&(u(!0),i=a(c).closest(".ui-btn").not(".ui-disabled"),i.addClass(a.mobile.activeBtnClass))}),a(c).bind("click",function(c){if(!a.mobile.linkBindingEnabled)return;var e=C(c.target),f=a(e),g;if(!e||c.which>1||!f.jqmHijackable().length)return;g=function(){b.setTimeout(function(){u(!0)},200)};if(f.is(":jqmData(rel='back')"))return a.mobile.back(),!1;var i=D(f),j=h.makeUrlAbsolute(f.attr("href")||"#",i);if(!a.mobile.ajaxEnabled&&!h.isEmbeddedPage(j)){g();return}if(j.search("#")!==-1){j=j.replace(/[^#]*#/,"");if(!j){c.preventDefault();return}h.isPath(j)?j=h.makeUrlAbsolute(j,i):j=h.makeUrlAbsolute("#"+j,p.hrefNoHash)}var k=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),l=k||h.isExternal(j)&&!h.isPermittedCrossDomainRequest(p,j);if(l){g();return}var m=f.jqmData("transition"),n=f.jqmData("direction")==="reverse"||f.jqmData("back"),o=f.attr("data-"+a.mobile.ns+"rel")||d;a.mobile.changePage(j,{transition:m,reverse:n,role:o,link:f}),c.preventDefault()}),a(c).delegate(".ui-page","pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),d=c.attr("href");d&&a.inArray(d,b)===-1&&(b.push(d),a.mobile.loadPage(d,{role:c.attr("data-"+a.mobile.ns+"rel")}))})}),a.mobile._handleHashChange=function(c){var e=h.stripHash(c),f=a.mobile.urlHistory.stack.length===0?"none":d,g=new a.Event("navigate"),i={transition:f,changeHash:!1,fromHashChange:!0};0===j.stack.length&&(j.initialDst=e),a.mobile.pageContainer.trigger(g);if(g.isDefaultPrevented())return;if(!a.mobile.hashListeningEnabled||j.ignoreNextHashChange){j.ignoreNextHashChange=!1;return}if(j.stack.length>1&&e.indexOf(n)>-1&&j.initialDst!==e){if(!a.mobile.activePage.is(".ui-dialog")){j.directHashChange({currentUrl:e,isBack:function(){a.mobile.back()},isForward:function(){b.history.forward()}});return}j.directHashChange({currentUrl:e,either:function(b){var c=a.mobile.urlHistory.getActive();e=c.pageUrl,a.extend(i,{role:c.role,transition:c.transition,reverse:b})}})}e?(e=typeof e=="string"&&!h.isPath(e)?h.makeUrlAbsolute("#"+e,q):e,e===h.makeUrlAbsolute("#"+j.initialDst,q)&&j.stack.length&&j.stack[0].url!==j.initialDst.replace(n,"")&&(e=a.mobile.firstPage),a.mobile.changePage(e,i)):a.mobile.changePage(a.mobile.firstPage,i)},e.bind("hashchange",function(b,c){a.mobile._handleHashChange(h.parseLocation().hash)}),a(c).bind("pageshow",A),a(b).bind("throttledresize",A)})}(a),function(a,b){var e={},f=e,g=a(b),h=a.mobile.path.parseLocation(),i=a.Deferred(),j=a.Deferred();a(c).ready(a.proxy(j,"resolve")),a(c).one("mobileinit",a.proxy(i,"resolve")),a.extend(e,{initialFilePath:function(){return h.pathname+h.search}(),hashChangeTimeout:200,hashChangeEnableTimer:d,initialHref:h.hrefNoHash,state:function(){return{hash:a.mobile.path.parseLocation().hash||"#"+f.initialFilePath,title:c.title,initialHref:f.initialHref}},resetUIKeys:function(b){var c=a.mobile.dialogHashKey,d="&"+a.mobile.subPageUrlKey,e=b.indexOf(c);return e>-1?b=b.slice(0,e)+"#"+b.slice(e):b.indexOf(d)>-1&&(b=b.split(d).join("#"+d)),b},nextHashChangePrevented:function(b){a.mobile.urlHistory.ignoreNextHashChange=b,f.onHashChangeDisabled=b},onHashChange:function(b){if(f.onHashChangeDisabled)return;var d,e,g=a.mobile.path.parseLocation().hash,h=a.mobile.path.isPath(g),i=h?a.mobile.path.getLocation():a.mobile.getDocumentUrl();g=h?g.replace("#",""):g,e=f.state(),d=a.mobile.path.makeUrlAbsolute(g,i),h&&(d=f.resetUIKeys(d)),history.replaceState(e,c.title,d)},onPopState:function(b){var c=b.originalEvent.state,d,e,g;c&&(clearTimeout(f.hashChangeEnableTimer),f.nextHashChangePrevented(!1),a.mobile._handleHashChange(c.hash),f.nextHashChangePrevented(!0),f.hashChangeEnableTimer=setTimeout(function(){f.nextHashChangePrevented(!1)},f.hashChangeTimeout))},init:function(){g.bind("hashchange",f.onHashChange),g.bind("popstate",f.onPopState),location.hash===""&&history.replaceState(f.state(),c.title,a.mobile.path.getLocation())}}),a.when(j,i,a.mobile.navreadyDeferred).done(function(){a.mobile.pushStateEnabled&&a.support.pushState&&e.init()})}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flip="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flow="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.pop="fade"}(a,this),function(a,b,c){a.mobile.transitionHandlers.slide=a.mobile.transitionHandlers.simultaneous,a.mobile.transitionFallbacks.slide="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidedown="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidefade="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slideup="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.turn="fade"}(a,this),function(a,b){a.mobile.page.prototype.options.degradeInputs={color:!1,date:!1,datetime:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:"number",search:"text",tel:!1,time:!1,url:!1,week:!1},a(c).bind("pagecreate create",function(b){var c=a.mobile.closestPageData(a(b.target)),d;if(!c)return;d=c.options,a(b.target).find("input").not(c.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";if(d.degradeInputs[c]){var f=a("<div>").html(b.clone()).html(),g=f.indexOf(" type=")>-1,h=g?/\s+type=["']?\w+['"]?/:/\/?>/,i=' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(g?"":">");b.replaceWith(f.replace(h,i))}})})}(a),function(a,b,d){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,c=this.element,d=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),e=a("<div/>",{role:"dialog","class":"ui-dialog-contain ui-corner-all ui-overlay-shadow"});c.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme),c.wrapInner(e).children().find(":jqmData(role='header')").prepend(d).end().children(":first-child").addClass("ui-corner-top").end().children(":last-child").addClass("ui-corner-bottom"),d.bind("click",function(){b.close()}),c.bind("vclick submit",function(b){var c=a(b.target).closest(b.type==="vclick"?"a":"form"),d;c.length&&!c.jqmData("transition")&&(d=a.mobile.urlHistory.getActive()||{},c.attr("data-"+a.mobile.ns+"transition",d.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(b,c){a(this).find("."+a.mobile.activeBtnClass).not(".ui-slider-bg").removeClass(a.mobile.activeBtnClass)}).bind("pagebeforeshow",function(){b._isCloseable=!0,b.options.overlayTheme&&b.element.page("removeContainerBackground").page("setContainerBackground",b.options.overlayTheme)})},close:function(){var b;this._isCloseable&&(this._isCloseable=!1,a.mobile.hashListeningEnabled?a.mobile.back():(b=a.mobile.urlHistory.getPrev().url,a.mobile.path.isPath(b)||(b=a.mobile.path.makeUrlAbsolute("#"+b)),a.mobile.changePage(b,{changeHash:!1,fromHashChange:!0})))}}),a(c).delegate(a.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){a.mobile.dialog.prototype.enhance(this)})}(a,this),function(a,b){a.mobile.page.prototype.options.backBtnText="Back",a.mobile.page.prototype.options.addBackBtn=!1,a.mobile.page.prototype.options.backBtnTheme=null,a.mobile.page.prototype.options.headerTheme="a",a.mobile.page.prototype.options.footerTheme="a",a.mobile.page.prototype.options.contentTheme=null,a(c).bind("pagecreate",function(b){var c=a(b.target),d=c.data("page").options,e=c.jqmData("role"),f=d.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",c).jqmEnhanceable().each(function(){var b=a(this),g=b.jqmData("role"),h=b.jqmData("theme"),i=h||d.contentTheme||e==="dialog"&&f,j,k,l,m;b.addClass("ui-"+g);if(g==="header"||g==="footer"){var n=h||(g==="header"?d.headerTheme:d.footerTheme)||f;b.addClass("ui-bar-"+n).attr("role",g==="header"?"banner":"contentinfo"),g==="header"&&(j=b.children("a, button"),k=j.hasClass("ui-btn-left"),l=j.hasClass("ui-btn-right"),k=k||j.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,l=l||j.eq(1).addClass("ui-btn-right").length),d.addBackBtn&&g==="header"&&a(".ui-page").length>1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!k&&(m=a("<a href='javascript:void(0);' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+d.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",d.backBtnTheme||n).prependTo(b)),b.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading","aria-level":"1"})}else g==="content"&&(i&&b.addClass("ui-body-"+i),b.attr("role","main"))})})}(a),function(a,b){a.fn.fieldcontain=function(a){return this.addClass("ui-field-contain ui-body ui-br").contents().filter(function(){return this.nodeType===3&&!/\S/.test(this.nodeValue)}).remove()},a(c).bind("pagecreate create",function(b){a(":jqmData(role='fieldcontain')",b.target).jqmEnhanceable().fieldcontain()})}(a),function(a,b){a.fn.grid=function(b){return this.each(function(){var c=a(this),d=a.extend({grid:null},b),e=c.children(),f={solo:1,a:2,b:3,c:4,d:5},g=d.grid,h;if(!g)if(e.length<=5)for(var i in f)f[i]===e.length&&(g=i);else g="a",c.addClass("ui-grid-duo");h=f[g],c.addClass("ui-grid-"+g),e.filter(":nth-child("+h+"n+1)").addClass("ui-block-a"),h>1&&e.filter(":nth-child("+h+"n+2)").addClass("ui-block-b"),h>2&&e.filter(":nth-child("+h+"n+3)").addClass("ui-block-c"),h>3&&e.filter(":nth-child("+h+"n+4)").addClass("ui-block-d"),h>4&&e.filter(":nth-child("+h+"n+5)").addClass("ui-block-e")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(":jqmData(role='nojs')",b.target).addClass("ui-nojs")})}(a),function(a,b){function d(a){var b;while(a){b=typeof a.className=="string"&&a.className+" ";if(b&&b.indexOf("ui-btn ")>-1&&b.indexOf("ui-disabled ")<0)break;a=a.parentNode}return a}a.fn.buttonMarkup=function(d){var f=this,g=function(b,c){j.setAttribute("data-"+a.mobile.ns+b,c),i.jqmData(b,c)};d=d&&a.type(d)==="object"?d:{};for(var h=0;h<f.length;h++){var i=f.eq(h),j=i[0],k=a.extend({},a.fn.buttonMarkup.defaults,{icon:d.icon!==b?d.icon:i.jqmData("icon"),iconpos:d.iconpos!==b?d.iconpos:i.jqmData("iconpos"),theme:d.theme!==b?d.theme:i.jqmData("theme")||a.mobile.getInheritedTheme(i,"c"),inline:d.inline!==b?d.inline:i.jqmData("inline"),shadow:d.shadow!==b?d.shadow:i.jqmData("shadow"),corners:d.corners!==b?d.corners:i.jqmData("corners"),iconshadow:d.iconshadow!==b?d.iconshadow:i.jqmData("iconshadow"),mini:d.mini!==b?d.mini:i.jqmData("mini")},d),l="ui-btn-inner",m="ui-btn-text",n,o,p,q,r,s;a.each(k,g),i.jqmData("rel")==="popup"&&i.attr("href")&&(j.setAttribute("aria-haspopup",!0),j.setAttribute("aria-owns",j.getAttribute("href"))),s=a.data(j.tagName==="INPUT"||j.tagName==="BUTTON"?j.parentNode:j,"buttonElements"),s?(j=s.outer,i=a(j),p=s.inner,q=s.text,a(s.icon).remove(),s.icon=null):(p=c.createElement(k.wrapperEls),q=c.createElement(k.wrapperEls)),r=k.icon?c.createElement("span"):null,e&&!s&&e(),k.theme||(k.theme=a.mobile.getInheritedTheme(i,"c")),n="ui-btn ui-btn-up-"+k.theme,n+=k.shadow?" ui-shadow":"",n+=k.corners?" ui-btn-corner-all":"",k.mini!==b&&(n+=k.mini===!0?" ui-mini":" ui-fullsize"),k.inline!==b&&(n+=k.inline===!0?" ui-btn-inline":" ui-btn-block"),k.icon&&(k.icon="ui-icon-"+k.icon,k.iconpos=k.iconpos||"left",o="ui-icon "+k.icon,k.iconshadow&&(o+=" ui-icon-shadow")),k.iconpos&&(n+=" ui-btn-icon-"+k.iconpos,k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText())),l+=k.corners?" ui-btn-corner-all":"",k.iconpos&&k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText()),s&&i.removeClass(s.bcls||""),i.removeClass("ui-link").addClass(n),p.className=l,q.className=m,s||p.appendChild(q);if(r){r.className=o;if(!s||!s.icon)r.innerHTML="&#160;",p.appendChild(r)}while(j.firstChild&&!s)q.appendChild(j.firstChild);s||j.appendChild(p),s={bcls:n,outer:j,inner:p,text:q,icon:r},a.data(j,"buttonElements",s),a.data(p,"buttonElements",s),a.data(q,"buttonElements",s),r&&a.data(r,"buttonElements",s)}return this},a.fn.buttonMarkup.defaults={corners:!0,shadow:!0,iconshadow:!0,wrapperEls:"span"};var e=function(){var b=a.mobile.buttonMarkup.hoverDelay,f,g;a(c).bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(c){var e,h=a(d(c.target)),i=c.originalEvent&&/^touch/.test(c.originalEvent.type),j=c.type;if(h.length){e=h.attr("data-"+a.mobile.ns+"theme");if(j==="vmousedown")i?f=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e);else if(j==="vmousecancel"||j==="vmouseup")h.removeClass("ui-btn-down-"+e).addClass("ui-btn-up-"+e);else if(j==="vmouseover"||j==="focus")i?g=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e);else if(j==="vmouseout"||j==="blur"||j==="scrollstart")h.removeClass("ui-btn-hover-"+e+" ui-btn-down-"+e).addClass("ui-btn-up-"+e),f&&clearTimeout(f),g&&clearTimeout(g)}},"focusin focus":function(b){a(d(b.target)).addClass(a.mobile.focusClass)},"focusout blur":function(b){a(d(b.target)).removeClass(a.mobile.focusClass)}}),e=null};a(c).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",b.target).jqmEnhanceable().not("button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})}(a),function(a,b){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:!0,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,inset:!0,mini:!1,initSelector:":jqmData(role='collapsible')"},_create:function(){var c=this.element,d=this.options,e=c.addClass("ui-collapsible"),f=c.children(d.heading).first(),g=c.jqmData("collapsed-icon")||d.collapsedIcon,h=c.jqmData("expanded-icon")||d.expandedIcon,i=e.wrapInner("<div class='ui-collapsible-content'></div>").children(".ui-collapsible-content"),j=c.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove()),j.length?(d.theme||(d.theme=j.jqmData("theme")||a.mobile.getInheritedTheme(j,"c")),d.contentTheme||(d.contentTheme=j.jqmData("content-theme")),d.collapsedIcon||(d.collapsedIcon=j.jqmData("collapsed-icon")),d.expandedIcon||(d.expandedIcon=j.jqmData("expanded-icon")),d.iconPos||(d.iconPos=j.jqmData("iconpos")),j.jqmData("inset")!==b?d.inset=j.jqmData("inset"):d.inset=!0,d.mini||(d.mini=j.jqmData("mini"))):d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),!d.inset||e.addClass("ui-collapsible-inset"),i.addClass(d.contentTheme?"ui-body-"+d.contentTheme:""),g=c.jqmData("collapsed-icon")||d.collapsedIcon||"plus",h=c.jqmData("expanded-icon")||d.expandedIcon||"minus",f.insertBefore(i).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:!1,corners:!1,iconpos:c.jqmData("iconpos")||d.iconPos||"left",icon:g,mini:d.mini,theme:d.theme}),!d.inset||f.find("a").first().add(".ui-btn-inner",c).addClass("ui-corner-top ui-corner-bottom"),e.bind("expand collapse",function(b){if(!b.isDefaultPrevented()){var c=a(this),k=b.type==="collapse",l=d.contentTheme;b.preventDefault(),f.toggleClass("ui-collapsible-heading-collapsed",k).find(".ui-collapsible-heading-status").text(k?d.expandCueText:d.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-"+h,!k).toggleClass("ui-icon-"+g,k||h===g).end().find("a").first().removeClass(a.mobile.activeBtnClass),c.toggleClass("ui-collapsible-collapsed",k),i.toggleClass("ui-collapsible-content-collapsed",k).attr("aria-hidden",k),l&&!!d.inset&&(!j.length||e.jqmData("collapsible-last"))&&(f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",k),i.toggleClass("ui-corner-bottom",!k)),i.trigger("updatelayout")}}).trigger(d.collapsed?"collapse":"expand"),f.bind("tap",function(b){f.find("a").first().addClass(a.mobile.activeBtnClass)}).bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";e.trigger(b),a.preventDefault(),a.stopPropagation()})}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsible.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.collapsibleset",a.mobile.widget,{options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var c=this.element.addClass("ui-collapsible-set"),d=this.options;d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),d.contentTheme||(d.contentTheme=c.jqmData("content-theme")),c.jqmData("inset")!==b&&(d.inset=c.jqmData("inset")),d.inset=d.inset!==b?d.inset:!0,c.jqmData("collapsiblebound")||c.jqmData("collapsiblebound",!0).bind("expand collapse",function(b){var c=b.type==="collapse",e=a(b.target).closest(".ui-collapsible"),f=e.data("collapsible");e.jqmData("collapsible-last")&&!!d.inset&&(e.find(".ui-collapsible-heading").first().find("a").first().toggleClass("ui-corner-bottom",c).find(".ui-btn-inner").toggleClass("ui-corner-bottom",c),e.find(".ui-collapsible-content").toggleClass("ui-corner-bottom",!c))}).bind("expand",function(b){var c=a(b.target).closest(".ui-collapsible");c.parent().is(":jqmData(role='collapsible-set')")&&c.siblings(".ui-collapsible").trigger("collapse")})},_init:function(){var a=this.element,b=a.children(":jqmData(role='collapsible')"),c=b.filter(":jqmData(collapsed='false')");this.refresh(),c.trigger("expand")},refresh:function(){var b=this.element,c=this.options,d=b.children(":jqmData(role='collapsible')");a.mobile.collapsible.prototype.enhance(d.not(".ui-collapsible")),!c.inset||(d.each(function(){a(this).jqmRemoveData("collapsible-last").find(".ui-collapsible-heading").find("a").first().removeClass("ui-corner-top ui-corner-bottom").find(".ui-btn-inner").removeClass("ui-corner-top ui-corner-bottom")}),d.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),d.last().jqmData("collapsible-last",!0).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"))}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsibleset.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var c=this.element,d=c.find("a"),e=d.filter(":jqmData(icon)").length?this.options.iconpos:b;c.addClass("ui-navbar ui-mini").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid}),d.buttonMarkup({corners:!1,shadow:!1,inline:!0,iconpos:e}),c.delegate("a","vclick",function(b){a(b.target).hasClass("ui-disabled")||(d.removeClass(a.mobile.activeBtnClass),a(this).addClass(a.mobile.activeBtnClass))}),c.closest(".ui-page").bind("pagebeforeshow",function(){d.filter(".ui-state-persist").addClass(a.mobile.activeBtnClass)})}}),a(c).bind("pagecreate create",function(b){a.mobile.navbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){var d={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:!1,initSelector:":jqmData(role='listview')"},_create:function(){var a=this,b="";b+=a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"",a.element.addClass(function(a,c){return c+" ui-listview "+b}),a.refresh(!0)},_removeCorners:function(a,b){var c="ui-corner-top ui-corner-tr ui-corner-tl",d="ui-corner-bottom ui-corner-br ui-corner-bl";a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb")),b==="top"?a.removeClass(c):b==="bottom"?a.removeClass(d):a.removeClass(c+" "+d)},_refreshCorners:function(a){var b,c,d,e;b=this.element.children("li"),c=a||b.filter(":visible").length===0?b.not(".ui-screen-hidden"):b.filter(":visible"),b.filter(".ui-li-last").removeClass("ui-li-last"),this.options.inset?(this._removeCorners(b),d=c.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),e=c.last().addClass("ui-corner-bottom ui-li-last"),e.add(e.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl")):c.last().addClass("ui-li-last"),a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,b,c,d){var e={};e[c]=e[d]=!0;while(a){if(e[a.nodeName])return a;a=a[b]}return null},_getChildrenByTagName:function(b,c,d){var e=[],f={};f[c]=f[d]=!0,b=b.firstChild;while(b)f[b.nodeName]&&e.push(b),b=b.nextSibling;return a(e)},_addThumbClasses:function(b){var c,d,e=b.length;for(c=0;c<e;c++)d=a(this._findFirstElementByTagName(b[c].firstChild,"nextSibling","img","IMG")),d.length&&(d.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(d[0].parentNode,"parentNode","li","LI")).addClass(d.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page"),this._createSubPages();var d=this.options,e=this.element,f=this,g=e.jqmData("dividertheme")||d.dividerTheme,h=e.jqmData("splittheme"),i=e.jqmData("spliticon"),j=this._getChildrenByTagName(e[0],"li","LI"),k=!!a.nodeName(e[0],"ol"),l=!a.support.cssPseudoElement,m=e.attr("start"),n={},o,p,q,r,s,t,u,v,w,x,y,z,A,B;k&&l&&e.find(".ui-li-dec").remove(),k&&(m||m===0?l?u=parseFloat(m):(v=parseFloat(m)-1,e.css("counter-reset","listnumbering "+v)):l&&(u=1)),d.theme||(d.theme=a.mobile.getInheritedTheme(this.element,"c"));for(var C=0,D=j.length;C<D;C++){o=j.eq(C),p="ui-li";if(b||!o.hasClass("ui-li")){q=o.jqmData("theme")||d.theme,r=this._getChildrenByTagName(o[0],"a","A");var E=o.jqmData("role")==="list-divider";r.length&&!E?(y=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:!1,corners:!1,iconpos:"right",icon:r.length>1||y===!1?!1:y||"arrow-r",theme:q}),y!==!1&&r.length===1&&o.addClass("ui-li-has-arrow"),r.first().removeClass("ui-link").addClass("ui-link-inherit"),r.length>1&&(p+=" ui-li-has-alt",s=r.last(),t=h||s.jqmData("theme")||d.splitTheme,B=s.jqmData("icon"),s.appendTo(o).attr("title",s.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:!1,corners:!1,theme:q,icon:!1,iconpos:"notext"}).find(".ui-btn-inner").append(a(c.createElement("span")).buttonMarkup({shadow:!0,corners:!0,theme:t,iconpos:"notext",icon:B||y||i||d.splitIcon})))):E?(p+=" ui-li-divider ui-bar-"+g,o.attr("role","heading"),k&&(m||m===0?l?u=parseFloat(m):(w=parseFloat(m)-1,o.css("counter-reset","listnumbering "+w)):l&&(u=1))):p+=" ui-li-static ui-btn-up-"+q}k&&l&&p.indexOf("ui-li-divider")<0&&(x=p.indexOf("ui-li-static")>0?o:o.find(".ui-link-inherit"),x.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+u++ +". </span>")),n[p]||(n[p]=[]),n[p].push(o[0])}for(p in n)a(n[p]).addClass(p).children(".ui-btn-inner").addClass(p);e.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(e.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all"),this._addThumbClasses(j),this._addThumbClasses(e.find(".ui-link-inherit")),this._refreshCorners(b),this._trigger("afterrefresh")},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,c=b.closest(".ui-page"),e=c.jqmData("url"),f=e||c[0][a.expando],g=b.attr("id"),h=this.options,i="data-"+a.mobile.ns,j=this,k=c.find(":jqmData(role='footer')").jqmData("id"),l;typeof d[f]=="undefined"&&(d[f]=-1),g=g||++d[f],a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=this,f=a(this),j=f.attr("id")||g+"-"+c,m=f.parent(),n=a(f.prevAll().toArray().reverse()),p=n.length?n:a("<span>"+a.trim(m.contents()[0].nodeValue)+"</span>"),q=p.first().getEncodedText(),r=(e||"")+"&"+a.mobile.subPageUrlKey+"="+j,s=f.jqmData("theme")||h.theme,t=f.jqmData("counttheme")||b.jqmData("counttheme")||h.countTheme,u,v;l=!0,u=f.detach().wrap("<div "+i+"role='page' "+i+"url='"+r+"' "+i+"theme='"+s+"' "+i+"count-theme='"+t+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+h.headerTheme+"'><div class='ui-title'>"+q+"</div></div>").after(k?a("<div "+i+"role='footer' "+i+"id='"+k+"'>"):"").parent().appendTo(a.mobile.pageContainer),u.page(),v=m.find("a:first"),v.length||(v=a("<a/>").html(p||q).prependTo(m.empty())),v.attr("href","#"+r)}).listview();if(l&&c.is(":jqmData(external-page='true')")&&c.data("page").options.domCache===!1){var m=function(b,d){var f=d.nextPage,g,h=new a.Event("pageremove");d.nextPage&&(g=f.jqmData("url"),g.indexOf(e+"&"+a.mobile.subPageUrlKey)!==0&&(j.childPages().remove(),c.trigger(h),h.isDefaultPrevented()||c.removeWithDependents()))};c.unbind("pagehide.remove").bind("pagehide.remove",m)}},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}}),a(c).bind("pagecreate create",function(b){a.mobile.listview.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.mobile.listview.prototype.options.autodividers=!1,a.mobile.listview.prototype.options.autodividersSelector=function(a){var b=a.text()||null;return b?(b=b.slice(0,1).toUpperCase(),b):null},a(c).delegate("ul,ol","listviewcreate",function(){var b=a(this),d=b.data("listview");if(!d||!d.options.autodividers)return;var e=function(){b.find("li:jqmData(role='list-divider')").remove();var e=b.find("li"),f=null,g,h;for(var i=0;i<e.length;i++){g=e[i],h=d.options.autodividersSelector(a(g));if(h&&f!==h){var j=c.createElement("li");j.appendChild(c.createTextNode(h)),j.setAttribute("data-"+a.mobile.ns+"role","list-divider"),g.parentNode.insertBefore(j,g)}f=h}},f=function(){b.unbind("listviewafterrefresh",f),e(),d.refresh(),b.bind("listviewafterrefresh",f)};f()})}(a),function(a,b){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var d=this,e=this.element,f=function(a,b){return a.jqmData(b)||a.closest("form, fieldset").jqmData(b)},g=a(e).closest("label"),h=g.length?g:a(e).closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("label").filter("[for='"+e[0].id+"']").first(),i=e[0].type,j=f(e,"mini"),k=i+"-on",l=i+"-off",m=e.parents(":jqmData(type='horizontal')").length?b:l,n=f(e,"iconpos"),o=m?"":" "+a.mobile.activeBtnClass,p="ui-"+k+o,q="ui-"+l,r="ui-icon-"+k,s="ui-icon-"+l;if(i!=="checkbox"&&i!=="radio")return;a.extend(this,{label:h,inputtype:i,checkedClass:p,uncheckedClass:q,checkedicon:r,uncheckedicon:s}),this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),h.buttonMarkup({theme:this.options.theme,icon:m,shadow:!1,mini:j,iconpos:n});var t=c.createElement("div");t.className="ui-"+i,e.add(h).wrapAll(t),h.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(e.is(":disabled")){a.preventDefault();return}return d._cacheVals(),e.prop("checked",i==="radio"&&!0||!e.prop("checked")),e.triggerHandler("click"),d._getInputSet().not(e).prop("checked",!1),d._updateAll(),!1}}),e.bind({vmousedown:function(){d._cacheVals()},vclick:function(){var b=a(this);b.is(":checked")?(b.prop("checked",!0),d._getInputSet().not(b).prop("checked",!1)):b.prop("checked",!1),d._updateAll()},focus:function(){h.addClass(a.mobile.focusClass)},blur:function(){h.removeClass(a.mobile.focusClass)}}),this.refresh()},_cacheVals:function(){this._getInputSet().each(function(){a(this).jqmData("cacheVal",this.checked)})},_getInputSet:function(){return this.inputtype==="checkbox"?this.element:this.element.closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var c=a(this);(this.checked||b.inputtype==="checkbox")&&c.trigger("change")}).checkboxradio("refresh")},refresh:function(){var a=this.element[0],b=this.label,c=b.find(".ui-icon");a.checked?(b.addClass(this.checkedClass).removeClass(this.uncheckedClass),c.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(b.removeClass(this.checkedClass).addClass(this.uncheckedClass),c.removeClass(this.checkedicon).addClass(this.uncheckedicon)),a.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",!0).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",!1).parent().removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,corners:!0,shadow:!0,iconshadow:!0,initSelector:"button, [type='button'], [type='submit'], [type='reset']"},_create:function(){var d=this.element,e,f=this.options,g,h,i=f.inline||d.jqmData("inline"),j=f.mini||d.jqmData("mini"),k="",l;if(d[0].tagName==="A"){d.hasClass("ui-btn")||d.buttonMarkup();return}this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),!~d[0].className.indexOf("ui-btn-left")||(k="ui-btn-left"),!~d[0].className.indexOf("ui-btn-right")||(k="ui-btn-right");if(d.attr("type")==="submit"||d.attr("type")==="reset")k?k+=" ui-submit":k="ui-submit";a("label[for='"+d.attr("id")+"']").addClass("ui-submit"),this.button=a("<div></div>")[d.html()?"html":"text"](d.html()||d.val()).insertBefore(d).buttonMarkup({theme:f.theme,icon:f.icon,iconpos:f.iconpos,inline:i,corners:f.corners,shadow:f.shadow,iconshadow:f.iconshadow,mini:j}).addClass(k).append(d.addClass("ui-btn-hidden")),e=this.button,g=d.attr("type"),h=d.attr("name"),g!=="button"&&g!=="reset"&&h&&d.bind("vclick",function(){l===b&&(l=a("<input>",{type:"hidden",name:d.attr("name"),value:d.attr("value")}).insertBefore(d),a(c).one("submit",function(){l.remove(),l=b}))}),d.bind({focus:function(){e.addClass(a.mobile.focusClass)},blur:function(){e.removeClass(a.mobile.focusClass)}}),this.refresh()},enable:function(){return this.element.attr("disabled",!1),this.button.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.button.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)},refresh:function(){var b=this.element;b.prop("disabled")?this.disable():this.enable(),a(this.button.data("buttonElements").text)[b.html()?"html":"text"](b.html()||b.val())}}),a(c).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.fn.controlgroup=function(b){function c(a,b){a.removeClass("ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow").eq(0).addClass(b[0]).end().last().addClass(b[1]).addClass("ui-controlgroup-last")}return this.each(function(){var d=a(this),e=a.extend({direction:d.jqmData("type")||"vertical",shadow:!1,excludeInvisible:!0,mini:d.jqmData("mini")},b),f=d.children("legend"),g=d.children(".ui-controlgroup-label"),h=d.children(".ui-controlgroup-controls"),i=e.direction==="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"],j=d.find("input").first().attr("type");h.length&&h.contents().unwrap(),d.wrapInner("<div class='ui-controlgroup-controls'></div>"),f.length?(a("<div role='heading' class='ui-controlgroup-label'>"+f.html()+"</div>").insertBefore(d.children(0)),f.remove()):g.length&&d.prepend(g),d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+e.direction),c(d.find(".ui-btn"+(e.excludeInvisible?":visible":"")).not(".ui-slider-handle"),i),c(d.find(".ui-btn-inner"),i),e.shadow&&d.addClass("ui-shadow"),e.mini&&d.addClass("ui-mini")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(b.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})}(a),function(a,d){function e(a,b,c,d){var e=d;return a<b?e=c+(a-b)/2:e=Math.min(Math.max(c,d-b/2),c+a-b),e}function f(){var c=a(b);return{x:c.scrollLeft(),y:c.scrollTop(),cx:b.innerWidth||c.width(),cy:b.innerHeight||c.height()}}a.widget("mobile.popup",a.mobile.widget,{options:{theme:null,overlayTheme:null,shadow:!0,corners:!0,transition:"none",positionTo:"origin",tolerance:null,initSelector:":jqmData(role='popup')",closeLinkSelector:"a:jqmData(rel='back')",closeLinkEvents:"click.popup",navigateEvents:"navigate.popup",closeEvents:"navigate.popup pagebeforechange.popup",history:!a.mobile.browser.ie},_eatEventAndClose:function(a){return a.preventDefault(),a.stopImmediatePropagation(),this.close(),!1},_resizeScreen:function(){var a=this._ui.container.outerHeight(!0);this._ui.screen.removeAttr("style"),a>this._ui.screen.height()&&this._ui.screen.height(a)},_handleWindowKeyUp:function(b){if(this._isOpen&&b.keyCode===a.mobile.keyCode.ESCAPE)return this._eatEventAndClose(b)},_maybeRefreshTimeout:function(){var b=f();if(this._resizeData){if(b.x===this._resizeData.winCoords.x&&b.y===this._resizeData.winCoords.y&&b.cx===this._resizeData.winCoords.cx&&b.cy===this._resizeData.winCoords.cy)return!1;clearTimeout(this._resizeData.timeoutId)}return this._resizeData={timeoutId:setTimeout(a.proxy(this,"_resizeTimeout"),200),winCoords:b},!0},_resizeTimeout:function(){this._maybeRefreshTimeout()||(this._trigger("beforeposition"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(this._placementCoords(this._desiredCoords(d,d,"window"))),this._resizeScreen(),this._resizeData=null,this._orientationchangeInProgress=!1)},_handleWindowResize:function(a){this._isOpen&&this._maybeRefreshTimeout()},_handleWindowOrientationchange:function(a){this._orientationchangeInProgress||(this._ui.container.addClass("ui-selectmenu-hidden").removeAttr("style"),this._orientationchangeInProgress=!0)},_create:function(){var c={screen:a("<div class='ui-screen-hidden ui-popup-screen'></div>"),placeholder:a("<div style='display: none;'><!-- placeholder --></div>"),container:a("<div class='ui-popup-container ui-selectmenu-hidden'></div>")},e=this.element.closest(".ui-page"),f=this.element.attr("id"),g=this;this.options.history=this.options.history&&a.mobile.ajaxEnabled&&a.mobile.hashListeningEnabled,e.length===0&&(e=a("body")),this.options.container=this.options.container||a.mobile.pageContainer,e.append(c.screen),c.container.insertAfter(c.screen),c.placeholder.insertAfter(this.element),f&&(c.screen.attr("id",f+"-screen"),c.container.attr("id",f+"-popup"),c.placeholder.html("<!-- placeholder for "+f+" -->")),c.container.append(this.element),this.element.addClass("ui-popup"),a.extend(this,{_page:e,_ui:c,_fallbackTransition:"",_currentTransition:!1,_prereqs:null,_isOpen:!1,_tolerance:null,_resizeData:null,_orientationchangeInProgress:!1,_globalHandlers:[{src:a(b),handler:{orientationchange:a.proxy(this,"_handleWindowOrientationchange"),resize:a.proxy(this,"_handleWindowResize"),keyup:a.proxy(this,"_handleWindowKeyUp")}}]}),a.each(this.options,function(a,b){g.options[a]=d,g._setOption(a,b,!0)}),c.screen.bind("vclick",a.proxy(this,"_eatEventAndClose")),a.each(this._globalHandlers,function(a,b){b.src.bind(b.handler)})},_applyTheme:function(a,b,c){var d=(a.attr("class")||"").split(" "),e=!0,f=null,g,h=String(b);while(d.length>0){f=d.pop(),g=(new RegExp("^ui-"+c+"-([a-z])$")).exec(f);if(g&&g.length>1){f=g[1];break}f=null}b!==f&&(a.removeClass("ui-"+c+"-"+f),b!==null&&b!=="none"&&a.addClass("ui-"+c+"-"+h))},_setTheme:function(a){this._applyTheme(this.element,a,"body")},_setOverlayTheme:function(a){this._applyTheme(this._ui.screen,a,"overlay"),this._isOpen&&this._ui.screen.addClass("in")},_setShadow:function(a){this.element.toggleClass("ui-overlay-shadow",a)},_setCorners:function(a){this.element.toggleClass("ui-corner-all",a)},_applyTransition:function(b){this._ui.container.removeClass(this._fallbackTransition),b&&b!=="none"&&(this._fallbackTransition=a.mobile._maybeDegradeTransition(b),this._ui.container.addClass(this._fallbackTransition))},_setTransition:function(a){this._currentTransition||this._applyTransition(a)},_setTolerance:function(b){var c={t:30,r:15,b:30,l:15};if(b){var d=String(b).split(",");a.each(d,function(a,b){d[a]=parseInt(b,10)});switch(d.length){case 1:isNaN(d[0])||(c.t=c.r=c.b=c.l=d[0]);break;case 2:isNaN(d[0])||(c.t=c.b=d[0]),isNaN(d[1])||(c.l=c.r=d[1]);break;case 4:isNaN(d[0])||(c.t=d[0]),isNaN(d[1])||(c.r=d[1]),isNaN(d[2])||(c.b=d[2]),isNaN(d[3])||(c.l=d[3]);break;default:}}this._tolerance=c},_setOption:function(b,c){var e,f="_set"+b.charAt(0).toUpperCase()+b.slice(1);this[f]!==d&&this[f](c),e=["initSelector","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","history","container"],a.mobile.widget.prototype._setOption.apply(this,arguments),a.inArray(b,e)===-1&&this.element.attr("data-"+(a.mobile.ns||"")+b.replace(/([A-Z])/,"-$1").toLowerCase(),c)},_placementCoords:function(a){var b=f(),d={x:this._tolerance.l,y:b.y+this._tolerance.t,cx:b.cx-this._tolerance.l-this._tolerance.r,cy:b.cy-this._tolerance.t-this._tolerance.b},g,h;this._ui.container.css("max-width",d.cx),g={cx:this._ui.container.outerWidth(!0),cy:this._ui.container.outerHeight(!0)},h={x:e(d.cx,g.cx,d.x,a.x),y:e(d.cy,g.cy,d.y,a.y)},h.y=Math.max(0,h.y);var i=c.documentElement,j=c.body,k=Math.max(i.clientHeight,j.scrollHeight,j.offsetHeight,i.scrollHeight,i.offsetHeight);return h.y-=Math.min(h.y,Math.max(0,h.y+g.cy-k)),{left:h.x,top:h.y}},_createPrereqs:function(b,c,d){var e=this,f;f={screen:a.Deferred(),container:a.Deferred()},f.screen.then(function(){f===e._prereqs&&b()}),f.container.then(function(){f===e._prereqs&&c()}),a.when(f.screen,f.container).done(function(){f===e._prereqs&&(e._prereqs=null,d())}),e._prereqs=f},_animate:function(b){this._ui.screen.removeClass(b.classToRemove).addClass(b.screenClassToAdd),b.prereqs.screen.resolve(),b.transition&&b.transition!=="none"?(b.applyTransition&&this._applyTransition(b.transition),this._ui.container.animationComplete(a.proxy(b.prereqs.container,"resolve")).addClass(b.containerClassToAdd).removeClass(b.classToRemove)):b.prereqs.container.resolve()},_desiredCoords:function(b,c,d){var e=null,g,h=f();if(d&&d!=="origin")if(d==="window")b=h.cx/2+h.x,c=h.cy/2+h.y;else{try{e=a(d)}catch(i){e=null}e&&(e.filter(":visible"),e.length===0&&(e=null))}e&&(g=e.offset(),b=g.left+e.outerWidth()/2,c=g.top+e.outerHeight()/2);if(a.type(b)!=="number"||isNaN(b))b=h.cx/2+h.x;if(a.type(c)!=="number"||isNaN(c))c=h.cy/2+h.y;return{x:b,y:c}},_openPrereqsComplete:function(){var a=this;a._ui.container.addClass("ui-popup-active"),a._isOpen=!0,a._resizeScreen(),setTimeout(function(){a._ui.container.attr("tabindex","0").focus(),a._trigger("afteropen")})},_open:function(c){var d,e,f=function(){var a=b,c=navigator.userAgent,d=c.match(/AppleWebKit\/([0-9\.]+)/),e=!!d&&d[1],f=c.match(/Android (\d+(?:\.\d+))/),g=!!f&&f[1],h=c.indexOf("Chrome")>-1;return f!==null&&g==="4.0"&&e&&e>534.13&&!h?!0:!1}();c=c||{},e=c.transition||this.options.transition,this._trigger("beforeposition"),d=this._placementCoords(this._desiredCoords(c.x,c.y,c.positionTo||this.options.positionTo||"origin")),this._createPrereqs(a.noop,a.noop,a.proxy(this,"_openPrereqsComplete")),e?(this._currentTransition=e,this._applyTransition(e)):e=this.options.transition,this.options.theme||this._setTheme(this._page.jqmData("theme")||a.mobile.getInheritedTheme(this._page,"c")),this._ui.screen.removeClass("ui-screen-hidden"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(d),this.options.overlayTheme&&f&&this.element.closest(".ui-page").addClass("ui-popup-open"),this._animate({additionalCondition:!0,transition:e,classToRemove:"",screenClassToAdd:"in",containerClassToAdd:"in",applyTransition:!1,prereqs:this._prereqs})},_closePrereqScreen:function(){this._ui.screen.removeClass("out").addClass("ui-screen-hidden")},_closePrereqContainer:function(){this._ui.container.removeClass("reverse out").addClass("ui-selectmenu-hidden").removeAttr("style")},_closePrereqsDone:function(){var b=this,c=b.options;b._ui.container.removeAttr("tabindex"),c.container.unbind(c.closeEvents),b.element.undelegate(c.closeLinkSelector,c.closeLinkEvents),a.mobile.popup.active=d,b._trigger("afterclose")},_close:function(){this._ui.container.removeClass("ui-popup-active"),this._page.removeClass("ui-popup-open"),this._isOpen=!1,this._createPrereqs(a.proxy(this,"_closePrereqScreen"),a.proxy(this,"_closePrereqContainer"),a.proxy(this,"_closePrereqsDone")),this._animate({additionalCondition:this._ui.screen.hasClass("in"),transition:this._currentTransition||this.options.transition,classToRemove:"in",screenClassToAdd:"out",containerClassToAdd:"reverse out",applyTransition:!0,prereqs:this._prereqs})},_destroy:function(){var b=this;b._close(),b._setTheme("none"),b.element.insertAfter(b._ui.placeholder).removeClass("ui-popup ui-overlay-shadow ui-corner-all"),b._ui.screen.remove(),b._ui.container.remove(),b._ui.placeholder.remove(),a.each(b._globalHandlers,function(b,c){a.each(c.handler,function(a,b){c.src.unbind(a,b)})})},_bindContainerClose:function(){var b=this;b.options.container.one(b.options.closeEvents,a.proxy(b._close,b))},open:function(b){var c=this,e=this.options,f,g,h,i,j,k;if(a.mobile.popup.active)return;a.mobile.popup.active=this;if(!e.history){c._open(b),c._bindContainerClose(),c.element.delegate(e.closeLinkSelector,e.closeLinkEvents,function(a){return c._close(),!1});return}g=a.mobile.dialogHashKey,h=a.mobile.activePage,i=h.is(".ui-dialog"),f=a.mobile.urlHistory.getActive().url,j=f.indexOf(g)>-1&&!i,k=a.mobile.urlHistory;if(j){c._open(b),c._bindContainerClose();return}f.indexOf(g)===-1&&!i?f=f+g:f=a.mobile.path.parseLocation().hash+g,k.activeIndex===0&&f===k.initialDst&&(f+=g),e.container.one(e.navigateEvents,function(a){a.preventDefault(),c._open(b),c._bindContainerClose()}),k.ignoreNextHashChange=i,k.addNew(f,d,d,d,"dialog"),a.mobile.path.set(f)},close:function(){if(!a.mobile.popup.active)return;this.options.history?a.mobile.back():this._close()}}),a.mobile.popup.handleLink=function(b){var c=b.closest(":jqmData(role='page')"),d=c.length===0?a("body"):c,e=a(a.mobile.path.parseUrl(b.attr("href")).hash,d[0]),f;e.data("popup")&&(f=b.offset(),e.popup("open",{x:f.left+b.outerWidth()/2,y:f.top+b.outerHeight()/2,transition:b.jqmData("transition"),positionTo:b.jqmData("position-to"),link:b})),setTimeout(function(){b.removeClass(a.mobile.activeBtnClass)},300)},a(c).bind("pagebeforechange",function(b,c){c.options.role==="popup"&&(a.mobile.popup.handleLink(c.options.link),b.preventDefault())}),a(c).bind("pagecreate create",function(b){a.mobile.popup.prototype.enhanceWithin(b.target,!0)})}(a),function(a){var b=a("meta[name=viewport]"),c=b.attr("content"),d=c+",maximum-scale=1, user-scalable=no",e=c+",maximum-scale=10, user-scalable=yes",f=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(c);a.mobile.zoom=a.extend({},{enabled:!f,locked:!1,disable:function(c){!f&&!a.mobile.zoom.locked&&(b.attr("content",d),a.mobile.zoom.enabled=!1,a.mobile.zoom.locked=c||!1)},enable:function(c){!f&&(!a.mobile.zoom.locked||c===!0)&&(b.attr("content",e),a.mobile.zoom.enabled=!0,a.mobile.zoom.locked=!1)},restore:function(){f||(b.attr("content",c),a.mobile.zoom.enabled=!0)}})}(a),function(a,d){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",clearSearchButtonText:"clear text",disabled:!1},_create:function(){function m(){setTimeout(function(){l.toggleClass("ui-input-clear-hidden",!e.val())},0)}var d=this,e=this.element,f=this.options,g=f.theme||a.mobile.getInheritedTheme(this.element,"c"),h=" ui-body-"+g,i=e.jqmData("mini")===!0,j=i?" ui-mini":"",k,l;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text"),k=e.addClass("ui-input-text ui-body-"+g),typeof e[0].autocorrect!="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off")),e.is("[type='search'],:jqmData(type='search')")?(k=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+h+j+"'></div>").parent(),l=a("<a href='#' class='ui-input-clear' title='"+f.clearSearchButtonText+"'>"+f.clearSearchButtonText+"</a>").bind("click",function(a){e.val("").focus().trigger("change"),l.addClass("ui-input-clear-hidden"),a.preventDefault()}).appendTo(k).buttonMarkup({icon:"delete",iconpos:"notext",corners:!0,shadow:!0,mini:i}),m(),e.bind("paste cut keyup focus change blur",m)):e.addClass("ui-corner-all ui-shadow-inset"+h+j),e.focus(function(){k.addClass(a.mobile.focusClass)}).blur(function(){k.removeClass(a.mobile.focusClass)}).bind("focus",function(){f.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("blur",function(){f.preventFocusZoom&&a.mobile.zoom.enable(!0)});if(e.is("textarea")){var n=15,o=100,p;this._keyup=function(){var a=e[0].scrollHeight,b=e[0].clientHeight;b<a&&e.height(a+n)},e.keyup(function(){clearTimeout(p),p=setTimeout(d._keyup,o)}),this._on(a(c),{pagechange:"_keyup"}),a.trim(e.val())&&this._on(a(b),{load:"_keyup"})}e.attr("disabled")&&this.disable()},disable:function(){var a;return this.element.attr("disabled",!0).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.addClass("ui-disabled"),this._setOption("disabled",!0)},enable:function(){var a;return this.element.attr("disabled",!1).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.removeClass("ui-disabled"),this._setOption("disabled",!1)}}),a(c).bind("pagecreate create",function(b){a.mobile.textinput.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.mobile.listview.prototype.options.filter=!1,a.mobile.listview.prototype.options.filterPlaceholder="Filter items...",a.mobile.listview.prototype.options.filterTheme="c";var d=function(a,b,c){return a.toString().toLowerCase().indexOf(b)===-1};a.mobile.listview.prototype.options.filterCallback=d,a(c).delegate(":jqmData(role='listview')","listviewcreate",function(){var b=a(this),c=b.data("listview");if(!c.options.filter)return;var e=a("<form>",{"class":"ui-listview-filter ui-bar-"+c.options.filterTheme,role:"search"}),f=a("<input>",{placeholder:c.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var e=a(this),f=this.value.toLowerCase(),g=null,h=e.jqmData("lastval")+"",i=!1,j="",k,l=c.options.filterCallback!==d;c._trigger("beforefilter","beforefilter",{input:this}),e.jqmData("lastval",f),l||f.length<h.length||f.indexOf(h)!==0?g=b.children():g=b.children(":not(.ui-screen-hidden)");if(f){for(var m=g.length-1;m>=0;m--)k=a(g[m]),j=k.jqmData("filtertext")||k.text(),k.is("li:jqmData(role=list-divider)")?(k.toggleClass("ui-filter-hidequeue",!i),i=!1):c.options.filterCallback(j,f,k)?k.toggleClass("ui-filter-hidequeue",!0):i=!0;g.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",!1),g.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",!0).toggleClass("ui-filter-hidequeue",!1)}else g.toggleClass("ui-screen-hidden",!1);c._refreshCorners()}).appendTo(e).textinput();c.options.inset&&e.addClass("ui-listview-filter-inset"),e.bind("submit",function(){return!1}).insertBefore(b)})}(a),function(a,d){a.widget("mobile.slider",a.mobile.widget,{widgetEventPrefix:"slide",options:{theme:null,trackTheme:null,disabled:!1,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:!1},_create:function(){var e=this,f=this.element,g=a.mobile.getInheritedTheme(f,"c"),h=this.options.theme||g,i=this.options.trackTheme||g,j=f[0].nodeName.toLowerCase(),k=j==="select"?"ui-slider-switch":"",l=f.attr("id"),m=a("[for='"+l+"']"),n=m.attr("id")||l+"-label",o=m.attr("id",n),p=function(){return j==="input"?parseFloat(f.val()):f[0].selectedIndex},q=j==="input"?parseFloat(f.attr("min")):0,r=j==="input"?parseFloat(f.attr("max")):f.find("option").length-1,s=b.parseFloat(f.attr("step")||1),t=this.options.inline||f.jqmData("inline")===!0?" ui-slider-inline":"",u=this.options.mini||f.jqmData("mini")?" ui-slider-mini":"",v=c.createElement("a"),w=a(v),x=c.createElement("div"),y=a(x),z=f.jqmData("highlight")&&j!=="select"?function(){var b=c.createElement("div");return b.className="ui-slider-bg "+a.mobile.activeBtnClass+" ui-btn-corner-all",a(b).prependTo(y)}():!1,A;this._type=j,v.setAttribute("href","#"),x.setAttribute("role","application"),x.className=["ui-slider ",k," ui-btn-down-",i," ui-btn-corner-all",t,u].join(""),v.className="ui-slider-handle",x.appendChild(v),w.buttonMarkup({corners:!0,theme:h,shadow:!0}).attr({role:"slider","aria-valuemin":q,"aria-valuemax":r,"aria-valuenow":p(),"aria-valuetext":p(),title:p(),"aria-labelledby":n}),a.extend(this,{slider:y,handle:w,valuebg:z,dragging:!1,beforeStart:null,userModified:!1,mouseMoved:!1});if(j==="select"){var B=c.createElement("div");B.className="ui-slider-inneroffset";for(var C=0,D=x.childNodes.length;C<D;C++)B.appendChild(x.childNodes[C]);x.appendChild(B),w.addClass("ui-slider-handle-snapping"),A=f.find("option");for(var E=0,F=A.length;E<F;E++){var G=E?"a":"b",H=E?" "+a.mobile.activeBtnClass:" ui-btn-down-"+i,I=c.createElement("div"),J=c.createElement("span");J.className=["ui-slider-label ui-slider-label-",G,H," ui-btn-corner-all"].join(""),J.setAttribute("role","img"),J.appendChild(c.createTextNode(A[E].innerHTML)),a(J).prependTo(y)}e._labels=a(".ui-slider-label",y)}o.addClass("ui-slider"),f.addClass(j==="input"?"ui-slider-input":"ui-slider-switch").change(function(){e.mouseMoved||e.refresh(p(),!0)}).keyup(function(){e.refresh(p(),!0,!0)}).blur(function(){e.refresh(p(),!0)}),this._preventDocumentDrag=function(a){if(e.dragging&&!e.options.disabled)return e.mouseMoved=!0,j==="select"&&w.removeClass("ui-slider-handle-snapping"),e.refresh(a),e.userModified=e.beforeStart!==f[0].selectedIndex,!1},this._on(a(c),{vmousemove:this._preventDocumentDrag}),f.bind("vmouseup",a.proxy(e._checkedRefresh,e)),y.bind("vmousedown",function(a){return e.options.disabled?!1:(e.dragging=!0,e.userModified=!1,e.mouseMoved=!1,j==="select"&&(e.beforeStart=f[0].selectedIndex),e.refresh(a),e._trigger("start"),!1)}).bind("vclick",!1),this._sliderMouseUp=function(){if(e.dragging)return e.dragging=!1,j==="select"&&(w.addClass("ui-slider-handle-snapping"),e.mouseMoved?e.userModified?e.refresh(e.beforeStart===0?1:0):e.refresh(e.beforeStart):e.refresh(e.beforeStart===0?1:0)),e.mouseMoved=!1,e._trigger("stop"),!1},this._on(y.add(c),{vmouseup:this._sliderMouseUp}),y.insertAfter(f),j==="select"&&this.handle.bind({focus:function(){y.addClass(a.mobile.focusClass)},blur:function(){y.removeClass(a.mobile.focusClass)}}),this.handle.bind({vmousedown:function(){a(this).focus()},vclick:!1,keydown:function(b){var c=p();if(e.options.disabled)return;switch(b.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.preventDefault(),e._keySliding||(e._keySliding=!0,a(this).addClass("ui-state-active"))}switch(b.keyCode){case a.mobile.keyCode.HOME:e.refresh(q);break;case a.mobile.keyCode.END:e.refresh(r);break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:e.refresh(c+s);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:e.refresh(c-s)}},keyup:function(b){e._keySliding&&(e._keySliding=!1,a(this).removeClass("ui-state-active"))}}),this.refresh(d,d,!0)},_checkedRefresh:function(){this.value!=this._value()&&this.refresh(this._value())},_value:function(){return this._type==="input"?parseFloat(this.element.val()):this.element[0].selectedIndex},refresh:function(b,c,d){(this.options.disabled||this.element.attr("disabled"))&&this.disable(),this.value=this._value();var e=this.element,f,g=e[0].nodeName.toLowerCase(),h=g==="input"?parseFloat(e.attr("min")):0,i=g==="input"?parseFloat(e.attr("max")):e.find("option").length-1,j=g==="input"&&parseFloat(e.attr("step"))>0?parseFloat(e.attr("step")):1;if(typeof b=="object"){var k=b,l=8;if(!this.dragging||k.pageX<this.slider.offset().left-l||k.pageX>this.slider.offset().left+this.slider.width()+l)return;f=Math.round((k.pageX-this.slider.offset().left)/this.slider.width()*100)}else b==null&&(b=g==="input"?parseFloat(e.val()||0):e[0].selectedIndex),f=(parseFloat(b)-h)/(i-h)*100;if(isNaN(f))return;f<0&&(f=0),f>100&&(f=100);var m=f/100*(i-h)+h,n=(m-h)%j,o=m-n;Math.abs(n)*2>=j&&(o+=n>0?j:-j),m=parseFloat(o.toFixed(5)),m<h&&(m=h),m>i&&(m=i),this.handle.css("left",f+"%"),this.handle.attr({"aria-valuenow":g==="input"?m:e.find("option").eq(m).attr("value"),"aria-valuetext":g==="input"?m:e.find("option").eq(m).getEncodedText(),title:g==="input"?m:e.find("option").eq(m).getEncodedText()}),this.valuebg&&this.valuebg.css("width",f+"%");if(this._labels){var p=this.handle.width()/this.slider.width()*100,q=f&&p+(100-p)*f/100,r=f===100?0:Math.min(p+100-q,100);this._labels.each(function(){var b=a(this).is(".ui-slider-label-a");a(this).width((b?q:r)+"%")})}if(!d){var s=!1;g==="input"?(s=e.val()!==m,e.val(m)):(s=e[0].selectedIndex!==m,e[0].selectedIndex=m),!c&&s&&e.trigger("change")}},enable:function(){return this.element.attr("disabled",!1),this.slider.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.slider.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)}}),a(c).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:!1,icon:"arrow-d",iconpos:"right",inline:!1,corners:!0,shadow:!0,iconshadow:!0,overlayTheme:"a",hidePlaceholderMenuItems:!0,closeText:"Close",nativeMenu:!0,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"select:not( :jqmData(role='slider') )",mini:!1},_button:function(){return a("<div/>")},_setDisabled:function(a){return this.element.attr("disabled",a),this.button.attr("aria-disabled",a),this._setOption("disabled",a)},_focusButton:function(){var a=this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var b="";!~this.element[0].className.indexOf("ui-btn-left")||(b=" ui-btn-left"),!~this.element[0].className.indexOf("ui-btn-right")||(b=" ui-btn-right"),this.select=this.element.wrap("<div class='ui-select"+b+"'>"),this.selectID=this.select.attr("id"),this.label=a("label[for='"+this.selectID+"']").addClass("ui-select"),this.isMultiple=this.select[0].multiple,this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.select,"c"))},_create:function(){this._preExtension(),this._trigger("beforeCreate"),this.button=this._button();var c=this,d=this.options,e=d.inline||this.select.jqmData("inline"),f=d.mini||this.select.jqmData("mini"),g=d.icon?d.iconpos||this.select.jqmData("iconpos"):!1,h=this.select[0].selectedIndex===-1?0:this.select[0].selectedIndex,i=this.button.insertBefore(this.select).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:g,inline:e,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow,mini:f});this.setButtonText(),d.nativeMenu&&b.opera&&b.opera.version&&i.addClass("ui-select-nativeonly"),this.isMultiple&&(this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(i.addClass("ui-li-has-count"))),(d.disabled||this.element.attr("disabled"))&&this.disable(),this.select.change(function(){c.refresh()}),this.build()},build:function(){var b=this;this.select.appendTo(b.button).bind("vmousedown",function(){b.button.addClass(a.mobile.activeBtnClass)}).bind("focus",function(){b.button.addClass(a.mobile.focusClass)}).bind("blur",function(){b.button.removeClass(a.mobile.focusClass)}).bind("focus vmouseover",function(){b.button.trigger("vmouseover")}).bind("vmousemove",function(){b.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){b.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",function(){b.button.removeClass("ui-btn-down-"+b.options.theme)}),b.button.bind("vmousedown",function(){b.options.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("mouseup",function(){b.options.preventFocusZoom&&setTimeout(function(){a.mobile.zoom.enable(!0)},0)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var b=this,d=this.selected(),e=this.placeholder,f=a(c.createElement("span"));this.button.find(".ui-btn-text").html(function(){return d.length?e=d.map(function(){return a(this).text()}).get().join(", "):e=b.placeholder,f.text(e).addClass(b.select.attr("class")).addClass(d.attr("class"))})},setButtonCount:function(){var a=this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText(),this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(!0),this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(!1),this.button.removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.selectmenu.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){var e=function(d){var e=d.select,f=d.selectID,g=d.label,h=d.select.closest(".ui-page"),i=d._selectOptions(),j=d.isMultiple=d.select[0].multiple,k=f+"-button",l=f+"-menu",m=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+d.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+d.options.overlayTheme+"'>"+"<div data-"+a.mobile.ns+"role='header'>"+"<div class='ui-title'>"+g.getEncodedText()+"</div>"+"</div>"+"<div data-"+a.mobile.ns+"role='content'></div>"+"</div>"),n=a("<div>",{"class":"ui-selectmenu"}).insertAfter(d.select).popup({theme:"a"}),o=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",d.options.theme).appendTo(n),p=a("<div>",{"class":"ui-header ui-bar-"+d.options.theme}).prependTo(n),q=a("<h1>",{"class":"ui-title"}).appendTo(p),r,s,t;d.isMultiple&&(t=a("<a>",{text:d.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(p).buttonMarkup()),a.extend(d,{select:d.select,selectID:f,buttonId:k,menuId:l,thisPage:h,menuPage:m,label:g,selectOptions:i,isMultiple:j,theme:d.options.theme,listbox:n,list:o,header:p,headerTitle:q,headerClose:t,menuPageContent:r,menuPageClose:s,placeholder:"",build:function(){var b=this;b.refresh(),b.select.attr("tabindex","-1").focus(function(){a(this).blur(),b.button.focus()}),b.button.bind("vclick keydown",function(c){if(c.type==="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()}),b.list.attr("role","listbox").bind("focusin",function(b){a(b.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(b){a(b.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)","click",function(c){var e=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),g=b._selectOptions().eq(f)[0];g.selected=b.isMultiple?!g.selected:!0,b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",g.selected).toggleClass("ui-icon-checkbox-off",!g.selected),(b.isMultiple||e!==f)&&b.select.trigger("change"),b.isMultiple?b.list.find("li:not(.ui-li-divider)").eq(f).addClass("ui-btn-down-"+d.options.theme).find("a").first().focus():b.close(),c.preventDefault()}).keydown(function(b){var c=a(b.target),e=c.closest("li"),f,g;switch(b.keyCode){case 38:return f=e.prev().not(".ui-selectmenu-placeholder"),f.is(".ui-li-divider")&&(f=f.prev()),f.length&&(c.blur().attr("tabindex","-1"),f.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 40:return g=e.next(),g.is(".ui-li-divider")&&(g=g.next()),g.length&&(c.blur().attr("tabindex","-1"),g.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 13:case 32:return c.trigger("click"),!1}}),b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox),b._focusButton(),a.mobile._bindPageRemove.call(b.thisPage)}),b.listbox.bind("popupafterclose",function(a){b.close()}),b.isMultiple&&b.headerClose.click(function(){if(b.menuType==="overlay")return b.close(),!1}),b.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var a=this.list.find("li"),b=this._selectOptions();return b.text()!==a.text()},selected:function(){return this._selectOptions().filter(":selected:not( :jqmData(placeholder='true') )")},refresh:function(b,c){var d=this,e=this.element,f=this.isMultiple,g;(b||this._isRebuildRequired())&&d._buildList(),g=this.selectedIndices(),d.setButtonText(),d.setButtonCount(),d.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",!1).each(function(b){if(a.inArray(b,g)>-1){var c=a(this);c.attr("aria-selected",!0),d.isMultiple?c.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):c.is(".ui-selectmenu-placeholder")?c.next().addClass(a.mobile.activeBtnClass):c.addClass(a.mobile.activeBtnClass)}})},close:function(){if(this.options.disabled||!this.isOpen)return;var b=this;b.menuType==="page"?a.mobile.back():(b.listbox.popup("close"),b.list.appendTo(b.listbox),b._focusButton()),b.isOpen=!1},open:function(){function o(){var b=c.list.find("."+a.mobile.activeBtnClass+" a");b.length===0&&(b=c.list.find("li.ui-btn:not( :jqmData(placeholder='true') ) a")),b.first().focus().closest("li").addClass("ui-btn-down-"+d.options.theme)}if(this.options.disabled)return;var c=this,e=a(b),f=c.list.parent(),g=f.outerHeight(),h=f.outerWidth(),i=a("."+a.mobile.activePageClass),j=e.scrollTop(),k=c.button.offset().top,l=e.height(),n=e.width();c.button.addClass(a.mobile.activeBtnClass),setTimeout(function(){c.button.removeClass(a.mobile.activeBtnClass)},300),g>l-80||!a.support.scrollTop?(c.menuPage.appendTo(a.mobile.pageContainer).page(),c.menuPageContent=m.find(".ui-content"),c.menuPageClose=m.find(".ui-header a"),c.thisPage.unbind("pagehide.remove"),j===0&&k>l&&c.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",k)}),c.menuPage.one("pageshow",function(){o(),c.isOpen=!0}),c.menuType="page",c.menuPageContent.append(c.list),c.menuPage.find("div .ui-title").text(c.label.text()),a.mobile.changePage(c.menuPage,{transition:a.mobile.defaultDialogTransition})):(c.menuType="overlay",c.listbox.one("popupafteropen",o).popup("open",{x:c.button.offset().left+c.button.outerWidth()/2,y:c.button.offset().top+c.button.outerHeight()/2}),c.isOpen=!0)},_buildList:function(){var b=this,d=this.options,e=this.placeholder,f=!0,g=[],h=[],i=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");var j=b.select.find("option"),k=j.length,l=this.select[0],m="data-"+a.mobile.ns,n=m+"option-index",o=m+"icon",p=m+"role",q=m+"placeholder",r=c.createDocumentFragment(),s=!1,t;for(var u=0;u<k;u++,s=!1){var v=j[u],w=a(v),x=v.parentNode,y=w.text(),z=c.createElement("a"),A=[];z.setAttribute("href","#"),z.appendChild(c.createTextNode(y));if(x!==l&&x.nodeName.toLowerCase()==="optgroup"){var B=x.getAttribute("label");if(B!==t){var C=c.createElement("li");C.setAttribute(p,"list-divider"),C.setAttribute("role","option"),C.setAttribute("tabindex","-1"),C.appendChild(c.createTextNode(B)),r.appendChild(C),t=B}}f&&(!v.getAttribute("value")||y.length===0||w.jqmData("placeholder"))&&(f=!1,s=!0,v.setAttribute(q,!0),d.hidePlaceholderMenuItems&&A.push("ui-selectmenu-placeholder"),e||(e=b.placeholder=y));var D=c.createElement("li");v.disabled&&(A.push("ui-disabled"),D.setAttribute("aria-disabled",!0)),D.setAttribute(n,u),D.setAttribute(o,i),s&&D.setAttribute(q,!0),D.className=A.join(" "),D.setAttribute("role","option"),z.setAttribute("tabindex","-1"),D.appendChild(z),r.appendChild(D)}b.list[0].appendChild(r),!this.isMultiple&&!e.length?this.header.hide():this.headerTitle.text(this.placeholder),b.list.listview()},_button:function(){return a("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a(c).bind("selectmenubeforecreate",function(b){var c=a(b.target).data("selectmenu");!c.options.nativeMenu&&c.element.parents(":jqmData(role='popup')").length===0&&e(c)})}(a),function(a,d){a.widget("mobile.fixedtoolbar",a.mobile.widget,{options:{visibleOnPageShow:!0,disablePageZoom:!0,transition:"slide",fullscreen:!1,tapToggle:!0,tapToggleBlacklist:"a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup",hideDuringFocus:"input, textarea, select",updatePagePadding:!0,trackPersistentToolbars:!0,supportBlacklist:function(){var a=b,c=navigator.userAgent,d=navigator.platform,e=c.match(/AppleWebKit\/([0-9]+)/),f=!!e&&e[1],g=c.match(/Fennec\/([0-9]+)/),h=!!g&&g[1],i=c.match(/Opera Mobi\/([0-9]+)/),j=!!i&&i[1];return(d.indexOf("iPhone")>-1||d.indexOf("iPad")>-1||d.indexOf("iPod")>-1)&&f&&f<534||a.operamini&&{}.toString.call(a.operamini)==="[object OperaMini]"||i&&j<7458||c.indexOf("Android")>-1&&f&&f<533||h&&h<6||"palmGetResource"in b&&f&&f<534||c.indexOf("MeeGo")>-1&&c.indexOf("NokiaBrowser/8.5.0")>-1?!0:!1},initSelector:":jqmData(position='fixed')"},_create:function(){var a=this,b=a.options,c=a.element,d=c.is(":jqmData(role='header')")?"header":"footer",e=c.closest(".ui-page");if(b.supportBlacklist()){a.destroy();return}c.addClass("ui-"+d+"-fixed"),b.fullscreen?(c.addClass("ui-"+d+"-fullscreen"),e.addClass("ui-page-"+d+"-fullscreen")):e.addClass("ui-page-"+d+"-fixed"),a._addTransitionClass(),a._bindPageEvents(),a._bindToggleHandlers()},_addTransitionClass:function(){var a=this.options.transition;a&&a!=="none"&&(a==="slide"&&(a=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(a))},_bindPageEvents:function(){var c=this,d=c.options,e=c.element;e.closest(".ui-page").bind("pagebeforeshow",function(){d.disablePageZoom&&a.mobile.zoom.disable(!0),d.visibleOnPageShow||c.hide(!0)}).bind("webkitAnimationStart animationstart updatelayout",function(){var a=this;d.updatePagePadding&&c.updatePagePadding(a)}).bind("pageshow",function(){var e=this;c.updatePagePadding(e),d.updatePagePadding&&a(b).bind("throttledresize."+c.widgetName,function(){c.updatePagePadding(e)})}).bind("pagebeforehide",function(e,f){d.disablePageZoom&&a.mobile.zoom.enable(!0),d.updatePagePadding&&a(b).unbind("throttledresize."+c.widgetName);if(d.trackPersistentToolbars){var g=a(".ui-footer-fixed:jqmData(id)",this),h=a(".ui-header-fixed:jqmData(id)",this),i=g.length&&f.nextPage&&a(".ui-footer-fixed:jqmData(id='"+g.jqmData("id")+"')",f.nextPage)||a(),j=h.length&&f.nextPage&&a(".ui-header-fixed:jqmData(id='"+h.jqmData("id")+"')",f.nextPage)||a();if(i.length||j.length)i.add(j).appendTo(a.mobile.pageContainer),f.nextPage.one("pageshow",function(){i.add(j).appendTo(this)})}})},_visible:!0,updatePagePadding:function(b){var c=this.element,d=c.is(".ui-header");if(this.options.fullscreen)return;b=b||c.closest(".ui-page"),a(b).css("padding-"+(d?"top":"bottom"),c.outerHeight())},_useTransition:function(c){var d=a(b),e=this.element,f=d.scrollTop(),g=e.height(),h=e.closest(".ui-page").height(),i=a.mobile.getScreenHeight(),j=e.is(":jqmData(role='header')")?"header":"footer";return!c&&(this.options.transition&&this.options.transition!=="none"&&(j==="header"&&!this.options.fullscreen&&f>g||j==="footer"&&!this.options.fullscreen&&f+i<h-g)||this.options.fullscreen)},show:function(a){var b="ui-fixed-hidden",c=this.element;this._useTransition(a)?c.removeClass("out "+b).addClass("in"):c.removeClass(b),this._visible=!0},hide:function(a){var b="ui-fixed-hidden",c=this.element,d="out"+(this.options.transition==="slide"?" reverse":"");this._useTransition(a)?c.addClass(d).removeClass("in").animationComplete(function(){c.addClass(b).removeClass(d)}):c.addClass(b).removeClass(d),this._visible=!1},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var b=this,c=b.options,d=b.element;d.closest(".ui-page").bind("vclick",function(d){c.tapToggle&&!a(d.target).closest(c.tapToggleBlacklist).length&&b.toggle()}).bind("focusin focusout",function(d){screen.width<500&&a(d.target).is(c.hideDuringFocus)&&!a(d.target).closest(".ui-header-fixed, .ui-footer-fixed").length&&b[d.type==="focusin"&&b._visible?"hide":"show"]()})},destroy:function(){this.element.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden"),this.element.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}}),a(c).bind("pagecreate create",function(b){a(b.target).jqmData("fullscreen")&&a(a.mobile.fixedtoolbar.prototype.options.initSelector,b.target).not(":jqmData(fullscreen)").jqmData("fullscreen",!0),a.mobile.fixedtoolbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){function i(a){d=a.originalEvent,h=d.accelerationIncludingGravity,e=Math.abs(h.x),f=Math.abs(h.y),g=Math.abs(h.z),!b.orientation&&(e>7||(g>6&&f<8||g<8&&f>6)&&e>5)?c.enabled&&c.disable():c.enabled||c.enable()}if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1))return;var c=a.mobile.zoom,d,e,f,g,h;a(b).bind("orientationchange.iosorientationfix",c.enable).bind("devicemotion.iosorientationfix",i)}(a,this),function(a,b,d){function h(){e.removeClass("ui-mobile-rendering")}var e=a("html"),f=a("head"),g=a(b);a(b.document).trigger("mobileinit");if(!a.mobile.gradeA())return;a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),e.addClass("ui-mobile ui-mobile-rendering"),setTimeout(h,5e3),a.extend(a.mobile,{initializePage:function(){var b=a(":jqmData(role='page'), :jqmData(role='dialog')"),d=a.mobile.path.parseLocation().hash.replace("#",""),e=c.getElementById(d);b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0)),b.each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)}),a.mobile.firstPage=b.first(),a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport"),g.trigger("pagecontainercreate"),a.mobile.showPageLoadingMsg(),h(),!a.mobile.hashListeningEnabled||!a.mobile.path.isHashValid(location.hash)||!a(e).is(':jqmData(role="page")')&&!a.mobile.path.isPath(d)&&d!==a.mobile.dialogHashKey?(a.mobile.path.isHashValid(location.hash)&&(a.mobile.urlHistory.initialDst=d.replace("#","")),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0})):g.trigger("hashchange",[!0])}}),a.mobile.navreadyDeferred.resolve(),a(function(){b.scrollTo(0,1),a.mobile.defaultHomeScroll=!a.support.scrollTop||a(b).scrollTop()===1?0:1,a.fn.controlgroup&&a(c).bind("pagecreate create",function(b){a(":jqmData(role='controlgroup')",b.target).jqmEnhanceable().controlgroup({excludeInvisible:!1})}),a.mobile.autoInitializePage&&a.mobile.initializePage(),g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a(c).delegate(".ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})})}(a,this)});
\ No newline at end of file
diff --git a/ivi/manifest.json b/ivi/manifest.json
new file mode 100644 (file)
index 0000000..b2f0659
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "version": "0.0.1",
+    "name": "tct-behavior-tests",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "tct-behavior-tests",
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    },
+    "icons": {
+        "128": "icon.png"
+    }
+}
diff --git a/ivi/res/css/blue-100x100.css b/ivi/res/css/blue-100x100.css
new file mode 100644 (file)
index 0000000..84aded5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+#test-blue {
+    background-color: blue;
+    height: 100px;
+    width: 100px;
+}
diff --git a/ivi/res/css/test.css b/ivi/res/css/test.css
new file mode 100644 (file)
index 0000000..fc87d3a
--- /dev/null
@@ -0,0 +1 @@
+pre.prettyprint{padding:5px;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;margin-bottom:10px;background-color:#eee;overflow:auto;width:auto;width:650px !ie7;padding-bottom:20px !ie7;max-height:600px;}pre.prettyprint{max-height:none\9;}code.prettyprint{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;background-color:#eee;}p code.prettyprint{padding:1px 5px 1px 5px;}.str{color:maroon;}.kwd{color:#00008b;}.com{color:gray;}.typ{color:#2b91af;}.lit{color:maroon;}.pun{color:#000;}.pln{color:#000;}.tag{color:maroon;}.atn{color:red;}.atv{color:blue;}.dec{color:purple;}@media print{.str{color:#060;}.kwd{color:#006;font-weight:bold;}.com{color:#600;font-style:italic;}.typ{color:#404;font-weight:bold;}.lit{color:#044;}.pun{color:#440;}.pln{color:#000;}.tag{color:#006;font-weight:bold;}.atn{color:#404;}.atv{color:#060;}}
\ No newline at end of file
diff --git a/ivi/res/css/testkit/COPYING b/ivi/res/css/testkit/COPYING
new file mode 100644 (file)
index 0000000..de702ee
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+tests.css:
+This above file is under Intel GPL 2.0 License.
+From https://github.com/testkit/testkit-lite
+Please see LICENSE.GPL for the GPL terms and conditions.
diff --git a/ivi/res/css/testkit/tests.css b/ivi/res/css/testkit/tests.css
new file mode 100644 (file)
index 0000000..c2ba69b
--- /dev/null
@@ -0,0 +1,132 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,\r
+#testcasepage h1,\r
+#testcasepage p,\r
+#testcasepage table,\r
+#testcasepage tr,\r
+#testcasepage th,\r
+#testcasepage td {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+  font-weight: inherit;\r
+  font-style: inherit;\r
+  font-size: 0.96em;\r
+  font-family: arial;\r
+  vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+  text-align: left;\r
+}\r
+\r
+#suite_title {\r
+  text-align: left;\r
+}\r
+\r
+#btc {\r
+  text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+  border-collapse: separate;\r
+  border-spacing: 0;\r
+  margin-bottom: 1.4em;\r
+  vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,\r
+#testcasepage td {\r
+  text-align: left;\r
+  font-weight: normal;\r
+  padding: 4px 10px 4px 5px;\r
+  vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+  width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+  width: 101%;\r
+}\r
+\r
+#title table {\r
+  width: 101%;\r
+}\r
+\r
+#device table {\r
+  width: 50%;\r
+}\r
+\r
+#summary table {\r
+  width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+  border-bottom: 1px solid #000;\r
+  background-color: #AAAAAA;\r
+  border-left: 1px solid #000;\r
+  border-top: 1px solid #000;\r
+  color: #000;\r
+  font-weight: bold;\r
+  vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,\r
+#testcasepage td:last-child {\r
+  border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+  border-left: 1px solid;\r
+  font-weight: normal;\r
+  border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+  background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+  background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+  background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+  background-color: #FF3333;\r
+}\r
+\r
+#title table,\r
+#title tr,\r
+#title td {\r
+  border-left: none;\r
+  border-bottom: none;\r
+  text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+  border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+  font-size: 2em;\r
+  font-family: Arial, sans-serif;\r
+  font-weight: bold;\r
+  line-height: 1;\r
+  color: #000;\r
+  margin-bottom: 0.75em;\r
+  padding-top: 0.25em;\r
+  font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+  right: 0px;\r
+  bottom: 0px;\r
+  position: fixed; +position: absolute;\r
+  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
+}\r
diff --git a/ivi/res/css/w3c/COPYING b/ivi/res/css/w3c/COPYING
new file mode 100644 (file)
index 0000000..3622e0e
--- /dev/null
@@ -0,0 +1,11 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+canvas-index.css,
+a-green.css:
+The above files are licensed under the W3C Dual License.
+From https://github.com/w3c/web-platform-tests, https://github.com/w3c/csswg-test
+Please see http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
diff --git a/ivi/res/css/w3c/a-green.css b/ivi/res/css/w3c/a-green.css
new file mode 100644 (file)
index 0000000..636c1bc
--- /dev/null
@@ -0,0 +1 @@
+.a { color: green; }
\ No newline at end of file
diff --git a/ivi/res/css/w3c/canvas-index.css b/ivi/res/css/w3c/canvas-index.css
new file mode 100644 (file)
index 0000000..3e09ffb
--- /dev/null
@@ -0,0 +1,31 @@
+body {
+    font-size: small;
+    font-family: sans-serif;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+h3 {
+    display: inline;
+    font-size: medium;
+}
+
+h3 + p {
+    display: inline;
+    margin-left: 0.5em;
+}
+
+li {
+    list-style-type: none;
+}
+
+ul {
+    padding-left: 2em;
+    margin-left: 0;
+}
\ No newline at end of file
diff --git a/ivi/res/font/w3c/COPYING b/ivi/res/font/w3c/COPYING
new file mode 100644 (file)
index 0000000..8f5d6fd
--- /dev/null
@@ -0,0 +1,11 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+CanvasTest.ttf,
+csstest-basic-bold.ttf:
+The above files are licensed under the W3C Dual License.
+From https://github.com/w3c/web-platform-tests, https://github.com/w3c/csswg-test
+Please see http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html
diff --git a/ivi/res/font/w3c/CanvasTest.ttf b/ivi/res/font/w3c/CanvasTest.ttf
new file mode 100644 (file)
index 0000000..9023592
Binary files /dev/null and b/ivi/res/font/w3c/CanvasTest.ttf differ
diff --git a/ivi/res/font/w3c/csstest-basic-bold.ttf b/ivi/res/font/w3c/csstest-basic-bold.ttf
new file mode 100644 (file)
index 0000000..8c53e6f
Binary files /dev/null and b/ivi/res/font/w3c/csstest-basic-bold.ttf differ
diff --git a/ivi/res/font/webkit/Ahem.woff b/ivi/res/font/webkit/Ahem.woff
new file mode 100644 (file)
index 0000000..0bc8093
Binary files /dev/null and b/ivi/res/font/webkit/Ahem.woff differ
diff --git a/ivi/res/font/webkit/COPYING b/ivi/res/font/webkit/COPYING
new file mode 100644 (file)
index 0000000..2fe0cbd
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+Ahem.woff:
+The above file is under BSD Two Clause License:
+From http://svn.webkit.org/repository/webkit/trunk/LayoutTests/resources/
+Please see http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
diff --git a/ivi/res/images/COPYING b/ivi/res/images/COPYING
new file mode 100644 (file)
index 0000000..9f6198e
--- /dev/null
@@ -0,0 +1,11 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the COPYING file in the test suite for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+blue-100x100.png,
+green-100x100.png,
+red-100x100.png:
+The above files are licensed under Intel BSD-3-Clause License.
+Created by the Paint application.
diff --git a/ivi/res/images/blue-100x100.png b/ivi/res/images/blue-100x100.png
new file mode 100644 (file)
index 0000000..584f9c3
Binary files /dev/null and b/ivi/res/images/blue-100x100.png differ
diff --git a/ivi/res/images/green-100x100.png b/ivi/res/images/green-100x100.png
new file mode 100644 (file)
index 0000000..d3aea5d
Binary files /dev/null and b/ivi/res/images/green-100x100.png differ
diff --git a/ivi/res/images/meego/COPYING b/ivi/res/images/meego/COPYING
new file mode 100644 (file)
index 0000000..a32dd19
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the COPYING file in the test suite for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+PNG_512x512_318Kb_BBB.png:
+The above file is licensed under MeeGo LGPL v2.1 License.
+From http://testdata.meego.com
+Please see the LICENSE.LGPL for LGPL terms and conditions.
diff --git a/ivi/res/images/meego/PNG_512x512_318Kb_BBB.png b/ivi/res/images/meego/PNG_512x512_318Kb_BBB.png
new file mode 100644 (file)
index 0000000..2aa08a3
Binary files /dev/null and b/ivi/res/images/meego/PNG_512x512_318Kb_BBB.png differ
diff --git a/ivi/res/images/red-100x100.png b/ivi/res/images/red-100x100.png
new file mode 100644 (file)
index 0000000..d13fc80
Binary files /dev/null and b/ivi/res/images/red-100x100.png differ
diff --git a/ivi/res/images/testkit/COPYING b/ivi/res/images/testkit/COPYING
new file mode 100644 (file)
index 0000000..4886f6f
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+back_top.png:
+This above file is under Intel GPL 2.0 License.
+From https://github.com/testkit/testkit-lite
+Please see LICENSE.GPL for the GPL terms and conditions.
diff --git a/ivi/res/images/testkit/back_top.png b/ivi/res/images/testkit/back_top.png
new file mode 100644 (file)
index 0000000..19cbd76
Binary files /dev/null and b/ivi/res/images/testkit/back_top.png differ
diff --git a/ivi/res/images/w3c/1x1-white.png b/ivi/res/images/w3c/1x1-white.png
new file mode 100644 (file)
index 0000000..dd43fae
Binary files /dev/null and b/ivi/res/images/w3c/1x1-white.png differ
diff --git a/ivi/res/images/w3c/COPYING b/ivi/res/images/w3c/COPYING
new file mode 100644 (file)
index 0000000..95c1f0b
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+1x1-white.png:
+The file is licensed under the W3C Dual License.
+From https://github.com/w3c/csswg-test/
+Please see http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html.
diff --git a/ivi/res/images/webkit/COPYING b/ivi/res/images/webkit/COPYING
new file mode 100644 (file)
index 0000000..533ea36
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+The ring.png:
+The above file is licensed under WebKit BSD-2-Clause License.
+From http://svn.webkit.org/repository/webkit/trunk/LayoutTests/fast/backgrounds/resources/
+Please see the LICENSE.BSD-2 file for the BSD-2-Clause License.
diff --git a/ivi/res/images/webkit/ring.png b/ivi/res/images/webkit/ring.png
new file mode 100644 (file)
index 0000000..061bb94
Binary files /dev/null and b/ivi/res/images/webkit/ring.png differ
diff --git a/ivi/res/js/csp.js b/ivi/res/js/csp.js
new file mode 100644 (file)
index 0000000..a3bf290
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+
+var X = 10;
+var Y = eval(X + 17);
diff --git a/ivi/res/js/reportcspviolation.cgi b/ivi/res/js/reportcspviolation.cgi
new file mode 100755 (executable)
index 0000000..3dd448c
--- /dev/null
@@ -0,0 +1,55 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this list
+#   of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Hao, Yunfei <yunfeix.hao@intel.com>
+
+import time
+import os
+print 'Content-Type: text/html\n\n'
+while True:
+    i = raw_input()
+    if i is None:
+        break
+    if str(i).strip()=='':
+        break
+    n = 1
+    if os.path.isfile('/tmp/csp-report.log'):
+        file_object_num = open('/tmp/csp-report.log','r')
+        for line in file_object_num:
+            if str(line).find("Time:") >= 0:
+                n = n+1
+        file_object_num.close( )
+    file_object = open('/tmp/csp-report.log', 'a')
+    file_object.write('\n %d   Time:' %n)
+    file_object.write( time.strftime(' %Y-%m-%d %H:%M:%S',time.localtime(time.time())))
+    file_object.write('\n')
+    file_object.write('     Data:')
+    file_object.write(i)
+    file_object.write('\n')
+    file_object.close( )
+    print i
diff --git a/ivi/res/js/test.js b/ivi/res/js/test.js
new file mode 100644 (file)
index 0000000..8b868e4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
+function getVideoURI (){
+
+}
diff --git a/ivi/res/js/test81.js b/ivi/res/js/test81.js
new file mode 100644 (file)
index 0000000..e582567
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+function getVideoURI (){
+
+}
diff --git a/ivi/res/js/test83.js b/ivi/res/js/test83.js
new file mode 100644 (file)
index 0000000..d260698
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
diff --git a/ivi/res/js/testkit/COPYING b/ivi/res/js/testkit/COPYING
new file mode 100644 (file)
index 0000000..26918c8
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+application.js:
+This above file is under Intel GPL 2.0 License.
+From https://github.com/testkit/testkit-lite
+Please see LICENSE.GPL for the GPL terms and conditions.
diff --git a/ivi/res/js/testkit/application.js b/ivi/res/js/testkit/application.js
new file mode 100644 (file)
index 0000000..964aa19
--- /dev/null
@@ -0,0 +1,47 @@
+function getScrollTop() {
+  return f_scrollTop();
+}
+
+function f_scrollTop() {
+  return f_filterResults (
+    $(window) ? $(window).scrollTop() : 0,
+    document.documentElement ? document.documentElement.scrollTop : 0,
+    document.body ? document.body.scrollTop : 0
+  );
+}
+
+function f_filterResults(n_win, n_docel, n_body) {
+  var n_result = n_win ? n_win : 0;
+  if (n_docel && (!n_result || (n_result > n_docel)))
+    n_result = n_docel;
+  return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop() {
+  $(window) ? $(window).scrollTop(0): 0;
+  document.documentElement ? document.documentElement.scrollTop = 0 :0;
+  document.body ? document.body.scrollTop = 0 : 0;
+}
+
+function goTopEx() {
+  $node = $('#goTopBtn');
+
+  if (getScrollTop() > 0) {
+    $node.show();
+  } else {
+    $node.hide();
+  }
+
+  $(window).scroll(function () {
+    if (getScrollTop() > 0) {
+      $node.show();
+    } else {
+      $node.hide();
+    }
+  });
+
+  $node.click(function () {
+    setScrollTop();
+  });
+}
+
diff --git a/ivi/res/media/khronos/COPYING b/ivi/res/media/khronos/COPYING
new file mode 100644 (file)
index 0000000..d605338
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the COPYING file in the test suite for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+red-green.theora.ogv:
+The above files are licensed under the MIT License.
+From https://github.com/KhronosGroup/WebGL/blob/master/conformance-suites/1.0.2/conformance/resources/red-green.theora.ogv
+Please see LICENSE.MIT for the MIT terms and conditions.
diff --git a/ivi/res/media/khronos/red-green.theora.ogv b/ivi/res/media/khronos/red-green.theora.ogv
new file mode 100644 (file)
index 0000000..1543915
Binary files /dev/null and b/ivi/res/media/khronos/red-green.theora.ogv differ
diff --git a/ivi/res/media/meego/3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp b/ivi/res/media/meego/3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
new file mode 100644 (file)
index 0000000..ee410d3
Binary files /dev/null and b/ivi/res/media/meego/3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp differ
diff --git a/ivi/res/media/meego/COPYING b/ivi/res/media/meego/COPYING
new file mode 100644 (file)
index 0000000..51276e5
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the COPYING file in the test suite for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp(Renamed from 3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp),
+MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4,
+MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4:
+The above file is licensed under MeeGo LGPL v2.1 License.
+From http://testdata.meego.com
+Please see the LICENSE.LGPL for LGPL terms and conditions.
diff --git a/ivi/res/media/meego/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 b/ivi/res/media/meego/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
new file mode 100644 (file)
index 0000000..a7e8564
Binary files /dev/null and b/ivi/res/media/meego/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 differ
diff --git a/ivi/res/media/meego/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 b/ivi/res/media/meego/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
new file mode 100644 (file)
index 0000000..65b4781
Binary files /dev/null and b/ivi/res/media/meego/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 differ
diff --git a/ivi/subtestresult.xml b/ivi/subtestresult.xml
new file mode 100644 (file)
index 0000000..89da8c1
--- /dev/null
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testresult.xsl"?>
+<test_definition>
+<suite name="tct-behavior-tests">
+  <set name="CSP">
+      <testcase id="csp-none" result="N/A"></testcase>
+      <testcase id="csp-self" result="N/A"></testcase>
+      <testcase id="default-src_none" result="N/A"></testcase>
+      <testcase id="default-src_asterisk" result="N/A"></testcase>
+      <testcase id="sandbox-empty-ext" result="N/A"></testcase>
+      <testcase id="sandbox-empty-int" result="N/A"></testcase>
+      <testcase id="sandbox-empty-inline" result="N/A"></testcase>
+      <testcase id="sandbox-same-origin-allow-scripts" result="N/A"></testcase>
+      <testcase id="script-src_none" result="N/A"></testcase>
+      <testcase id="style-src_self" result="N/A"></testcase>
+  </set>
+  <set name="PackageManagement">
+      <testcase id="Sample-widget1" result="N/A"></testcase>
+      <testcase id="Sample-widget2" result="N/A"></testcase>
+      <testcase id="Sample-widget3" result="N/A"></testcase>
+      <testcase id="Sample-widget4" result="N/A"></testcase>
+      <testcase id="widget-version-1" result="N/A"></testcase>
+      <testcase id="npruntime-all-on-arm" result="N/A"></testcase>
+      <testcase id="npruntime-arm-on-x86" result="N/A"></testcase>
+  </set>
+  <set name="ConfigurationExtension">
+      <testcase id="application-content" result="N/A"></testcase>
+      <testcase id="setting-ar-true" result="N/A"></testcase>
+      <testcase id="setting-bs-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-enable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-disable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-enable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-default" result="N/A"></testcase>
+      <testcase id="setting-hwkey-disable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-enable" result="N/A"></testcase>
+      <testcase id="setting-install-location-internal-only-with-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-no-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-with-card" result="N/A"></testcase>
+      <testcase id="application-content-crosswalksite" result="N/A"></testcase>
+  </set>
+  <set name="Stability">
+      <testcase id="test-half-memory" result="N/A"></testcase>
+      <testcase id="test-hd-image" result="N/A"></testcase>
+  </set>
+  <set name="WRTSupport">
+      <testcase id="other-localization" result="N/A"></testcase>
+      <testcase id="lifecycle-unload-event" result="N/A"></testcase>
+      <testcase id="other-widget-access-policy" result="N/A"></testcase>
+      <testcase id="other-uri-schemes" result="N/A"></testcase>
+      <testcase id="other-uri-schemes-mailto" result="N/A"></testcase>
+      <testcase id="url-access-multi" result="N/A"></testcase>
+      <testcase id="url-access-multi-all" result="N/A"></testcase>
+      <testcase id="url-access-multi-subdomains" result="N/A"></testcase>
+      <testcase id="security-policy" result="N/A"></testcase>
+      <testcase id="protection-encryption-check" result="N/A"></testcase>
+  </set>
+  <set name="WRTUI">
+      <testcase id="multiple-browsing-context" result="N/A"></testcase>
+      <testcase id="view-mode-fullscreen-rotation" result="N/A"></testcase>
+      <testcase id="view-mode-maximized-rotation" result="N/A"></testcase>
+  </set>
+  <set name="Gesture">
+      <testcase id="Crosswalk_WebApp_Pinch_Zoom_Map" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Pinch_Zoom_Pic" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Pinch_Zoom_Text" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Touch_Gesture_Click" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Touch_Gesture_Scroll" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Touch_Gesture_Swipe" result="N/A"></testcase>
+  </set>
+  <set name="ScrollIndicator">
+      <testcase id="Crosswalk_WebApp_ScrollIndicators_Default" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_ScrollIndicators_LargeSize" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_ScrollIndicators_Map" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_ScrollIndicators_Operate" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_ScrollIndicators_Pic" result="N/A"></testcase>
+  </set>
+  <set name="VideoPlay">
+      <testcase id="Crosswalk_VideoFormat_MP4" result="N/A"></testcase>
+      <testcase id="Crosswalk_VideoFormat_OGV" result="N/A"></testcase>
+      <testcase id="Crosswalk_VideoFormat_WebM" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Video_FullScreen" result="N/A"></testcase>
+      <testcase id="Crosswalk_WebApp_Video_HWAccelerate" result="N/A"></testcase>
+  </set>
+  <set name="Integration">
+      <testcase id="Crosswalk_WebApp_Integration_NoCursors" result="N/A"></testcase>
+      <testcase id="Crosswalk_System_Interruption" result="N/A"></testcase>
+      <testcase id="Crosswalk_System_Proxy" result="N/A"></testcase>
+  </set>
+  <set name="VKB">
+      <testcase id="Crosswalk_VKB_Basic" result="N/A"></testcase>
+      <testcase id="Crosswalk_VKB_ContentSwitch" result="N/A"></testcase>
+  </set>   
+</suite>
+</test_definition>
diff --git a/ivi/suite.json b/ivi/suite.json
new file mode 100644 (file)
index 0000000..693e13a
--- /dev/null
@@ -0,0 +1,112 @@
+{
+    "pkg-blacklist": [
+        "config.xml",
+        "pack.py",
+        "testcase.xsl",
+        "testresult.xsl",
+        "tests.css",
+        "icon.png",
+        "manifest.json",
+        "suite.json",
+        "inst.*"
+    ],
+    "pkg-list": {
+        "apk,cordova": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.apk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.android.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [
+                        "manifest.json"
+                    ],
+                    "copylist": {
+                        "tests.android.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                }
+            }
+        },
+        "wgt": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.wgt.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.tizen.xml": "tests.xml"
+            },
+            "sign-flag": "true",
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "copylist": {
+                        "tests.tizen.xml": "tests.xml"
+                    },
+                    "install-path": ".",
+                    "sign-flag": "true"
+                },
+                "tests/Viewport/ViewportTest": {
+                    "app-name": "ViewportTest",
+                    "blacklist": [],
+                    "install-path": "apps",
+                    "sign-flag": "true"
+                }
+            }
+        },
+        "xpk": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.xpk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.tizen.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [],
+                    "copylist": {
+                        "tests.tizen.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                },
+                "tests/Viewport/ViewportTest": {
+                    "app-name": "ViewportTest",
+                    "blacklist": [],
+                    "install-path": "apps",
+                    "sign-flag": "true"
+                }
+            }
+        }
+    },
+    "pkg-name": "tct-behavior-tests"
+}
diff --git a/ivi/testcase.xsl b/ivi/testcase.xsl
new file mode 100644 (file)
index 0000000..fb32685
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suites">
+            <a name="contents"/>
+            <table>
+              <tr>
+                <th>Test Suite</th>
+                <th>Total</th>
+                <th>Auto</th>
+                <th>Manual</th>
+              </tr>
+              <tr>
+                <td>
+                  Total
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase)"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])"/>
+                </td>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="title">
+            <table>
+              <tr>
+                <td class="title">
+                  <h1>Detailed Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="cases">
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Type</th>
+                  <th>Component</th>
+                  <th>Execution Type</th>
+                  <th>Description</th>
+                  <th>Specification</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="7">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <!-- xsl:sort select="@id" /> -->
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@type"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@component"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@execution_type"/>
+                      </td>
+                      <td>
+                        <p>
+                          Pre_condition:
+                          <xsl:value-of select=".//description/pre_condition"/>
+                        </p>
+                        <p>
+                          Post_condition:
+                          <xsl:value-of select=".//description/post_condition"/>
+                        </p>
+                        <p>
+                          Test Script Entry:
+                          <xsl:value-of select=".//description/test_script_entry"/>
+                        </p>
+                        <p>
+                          Steps:
+                          <p/>
+                          <xsl:for-each select=".//description/steps/step"><xsl:sort select="@order"/>
+                            Step
+                            <xsl:value-of select="@order"/>
+                            :
+                            <xsl:value-of select="./step_desc"/>
+                            ;
+                            <p/>
+                            Expected Result:
+                            <xsl:value-of select="./expected"/>
+                            <p/>
+                          </xsl:for-each>
+                        </p>
+                      </td>
+                      <td>
+                        <xsl:for-each select=".//specs/spec"><b>[Spec_Assertion]:</b><br/>
+                          [Category]:
+                          <xsl:value-of select="./spec_assertion/@category"/>
+                          <br/>
+                          [Section]:
+                          <xsl:value-of select="./spec_assertion/@section"/>
+                          <br/>
+                          [Specification]:
+                          <xsl:value-of select="./spec_assertion/@specification"/>
+                          <br/>
+                          [Interface]:
+                          <xsl:value-of select="./spec_assertion/@interface"/>
+                          <br/>
+                          <xsl:choose><xsl:when test="./spec_assertion/@element_name">
+                              [<xsl:value-of select="./spec_assertion/@element_type"/>]:
+                              <xsl:value-of select="./spec_assertion/@element_name"/>
+                              <br/>
+                            </xsl:when></xsl:choose>
+                          [URL]:
+                          <xsl:value-of select="./spec_url"/>
+                          <br/>
+                          [Statement]:
+                          <xsl:value-of select="./spec_statement"/>
+                          <br/>
+                        </xsl:for-each>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/ivi/testresult.xsl b/ivi/testresult.xsl
new file mode 100644 (file)
index 0000000..c5199c0
--- /dev/null
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Report</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="device">
+            <table>
+              <tr>
+                <th colspan="2">Device Information</th>
+              </tr>
+              <tr>
+                <td>Device Name</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_name">
+                      <xsl:if test="test_definition/environment/@device_name = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_name"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device Model</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_model">
+                      <xsl:if test="test_definition/environment/@device_model = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_model"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>OS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@os_version">
+                      <xsl:if test="test_definition/environment/@os_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@os_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_id">
+                      <xsl:if test="test_definition/environment/@device_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Firmware Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@firmware_version">
+                      <xsl:if test="test_definition/environment/@firmware_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@firmware_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Build ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@build_id">
+                      <xsl:if test="test_definition/environment/@build_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@build_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Screen Size</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@screen_size">
+                      <xsl:if test="test_definition/environment/@screen_size = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@screen_size"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Resolution</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@resolution">
+                      <xsl:if test="test_definition/environment/@resolution = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@resolution"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Host Info</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@host">
+                      <xsl:if test="test_definition/environment/@host = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@host"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>CTS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@cts_version">
+                      <xsl:if test="test_definition/environment/@cts_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@cts_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Others</td>
+                <td>
+                  <xsl:if test="test_definition/environment/other = ''">
+                    N/A
+                  </xsl:if>
+                  <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="test_definition/environment/other"/>
+                  </xsl:call-template>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="summary">
+            <table>
+              <tr>
+                <th colspan="2">Test Summary</th>
+              </tr>
+              <tr>
+                <td>Test Plan Name</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/@test_plan_name"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Tests Total</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase)"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Passed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'PASS'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Failed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'FAIL'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Block</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Not Run</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Start time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/start_at"/>
+                </td>
+              </tr>
+              <tr>
+                <td>End time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/end_at"/>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suite_summary">
+            <div id="title">
+              <a name="contents"/>
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1>Test Summary by Suite</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <table>
+              <tr>
+                <th>Suite</th>
+                <th>Passed</th>
+                <th>Failed</th>
+                <th>Blocked</th>
+                <th>Not Run</th>
+                <th>Total</th>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <xsl:sort select="@name"/>
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'PASS'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'FAIL'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="fail_cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">
+                      Test Failures (
+                        <xsl:value-of select="count(test_definition/suite/set//testcase[@result = 'FAIL'])"/>
+                      )
+                    </h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <xsl:choose>
+                      <xsl:when test="@result">
+                        <xsl:if test="@result = 'FAIL'">
+                          <tr>
+                            <td>
+                              <xsl:value-of select="@id"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select="@purpose"/>
+                            </td>
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select=".//result_info/stdout"/>
+                              <xsl:if test=".//result_info/stdout = ''">
+                                N/A
+                              </xsl:if>
+                            </td>
+                          </tr>
+                        </xsl:if>
+                      </xsl:when>
+                    </xsl:choose>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+          <div id="cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">Detailed Test Results</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <xsl:choose>
+                        <xsl:when test="@result">
+                          <xsl:if test="@result = 'FAIL'">
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'PASS'">
+                            <td class="green_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'BLOCK' ">
+                            <td>
+                              BLOCK
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                            <td>
+                              Not Run
+                            </td>
+                          </xsl:if>
+                        </xsl:when>
+                        <xsl:otherwise>
+                          <td>
+                          </td>
+                        </xsl:otherwise>
+                      </xsl:choose>
+                      <td>
+                        <xsl:value-of select=".//result_info/stdout"/>
+                        <xsl:if test=".//result_info/stdout = ''">
+                          N/A
+                        </xsl:if>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+  <xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:variable name="cr">
+      <xsl:text>
+      </xsl:text>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="contains($word,$cr)">
+        <xsl:value-of select="substring-before($word,$cr)"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word,$cr)"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/ivi/tests.android.xml b/ivi/tests.android.xml
new file mode 100644 (file)
index 0000000..62b2a76
--- /dev/null
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase component="TCT Behavior" execution_type="manual" id="MediaPlayback" purpose="Media Playback Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="2D3DAnimation" purpose="2D/3D Animation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="SVGTransformation" purpose="SVG Transformation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSSStyle" purpose="CSS Style Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSSAnimation" purpose="CSS Animation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Canvas-PicRotaScaleTransfVampix" purpose="Canvas Usage Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSS-AnimTransfBackgBordFont" purpose="CSS Usage Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="WOFF" purpose="WOFF Test">
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+      <testcase component="TCT Behavior" execution_type="manual" id="CameraViaUserMedia" purpose="Camera via UserMedia Test">
+        <capability name="cameraFront"/>
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="LocationGPS" purpose="Location GPS Test">
+        <capability name="locationGps"/>
+      </testcase>
+    </set>
+    <set name="Gesture">
+      <testcase component="TCT Behavior" execution_type="manual" id="Touch" purpose="Touch Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="PageVisibility" purpose="Page Visibility Test">
+      </testcase>
+    </set>
+    <set name="Content">
+      <testcase component="TCT Behavior" execution_type="manual" id="FileReader" purpose="FileReader Test">
+      </testcase>
+    </set>
+    <set name="System">
+      <testcase component="TCT Behavior" execution_type="manual" id="FullScreen" purpose="Full Screen Test">
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/ivi/tests.css b/ivi/tests.css
new file mode 100644 (file)
index 0000000..c2ba69b
--- /dev/null
@@ -0,0 +1,132 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,\r
+#testcasepage h1,\r
+#testcasepage p,\r
+#testcasepage table,\r
+#testcasepage tr,\r
+#testcasepage th,\r
+#testcasepage td {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+  font-weight: inherit;\r
+  font-style: inherit;\r
+  font-size: 0.96em;\r
+  font-family: arial;\r
+  vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+  text-align: left;\r
+}\r
+\r
+#suite_title {\r
+  text-align: left;\r
+}\r
+\r
+#btc {\r
+  text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+  border-collapse: separate;\r
+  border-spacing: 0;\r
+  margin-bottom: 1.4em;\r
+  vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,\r
+#testcasepage td {\r
+  text-align: left;\r
+  font-weight: normal;\r
+  padding: 4px 10px 4px 5px;\r
+  vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+  width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+  width: 101%;\r
+}\r
+\r
+#title table {\r
+  width: 101%;\r
+}\r
+\r
+#device table {\r
+  width: 50%;\r
+}\r
+\r
+#summary table {\r
+  width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+  border-bottom: 1px solid #000;\r
+  background-color: #AAAAAA;\r
+  border-left: 1px solid #000;\r
+  border-top: 1px solid #000;\r
+  color: #000;\r
+  font-weight: bold;\r
+  vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,\r
+#testcasepage td:last-child {\r
+  border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+  border-left: 1px solid;\r
+  font-weight: normal;\r
+  border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+  background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+  background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+  background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+  background-color: #FF3333;\r
+}\r
+\r
+#title table,\r
+#title tr,\r
+#title td {\r
+  border-left: none;\r
+  border-bottom: none;\r
+  text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+  border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+  font-size: 2em;\r
+  font-family: Arial, sans-serif;\r
+  font-weight: bold;\r
+  line-height: 1;\r
+  color: #000;\r
+  margin-bottom: 0.75em;\r
+  padding-top: 0.25em;\r
+  font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+  right: 0px;\r
+  bottom: 0px;\r
+  position: fixed; +position: absolute;\r
+  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
+}\r
diff --git a/ivi/tests.full.xml b/ivi/tests.full.xml
new file mode 100644 (file)
index 0000000..85f51ee
--- /dev/null
@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl"  href="testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase purpose="Media Playback Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="MediaPlayback">
+      </testcase>
+      <testcase purpose="2D/3D Animation Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="2D3DAnimation">
+      </testcase>
+      <testcase purpose="SVG Transformation Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="SVGTransformation">
+      </testcase>
+      <testcase purpose="CSS Style Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="CSSStyle">
+      </testcase>
+      <testcase purpose="CSS Animation Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="CSSAnimation">
+      </testcase>
+      <testcase purpose="Canvas Usage Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="Canvas-PicRotaScaleTransfVampix">
+      </testcase>
+      <testcase purpose="CSS Usage Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="CSS-AnimTransfBackgBordFont">
+      </testcase>
+      <testcase purpose="WOFF Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="WOFF">
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+      <testcase purpose="Camera Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="android" priority="P0" id="Camera">
+        <capability name="camera"/>
+      </testcase>
+      <testcase purpose="Camera via UserMedia Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="CameraViaUserMedia">
+        <capability name="cameraFront"/>
+      </testcase>
+      <testcase purpose="Vibration Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="android" priority="P0" id="Vibration">
+      </testcase>
+      <testcase purpose="Location GPS Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="android" priority="P0" id="LocationGPS">
+        <capability name="locationGps"/>
+      </testcase>
+      <testcase purpose="Accelerometer Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="Accelerometer">
+        <capability name="accelerometer"/>
+      </testcase>
+      <testcase purpose="Gamepad Test" type="functional_positive" status="designed" component="Crosswalk Behavior" execution_type="manual" platform="android" priority="P0" id="Gamepad">
+        <capability name="accelerometer"/>
+      </testcase>
+    </set>
+    <set name="Gesture">
+      <testcase purpose="Touch Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="Touch">
+      </testcase>
+      <testcase purpose="Drag and Drop Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="DragandDrop">
+      </testcase>
+      <testcase purpose="Clipboard Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Clipboard">
+      </testcase>
+      <testcase purpose="Viewport Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Viewport">
+      </testcase>
+      <testcase purpose="Page Visibility Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="android" priority="P0" id="PageVisibility">
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase purpose="Alarm Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Alarm">
+      </testcase>
+      <testcase purpose="Application Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="Application">
+      </testcase>
+      <testcase purpose="AppControl Extending Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="AppControlExtending">
+      </testcase>
+      <testcase purpose="Package Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Package">
+      </testcase>
+      <testcase purpose="Hybrid Application Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="HybridApplication">
+      </testcase>
+    </set>
+    <set name="Communication">
+      <testcase purpose="Bluetooth Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Bluetooth">
+        <capability name="bluetooth"/>
+      </testcase>
+      <testcase purpose="Messaging SMS/MMS Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="MessagingSMSMMS">
+        <capability name="telephony"/>
+      </testcase>
+      <testcase purpose="Messaging Email Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="MessagingEmail">
+      </testcase>
+      <testcase purpose="NFC Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="NFC">
+        <capability name="nfc"/>
+      </testcase>
+      <testcase purpose="Push Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="Push">
+        <capability name="push"/>
+      </testcase>
+      <testcase purpose="Telephony Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Telephony">
+      </testcase>
+    </set>
+    <set name="Social">
+      <testcase purpose="DataSync Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="DataSync">
+      </testcase>
+    </set>
+    <set name="Content">
+      <testcase purpose="Download Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Download">
+      </testcase>
+      <testcase purpose="FileReader Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="FileReader">
+      </testcase>
+    </set>
+    <set name="System">
+      <testcase purpose="Power Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Power">
+      </testcase>
+      <testcase purpose="SystemInfo Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="SystemInfo">
+      </testcase>
+      <testcase purpose="SystemSetting Screen Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="SystemSettingScreen">
+      </testcase>
+      <testcase purpose="SystemSetting IncomingCall Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="SystemSettingIncomingCall">
+      </testcase>
+      <testcase purpose="Security Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Security">
+      </testcase>
+      <testcase purpose="Notification Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="Notification">
+      </testcase>
+      <testcase purpose="Full Screen Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="FullScreen">
+      </testcase>
+      <testcase purpose="Battery Status Test" type="functional_positive" status="designed" component="Crosswalk Behavior" execution_type="manual" platform="android" priority="P0" id="BatteryStatus">
+      </testcase>
+    </set>
+    <set name="Web Runtime">
+      <testcase purpose="Application Invisible Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="ApplicationInvisible">
+      </testcase>
+      <testcase purpose="Dynamic Box Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="DynamicBox">
+        <capability name="shellAppWidget"/>
+      </testcase>
+      <testcase purpose="CSP Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="CSP" subcase="10">
+      </testcase>
+      <testcase purpose="User Interface Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="WRTUI" subcase="3">
+      </testcase>
+      <testcase purpose="Application Runtime Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="WRTSupport" subcase="10">
+      </testcase>
+      <testcase purpose="Configuration Extension Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="ConfigurationExtension" subcase="10">
+      </testcase>
+      <testcase purpose="Package Management Test" type="functional_positive" status="approved" component="TCT Behavior" execution_type="manual" platform="tizen" priority="P0" id="PackageManagement" subcase="4">
+      </testcase>
+      <testcase purpose="User Agent String Test" type="functional_positive" status="designed" component="TCT Behavior" execution_type="manual" platform="all" priority="P0" id="UserAgentString">
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/ivi/tests.tizen.xml b/ivi/tests.tizen.xml
new file mode 100644 (file)
index 0000000..f395c89
--- /dev/null
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase component="TCT Behavior" execution_type="manual" id="MediaPlayback" purpose="Media Playback Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="2D3DAnimation" purpose="2D/3D Animation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="SVGTransformation" purpose="SVG Transformation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSSStyle" purpose="CSS Style Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSSAnimation" purpose="CSS Animation Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Canvas-PicRotaScaleTransfVampix" purpose="Canvas Usage Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="CSS-AnimTransfBackgBordFont" purpose="CSS Usage Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="WOFF" purpose="WOFF Test">
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+      <testcase component="TCT Behavior" execution_type="manual" id="CameraViaUserMedia" purpose="Camera via UserMedia Test">
+        <capability name="cameraFront"/>
+      </testcase>
+    </set>
+    <set name="Gesture">
+      <testcase component="TCT Behavior" execution_type="manual" id="Touch" purpose="Touch Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="DragandDrop" purpose="Drag and Drop Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Clipboard" purpose="Clipboard Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Viewport" purpose="Viewport Test">
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase component="TCT Behavior" execution_type="manual" id="Alarm" purpose="Alarm Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Package" purpose="Package Test">
+      </testcase>
+    </set>
+    <set name="Communication">
+      <testcase component="TCT Behavior" execution_type="manual" id="Bluetooth" purpose="Bluetooth Test">
+        <capability name="bluetooth"/>
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Telephony" purpose="Telephony Test">
+      </testcase>
+    </set>
+    <set name="Content">
+      <testcase component="TCT Behavior" execution_type="manual" id="Download" purpose="Download Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="FileReader" purpose="FileReader Test">
+      </testcase>
+    </set>
+    <set name="System">
+      <testcase component="TCT Behavior" execution_type="manual" id="SystemInfo" purpose="SystemInfo Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="SystemSettingScreen" purpose="SystemSetting Screen Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="SystemSettingIncomingCall" purpose="SystemSetting IncomingCall Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Security" purpose="Security Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="Notification" purpose="Notification Test">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="FullScreen" purpose="Full Screen Test">
+      </testcase>
+    </set>
+    <set name="Web Runtime">
+      <testcase component="TCT Behavior" execution_type="manual" id="CSP" purpose="CSP Test" subcase="10">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="WRTUI" purpose="User Interface Test" subcase="3">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="WRTSupport" purpose="Application Runtime Test" subcase="10">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="ConfigurationExtension" purpose="Configuration Extension Test" subcase="10">
+      </testcase>
+      <testcase component="TCT Behavior" execution_type="manual" id="PackageManagement" purpose="Package Management Test" subcase="4">
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/ivi/tests/2D3DAnimation/css/style.css b/ivi/tests/2D3DAnimation/css/style.css
new file mode 100644 (file)
index 0000000..4bd6a6c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 7px 0px;
+   width: 100%;
+}
+
+#viewArea {
+    width: 100%;
+    border: 1px solid black;
+}
+
+#mainTester {
+    position: relative;
+    width: 330px;
+    height: 300px;
+    margin: 0px auto;
+}
+
+.containing-element {padding-top: 20px;}
+
+.containing-element .ui-slider-switch { width: 100%;}
+
+.containing-element .ui-controlgroup-controls { width: 100%;}
+
+.ui-radio { width: 50%;}
diff --git a/ivi/tests/2D3DAnimation/index.html b/ivi/tests/2D3DAnimation/index.html
new file mode 100644 (file)
index 0000000..ffe5dfe
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/SpinningBox.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+    <script src="js/khronos/webgl-utils.js"></script>
+    <script src="js/khronos/webgl-debug.js"></script>
+    <script src="js/khronos/J3DI.js"></script>
+    <script src="js/khronos/J3DIMath.js"></script>
+    <script id="vshader" type="x-shader/x-vertex">
+        uniform mat4 u_modelViewProjMatrix;
+        uniform mat4 u_normalMatrix;
+        uniform vec3 lightDir;
+
+        attribute vec3 vNormal;
+        attribute vec4 vColor;
+        attribute vec4 vPosition;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_Position = u_modelViewProjMatrix * vPosition;
+        v_Color = vColor;
+        vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
+        v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
+        }
+    </script>
+    <script id="fshader" type="x-shader/x-fragment">
+        precision mediump float;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_FragColor = vec4(v_Color.xyz * v_Dot, v_Color.a);
+        }
+    </script>
+</head>
+<body>
+<div data-role="header">
+    <h1 id="main_page_title"></h1>
+</div>
+<div data-role= "content">
+    <div id="viewArea">
+        <div id="mainTester">
+            <canvas id="canvas" width="330" height="300">
+                Not support the &lt;canvas&gt;&gt; element. Ouch! failed!
+            </canvas>
+        </div>
+    </div>
+    <div class="containing-element">
+        <label for="flip-1">Status</label>
+        <select name="flip-1" id="flip-1" data-role="slider">
+            <option value="paused">Pause</option>
+            <option value="running" selected>Play</option>
+        </select>
+        <fieldset data-role="controlgroup" data-type="horizontal">
+            <legend>Direction</legend>
+            <input type="radio" name="radio-choice-2" id="direction-1" value="right" checked="checked" />
+            <label for="direction-1">To-Right</label>
+            <input type="radio" name="radio-choice-2" id="direction-2" value="left" />
+            <label for="direction-2">To-Left</label>
+        </fieldset>
+        <label for="slider-1">Size</label>
+        <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="1" max="5" value="3" data-show-value="true" class="hideButton">
+        <label for="speed-1">Speed</label>
+        <input type="range" name="speed-1" id="speed-1" data-highlight="true" min="1" max="10" value="5" data-show-value="true" class="hideButton">
+    </div>
+</div>
+<div data-role="footer" data-position="fixed">
+</div>
+<div data-role="popup" id="popup_info">
+  <font class="fontSize">
+    <p>Test Purpose: </p>
+    <p>Verifies the 3D cube is drawn with red, yellow, blue, green and light blue colors, rotate smoothly and correctly. And tests the functionality of play and pause, rotate direction left or right, size of the cube from 1 to 5, rotate speed from 1 to 10 levels.</p>
+    <p>Test Step: </p>
+    <ol>
+      <li>Click the "Status" slider to play or pause the animation.</li>
+      <li>Click the "Direction" buttons to change the rotation direction.</li>
+      <li>Click the "Size" slider to change the animation size.</li>
+      <li>Click the "Speed" slider to change the rotation speed.</li>
+    </ol>
+    <p>Expected Result: </p>
+    <p>Test passes if all the check points work well during rotation.</p>
+  </font>
+</div>
+</body>
+</html>
diff --git a/ivi/tests/2D3DAnimation/js/COPYING b/ivi/tests/2D3DAnimation/js/COPYING
new file mode 100644 (file)
index 0000000..c009395
--- /dev/null
@@ -0,0 +1,94 @@
+The SpinningBox.js comes from
+https://github.com/KhronosGroup/WebGL
+with some modifications.
+
++    var incAngle = 0;
++    var currentAngle = 0;
++    var bakAngle = 0;
++    var viewDistance = 18;
++    var requestId;
++    var canvas;
+
+     function reshape(gl)
+     {
+-        var canvas = document.getElementById('example');
++        var canvas = document.getElementById('canvas');
+-        var windowWidth = window.innerWidth - 20;
+-        var windowHeight = window.innerHeight - 40;
+-        if (windowWidth == width && windowHeight == height)
+-            return;
+
+-        width = windowWidth;
+-        height = windowHeight;
+-        canvas.width = width;
+-        canvas.height = height;
+
+-        gl.viewport(0, 0, width, height);
++        gl.viewport(0, 0, canvas.width, canvas.height);
+         g.perspectiveMatrix = new J3DIMatrix4();
+-        g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
++        g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+-        g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
++        g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+
+The jquery extension code of main.js(line 251~376) comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
++            setSize(value);
++            if (parseInt(newValue, 10) != 3) {
++                testFlag.size = true;
++                checkEnable();
++            }
++        } else if (ID == "speed-1") {
++            setSpeed(parseInt(newValue, 10));
++            if (parseInt(newValue, 10) != 5) {
++                testFlag.speed = true;
++                checkEnable();
++            }
++        } else if (ID == "flip-1") {
++            if (newValue == "0") {
++                stop();
++                $("input[type='radio']").checkboxradio('disable');
++                $("#slider-1").slider('disable');
++                $("#speed-1").slider('disable');
++                testFlag.status = true;
++                checkEnable();
++            } else if (newValue == "1"){
++                if (!isInit) {
++                    reStart();
++                    $("input[type='radio']").checkboxradio('enable');
++                    $("#slider-1").slider('enable');
++                    $("#speed-1").slider('enable');
++                } else {
++                    isInit = false;
++                }
++            }
++        }
+
+        if ( o.popupEnabled ) {
+            this._positionPopup();
+-           this._popup.html( newValue );
++           this._popup.html( Math.round(newValue) );
+        }
+
+        if ( o.showValue ) {
+-           this._handleText.html( newValue );
++           this._handleText.html( Math.round(newValue) );
+        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
+
diff --git a/ivi/tests/2D3DAnimation/js/SpinningBox.js b/ivi/tests/2D3DAnimation/js/SpinningBox.js
new file mode 100644 (file)
index 0000000..7494f86
--- /dev/null
@@ -0,0 +1,141 @@
+var g = {}; // globals
+
+var incAngle = 0;
+var currentAngle = 0;
+var bakAngle = 0;
+var viewDistance = 18;
+var requestId;
+
+var canvas;
+
+
+function init() {
+    // Initialize
+    var gl = initWebGL(
+        // The id of the Canvas Element
+        "canvas");
+    if (!gl) {
+        return;
+    }
+
+    g.program = simpleSetup(
+        gl,
+        // The ids of the vertex and fragment shaders
+        "vshader", "fshader",
+        // The vertex attribute names used by the shaders.
+        // The order they appear here corresponds to their index
+        // used later.
+        [ "vNormal", "vColor", "vPosition"],
+        // The clear color and depth values
+        [ 0, 0, 0, 1 ], 10000);
+
+    // Set up a uniform variable for the shaders
+    gl.uniform3f(gl.getUniformLocation(g.program, "lightDir"), 0, 0, 1);
+
+    // Create a box. On return 'gl' contains a 'box' property with
+    // the BufferObjects containing the arrays for vertices,
+    // normals, texture coords, and indices.
+    g.box = makeBox(gl);
+
+    // Set up the array of colors for the cube's faces
+    var colors = new Uint8Array(
+        [  0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,     // v0-v1-v2-v3 front
+        1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,     // v0-v3-v4-v5 right
+        0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,     // v0-v5-v6-v1 top
+        1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,     // v1-v6-v7-v2 left
+        1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,     // v7-v4-v3-v2 bottom
+        0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1 ]    // v4-v7-v6-v5 back
+        );
+
+    // Set up the vertex buffer for the colors
+    g.box.colorObject = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+
+    // Create some matrices to use later and save their locations in the shaders
+    g.mvMatrix = new J3DIMatrix4();
+    g.u_normalMatrixLoc = gl.getUniformLocation(g.program, "u_normalMatrix");
+    g.normalMatrix = new J3DIMatrix4();
+    g.u_modelViewProjMatrixLoc =
+    gl.getUniformLocation(g.program, "u_modelViewProjMatrix");
+    g.mvpMatrix = new J3DIMatrix4();
+
+    // Enable all of the vertex attribute arrays.
+    gl.enableVertexAttribArray(0);
+    gl.enableVertexAttribArray(1);
+    gl.enableVertexAttribArray(2);
+
+    // Set up all the vertex attributes for vertices, normals and colors
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.vertexObject);
+    gl.vertexAttribPointer(2, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.normalObject);
+    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, false, 0, 0);
+
+    // Bind the index array
+    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g.box.indexObject);
+
+    return gl;
+}
+
+//width = -1;
+//height = -1;
+//var requestId;
+
+function reshape(gl) {
+    //var canvas = document.getElementById('example');
+    var canvas = document.getElementById('canvas');
+    //var windowWidth = window.innerWidth - 20;
+    //var windowHeight = window.innerHeight - 40;
+    //if (windowWidth == width && windowHeight == height)
+    //    return;
+
+    //width = windowWidth;
+    //height = windowHeight;
+    //canvas.width = width;
+    //canvas.height = height;
+
+    // Set the viewport and projection matrix for the scene
+    //gl.viewport(0, 0, width, height);
+    gl.viewport(0, 0, canvas.width, canvas.height);
+    g.perspectiveMatrix = new J3DIMatrix4();
+    //g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
+    g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+    //g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
+    g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+}
+
+function drawPicture(gl) {
+    // Make sure the canvas is sized correctly.
+    reshape(gl);
+
+    gl.clearColor(1.0, 1.0, 1.0, 1.0);
+    // Clear the canvas
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+    // Make a model/view matrix.
+    g.mvMatrix.makeIdentity();
+    g.mvMatrix.rotate(20, 1, 0, 0);
+    g.mvMatrix.rotate(currentAngle, 0, 1, 0);
+
+    // Construct the normal matrix from the model-view matrix and pass it in
+    g.normalMatrix.load(g.mvMatrix);
+    g.normalMatrix.invert();
+    g.normalMatrix.transpose();
+    g.normalMatrix.setUniform(gl, g.u_normalMatrixLoc, false);
+
+    // Construct the model-view * projection matrix and pass it in
+    g.mvpMatrix.load(g.perspectiveMatrix);
+    g.mvpMatrix.multiply(g.mvMatrix);
+    g.mvpMatrix.setUniform(gl, g.u_modelViewProjMatrixLoc, false);
+
+    // Draw the cube
+    gl.drawElements(gl.TRIANGLES, g.box.numIndices, gl.UNSIGNED_BYTE, 0);
+
+    currentAngle += incAngle;
+    if (currentAngle > 360)
+    currentAngle -= 360;
+}
diff --git a/ivi/tests/2D3DAnimation/js/khronos/COPYING b/ivi/tests/2D3DAnimation/js/khronos/COPYING
new file mode 100644 (file)
index 0000000..5b85dfd
--- /dev/null
@@ -0,0 +1,26 @@
+The files come from https://www.khronos.org/registry/webgl/sdk/demos/webkit/resources/
+
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/ivi/tests/2D3DAnimation/js/khronos/J3DI.js b/ivi/tests/2D3DAnimation/js/khronos/J3DI.js
new file mode 100644 (file)
index 0000000..597417b
--- /dev/null
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+//
+// initWebGL
+//
+// Initialize the Canvas element with the passed name as a WebGL object and return the
+// WebGLRenderingContext.
+function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    var canvas = document.getElementById(canvasName);
+    return gl = WebGLUtils.setupWebGL(canvas);
+}
+
+function log(msg) {
+    if (window.console && window.console.log) {
+        window.console.log(msg);
+    }
+}
+
+// Load shaders with the passed names and create a program with them. Return this program
+// in the 'program' property of the returned context.
+//
+// For each string in the passed attribs array, bind an attrib with that name at that index.
+// Once the attribs are bound, link the program and then use it.
+//
+// Set the clear color to the passed array (4 values) and set the clear depth to the passed value.
+// Enable depth testing and blending with a blend func of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA)
+//
+// A console function is added to the context: console(string). This can be replaced
+// by the caller. By default, it maps to the window.console() function on WebKit and to
+// an empty function on other browsers.
+//
+function simpleSetup(gl, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    // create our shaders
+    var vertexShader = loadShader(gl, vshader);
+    var fragmentShader = loadShader(gl, fshader);
+
+    // Create the program object
+    var program = gl.createProgram();
+
+    // Attach our two shaders to the program
+    gl.attachShader (program, vertexShader);
+    gl.attachShader (program, fragmentShader);
+
+    // Bind attributes
+    for (var i = 0; i < attribs.length; ++i)
+        gl.bindAttribLocation (program, i, attribs[i]);
+
+    // Link the program
+    gl.linkProgram(program);
+
+    // Check the link status
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked && !gl.isContextLost()) {
+        // something went wrong with the link
+        var error = gl.getProgramInfoLog (program);
+        log("Error in program linking:"+error);
+
+        gl.deleteProgram(program);
+        gl.deleteProgram(fragmentShader);
+        gl.deleteProgram(vertexShader);
+
+        return null;
+    }
+
+    gl.useProgram(program);
+
+    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
+    gl.clearDepth(clearDepth);
+
+    gl.enable(gl.DEPTH_TEST);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+    return program;
+}
+
+//
+// loadShader
+//
+// 'shaderId' is the id of a <script> element containing the shader source string.
+// Load this shader and return the WebGLShader object corresponding to it.
+//
+function loadShader(ctx, shaderId)
+{
+    var shaderScript = document.getElementById(shaderId);
+    if (!shaderScript) {
+        log("*** Error: shader script '"+shaderId+"' not found");
+        return null;
+    }
+
+    if (shaderScript.type == "x-shader/x-vertex")
+        var shaderType = ctx.VERTEX_SHADER;
+    else if (shaderScript.type == "x-shader/x-fragment")
+        var shaderType = ctx.FRAGMENT_SHADER;
+    else {
+        log("*** Error: shader script '"+shaderId+"' of undefined type '"+shaderScript.type+"'");
+        return null;
+    }
+
+    // Create the shader object
+    var shader = ctx.createShader(shaderType);
+
+    // Load the shader source
+    ctx.shaderSource(shader, shaderScript.text);
+
+    // Compile the shader
+    ctx.compileShader(shader);
+
+    // Check the compile status
+    var compiled = ctx.getShaderParameter(shader, ctx.COMPILE_STATUS);
+    if (!compiled && !ctx.isContextLost()) {
+        // Something went wrong during compilation; get the error
+        var error = ctx.getShaderInfoLog(shader);
+        log("*** Error compiling shader '"+shaderId+"':"+error);
+        ctx.deleteShader(shader);
+        return null;
+    }
+
+    return shader;
+}
+
+//
+// makeBox
+//
+// Create a box with vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeBox(ctx)
+{
+    // box
+    //    v6----- v5
+    //   /|      /|
+    //  v1------v0|
+    //  | |     | |
+    //  | |v7---|-|v4
+    //  |/      |/
+    //  v2------v3
+    //
+    // vertex coords array
+    var vertices = new Float32Array(
+        [  1, 1, 1,  -1, 1, 1,  -1,-1, 1,   1,-1, 1,    // v0-v1-v2-v3 front
+           1, 1, 1,   1,-1, 1,   1,-1,-1,   1, 1,-1,    // v0-v3-v4-v5 right
+           1, 1, 1,   1, 1,-1,  -1, 1,-1,  -1, 1, 1,    // v0-v5-v6-v1 top
+          -1, 1, 1,  -1, 1,-1,  -1,-1,-1,  -1,-1, 1,    // v1-v6-v7-v2 left
+          -1,-1,-1,   1,-1,-1,   1,-1, 1,  -1,-1, 1,    // v7-v4-v3-v2 bottom
+           1,-1,-1,  -1,-1,-1,  -1, 1,-1,   1, 1,-1 ]   // v4-v7-v6-v5 back
+    );
+
+    // normal array
+    var normals = new Float32Array(
+        [  0, 0, 1,   0, 0, 1,   0, 0, 1,   0, 0, 1,     // v0-v1-v2-v3 front
+           1, 0, 0,   1, 0, 0,   1, 0, 0,   1, 0, 0,     // v0-v3-v4-v5 right
+           0, 1, 0,   0, 1, 0,   0, 1, 0,   0, 1, 0,     // v0-v5-v6-v1 top
+          -1, 0, 0,  -1, 0, 0,  -1, 0, 0,  -1, 0, 0,     // v1-v6-v7-v2 left
+           0,-1, 0,   0,-1, 0,   0,-1, 0,   0,-1, 0,     // v7-v4-v3-v2 bottom
+           0, 0,-1,   0, 0,-1,   0, 0,-1,   0, 0,-1 ]    // v4-v7-v6-v5 back
+       );
+
+
+    // texCoord array
+    var texCoords = new Float32Array(
+        [  1, 1,   0, 1,   0, 0,   1, 0,    // v0-v1-v2-v3 front
+           0, 1,   0, 0,   1, 0,   1, 1,    // v0-v3-v4-v5 right
+           1, 0,   1, 1,   0, 1,   0, 0,    // v0-v5-v6-v1 top
+           1, 1,   0, 1,   0, 0,   1, 0,    // v1-v6-v7-v2 left
+           0, 0,   1, 0,   1, 1,   0, 1,    // v7-v4-v3-v2 bottom
+           0, 0,   1, 0,   1, 1,   0, 1 ]   // v4-v7-v6-v5 back
+       );
+
+    // index array
+    var indices = new Uint8Array(
+        [  0, 1, 2,   0, 2, 3,    // front
+           4, 5, 6,   4, 6, 7,    // right
+           8, 9,10,   8,10,11,    // top
+          12,13,14,  12,14,15,    // left
+          16,17,18,  16,18,19,    // bottom
+          20,21,22,  20,22,23 ]   // back
+      );
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, normals, ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, texCoords, ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, vertices, ctx.STATIC_DRAW);
+
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, indices, ctx.STATIC_DRAW);
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+
+    retval.numIndices = indices.length;
+
+    return retval;
+}
+
+//
+// makeSphere
+//
+// Create a sphere with the passed number of latitude and longitude bands and the passed radius.
+// Sphere has vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeSphere(ctx, radius, lats, longs)
+{
+    var geometryData = [ ];
+    var normalData = [ ];
+    var texCoordData = [ ];
+    var indexData = [ ];
+
+    for (var latNumber = 0; latNumber <= lats; ++latNumber) {
+        for (var longNumber = 0; longNumber <= longs; ++longNumber) {
+            var theta = latNumber * Math.PI / lats;
+            var phi = longNumber * 2 * Math.PI / longs;
+            var sinTheta = Math.sin(theta);
+            var sinPhi = Math.sin(phi);
+            var cosTheta = Math.cos(theta);
+            var cosPhi = Math.cos(phi);
+
+            var x = cosPhi * sinTheta;
+            var y = cosTheta;
+            var z = sinPhi * sinTheta;
+            var u = 1-(longNumber/longs);
+            var v = latNumber/lats;
+
+            normalData.push(x);
+            normalData.push(y);
+            normalData.push(z);
+            texCoordData.push(u);
+            texCoordData.push(v);
+            geometryData.push(radius * x);
+            geometryData.push(radius * y);
+            geometryData.push(radius * z);
+        }
+    }
+
+    for (var latNumber = 0; latNumber < lats; ++latNumber) {
+        for (var longNumber = 0; longNumber < longs; ++longNumber) {
+            var first = (latNumber * (longs+1)) + longNumber;
+            var second = first + longs + 1;
+            indexData.push(first);
+            indexData.push(second);
+            indexData.push(first+1);
+
+            indexData.push(second);
+            indexData.push(second+1);
+            indexData.push(first+1);
+        }
+    }
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
+
+    retval.numIndices = indexData.length;
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
+
+    return retval;
+}
+
+// Array of Objects curently loading
+var g_loadingObjects = [];
+
+// Clears all the Objects currently loading.
+// This is used to handle context lost events.
+function clearLoadingObjects() {
+    for (var ii = 0; ii < g_loadingObjects.length; ++ii) {
+        g_loadingObjects[ii].onreadystatechange = undefined;
+    }
+    g_loadingObjects = [];
+}
+
+//
+// loadObj
+//
+// Load a .obj file from the passed URL. Return an object with a 'loaded' property set to false.
+// When the object load is complete, the 'loaded' property becomes true and the following
+// properties are set:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function loadObj(ctx, url)
+{
+    var obj = { loaded : false };
+    obj.ctx = ctx;
+    var req = new XMLHttpRequest();
+    req.obj = obj;
+    g_loadingObjects.push(req);
+    req.onreadystatechange = function () { processLoadObj(req) };
+    req.open("GET", url, true);
+    req.send(null);
+    return obj;
+}
+
+function processLoadObj(req)
+{
+    log("req="+req)
+    // only if req shows "complete"
+    if (req.readyState == 4) {
+        g_loadingObjects.splice(g_loadingObjects.indexOf(req), 1);
+        doLoadObj(req.obj, req.responseText);
+    }
+}
+
+function doLoadObj(obj, text)
+{
+    vertexArray = [ ];
+    normalArray = [ ];
+    textureArray = [ ];
+    indexArray = [ ];
+
+    var vertex = [ ];
+    var normal = [ ];
+    var texture = [ ];
+    var facemap = { };
+    var index = 0;
+
+    // This is a map which associates a range of indices with a name
+    // The name comes from the 'g' tag (of the form "g NAME"). Indices
+    // are part of one group until another 'g' tag is seen. If any indices
+    // come before a 'g' tag, it is given the group name "_unnamed"
+    // 'group' is an object whose property names are the group name and
+    // whose value is a 2 element array with [<first index>, <num indices>]
+    var groups = { };
+    var currentGroup = [-1, 0];
+    groups["_unnamed"] = currentGroup;
+
+    var lines = text.split("\n");
+    for (var lineIndex in lines) {
+        var line = lines[lineIndex].replace(/[ \t]+/g, " ").replace(/\s\s*$/, "");
+
+        // ignore comments
+        if (line[0] == "#")
+            continue;
+
+        var array = line.split(" ");
+        if (array[0] == "g") {
+            // new group
+            currentGroup = [indexArray.length, 0];
+            groups[array[1]] = currentGroup;
+        }
+        else if (array[0] == "v") {
+            // vertex
+            vertex.push(parseFloat(array[1]));
+            vertex.push(parseFloat(array[2]));
+            vertex.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "vt") {
+            // normal
+            texture.push(parseFloat(array[1]));
+            texture.push(parseFloat(array[2]));
+        }
+        else if (array[0] == "vn") {
+            // normal
+            normal.push(parseFloat(array[1]));
+            normal.push(parseFloat(array[2]));
+            normal.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "f") {
+            // face
+            if (array.length != 4) {
+                log("*** Error: face '"+line+"' not handled");
+                continue;
+            }
+
+            for (var i = 1; i < 4; ++i) {
+                if (!(array[i] in facemap)) {
+                    // add a new entry to the map and arrays
+                    var f = array[i].split("/");
+                    var vtx, nor, tex;
+
+                    if (f.length == 1) {
+                        vtx = parseInt(f[0]) - 1;
+                        nor = vtx;
+                        tex = vtx;
+                    }
+                    else if (f.length = 3) {
+                        vtx = parseInt(f[0]) - 1;
+                        tex = parseInt(f[1]) - 1;
+                        nor = parseInt(f[2]) - 1;
+                    }
+                    else {
+                        obj.ctx.console.log("*** Error: did not understand face '"+array[i]+"'");
+                        return null;
+                    }
+
+                    // do the vertices
+                    var x = 0;
+                    var y = 0;
+                    var z = 0;
+                    if (vtx * 3 + 2 < vertex.length) {
+                        x = vertex[vtx*3];
+                        y = vertex[vtx*3+1];
+                        z = vertex[vtx*3+2];
+                    }
+                    vertexArray.push(x);
+                    vertexArray.push(y);
+                    vertexArray.push(z);
+
+                    // do the textures
+                    x = 0;
+                    y = 0;
+                    if (tex * 2 + 1 < texture.length) {
+                        x = texture[tex*2];
+                        y = texture[tex*2+1];
+                    }
+                    textureArray.push(x);
+                    textureArray.push(y);
+
+                    // do the normals
+                    x = 0;
+                    y = 0;
+                    z = 1;
+                    if (nor * 3 + 2 < normal.length) {
+                        x = normal[nor*3];
+                        y = normal[nor*3+1];
+                        z = normal[nor*3+2];
+                    }
+                    normalArray.push(x);
+                    normalArray.push(y);
+                    normalArray.push(z);
+
+                    facemap[array[i]] = index++;
+                }
+
+                indexArray.push(facemap[array[i]]);
+                currentGroup[1]++;
+            }
+        }
+    }
+
+    // set the VBOs
+    obj.normalObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.normalObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(normalArray), obj.ctx.STATIC_DRAW);
+
+    obj.texCoordObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.texCoordObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(textureArray), obj.ctx.STATIC_DRAW);
+
+    obj.vertexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.vertexObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(vertexArray), obj.ctx.STATIC_DRAW);
+
+    obj.numIndices = indexArray.length;
+    obj.indexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ELEMENT_ARRAY_BUFFER, obj.indexObject);
+    obj.ctx.bufferData(obj.ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexArray), obj.ctx.STREAM_DRAW);
+
+    obj.groups = groups;
+
+    obj.loaded = true;
+}
+
+// Array of images curently loading
+var g_loadingImages = [];
+
+// Clears all the images currently loading.
+// This is used to handle context lost events.
+function clearLoadingImages() {
+    for (var ii = 0; ii < g_loadingImages.length; ++ii) {
+        g_loadingImages[ii].onload = undefined;
+    }
+    g_loadingImages = [];
+}
+
+//
+// loadImageTexture
+//
+// Load the image at the passed url, place it in a new WebGLTexture object and return the WebGLTexture.
+//
+function loadImageTexture(ctx, url)
+{
+    var texture = ctx.createTexture();
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(ctx.TEXTURE_2D, 0, ctx.RGBA, 1, 1, 0, ctx.RGBA, ctx.UNSIGNED_BYTE, null);
+    var image = new Image();
+    g_loadingImages.push(image);
+    image.onload = function() { doLoadImageTexture(ctx, image, texture) }
+    image.src = url;
+    return texture;
+}
+
+function doLoadImageTexture(ctx, image, texture)
+{
+    g_loadingImages.splice(g_loadingImages.indexOf(image), 1);
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(
+        ctx.TEXTURE_2D, 0, ctx.RGBA, ctx.RGBA, ctx.UNSIGNED_BYTE, image);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MAG_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MIN_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.CLAMP_TO_EDGE);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.CLAMP_TO_EDGE);
+    //ctx.generateMipmap(ctx.TEXTURE_2D)
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+}
+
+//
+// Framerate object
+//
+// This object keeps track of framerate and displays it as the innerHTML text of the
+// HTML element with the passed id. Once created you call snapshot at the end
+// of every rendering cycle. Every 500ms the framerate is updated in the HTML element.
+//
+Framerate = function(id)
+{
+    this.numFramerates = 10;
+    this.framerateUpdateInterval = 500;
+    this.id = id;
+
+    this.renderTime = -1;
+    this.framerates = [ ];
+    self = this;
+    var fr = function() { self.updateFramerate() }
+    setInterval(fr, this.framerateUpdateInterval);
+}
+
+Framerate.prototype.updateFramerate = function()
+{
+    var tot = 0;
+    for (var i = 0; i < this.framerates.length; ++i)
+        tot += this.framerates[i];
+
+    var framerate = tot / this.framerates.length;
+    framerate = Math.round(framerate);
+    document.getElementById(this.id).innerHTML = "Framerate:"+framerate+"fps";
+}
+
+Framerate.prototype.snapshot = function()
+{
+    if (this.renderTime < 0)
+        this.renderTime = new Date().getTime();
+    else {
+        var newTime = new Date().getTime();
+        var t = newTime - this.renderTime;
+        if (t == 0)
+            return;
+        var framerate = 1000/t;
+        this.framerates.push(framerate);
+        while (this.framerates.length > this.numFramerates)
+            this.framerates.shift();
+        this.renderTime = newTime;
+    }
+}
diff --git a/ivi/tests/2D3DAnimation/js/khronos/J3DIMath.js b/ivi/tests/2D3DAnimation/js/khronos/J3DIMath.js
new file mode 100644 (file)
index 0000000..b3e5b64
--- /dev/null
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ // J3DI (Jedi) - A support library for WebGL.
+
+/*
+    J3DI Math Classes. Currently includes:
+
+        J3DIMatrix4 - A 4x4 Matrix
+*/
+
+/*
+    J3DIMatrix4 class
+
+    This class implements a 4x4 matrix. It has functions which duplicate the
+    functionality of the OpenGL matrix stack and glut functions. On browsers
+    that support it, CSSMatrix is used to accelerate operations.
+
+    IDL:
+
+    [
+        Constructor(in J3DIMatrix4 matrix),                 // copy passed matrix into new J3DIMatrix4
+        Constructor(in sequence<float> array)               // create new J3DIMatrix4 with 16 floats (row major)
+        Constructor()                                       // create new J3DIMatrix4 with identity matrix
+    ]
+    interface J3DIMatrix4 {
+        void load(in J3DIMatrix4 matrix);                   // copy the values from the passed matrix
+        void load(in sequence<float> array);                // copy 16 floats into the matrix
+        sequence<float> getAsArray();                       // return the matrix as an array of 16 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void setUniform(in WebGLRenderingContext ctx,       // Send the matrix to the passed uniform location in the passed context
+                        in WebGLUniformLocation loc,
+                        in boolean transpose);
+        void makeIdentity();                                // replace the matrix with identity
+        void transpose();                                   // replace the matrix with its transpose
+        void invert();                                      // replace the matrix with its inverse
+
+        void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right
+        void translate(in J3DVector3 v);                    // multiply the matrix by passed translation values on the right
+        void scale(in float x, in float y, in float z);     // multiply the matrix by passed scale values on the right
+        void scale(in J3DVector3 v);                        // multiply the matrix by passed scale values on the right
+        void rotate(in float angle,                         // multiply the matrix by passed rotation values on the right
+                    in float x, in float y, in float z);    // (angle is in degrees)
+        void rotate(in float angle, in J3DVector3 v);       // multiply the matrix by passed rotation values on the right
+                                                            // (angle is in degrees)
+        void multiply(in CanvasMatrix matrix);              // multiply the matrix by the passed matrix on the right
+        void divide(in float divisor);                      // divide the matrix by the passed divisor
+        void ortho(in float left, in float right,           // multiply the matrix by the passed ortho values on the right
+                   in float bottom, in float top,
+                   in float near, in float far);
+        void frustum(in float left, in float right,         // multiply the matrix by the passed frustum values on the right
+                     in float bottom, in float top,
+                     in float near, in float far);
+        void perspective(in float fovy, in float aspect,    // multiply the matrix by the passed perspective values on the right
+                         in float zNear, in float zFar);
+        void lookat(in J3DVector3 eye,                      // multiply the matrix by the passed lookat
+                in J3DVector3 center,  in J3DVector3 up);   // values on the right
+         bool decompose(in J3DVector3 translate,            // decompose the matrix into the passed vector
+                        in J3DVector3 rotate,
+                        in J3DVector3 scale,
+                        in J3DVector3 skew,
+                        in sequence<float> perspective);
+    }
+
+    [
+        Constructor(in J3DVector3 vector),                  // copy passed vector into new J3DVector3
+        Constructor(in sequence<float> array)               // create new J3DVector3 with 3 floats from array
+        Constructor(in float x, in float y, in float z)     // create new J3DVector3 with 3 floats
+        Constructor()                                       // create new J3DVector3 with (0,0,0)
+    ]
+    interface J3DVector3 {
+        void load(in J3DVector3 vector);                    // copy the values from the passed vector
+        void load(in sequence<float> array);                // copy 3 floats into the vector from array
+        void load(in float x, in float y, in float z);      // copy 3 floats into the vector
+        sequence<float> getAsArray();                       // return the vector as an array of 3 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void multMatrix(in J3DIMatrix4 matrix);             // multiply the vector by the passed matrix (on the right)
+        float vectorLength();                               // return the length of the vector
+        float dot();                                        // return the dot product of the vector
+        void cross(in J3DVector3 v);                        // replace the vector with vector x v
+        void divide(in float divisor);                      // divide the vector by the passed divisor
+    }
+*/
+
+J3DIHasCSSMatrix = false;
+J3DIHasCSSMatrixCopy = false;
+/*
+if ("WebKitCSSMatrix" in window && ("media" in window && window.media.matchMedium("(-webkit-transform-3d)")) ||
+                                   ("styleMedia" in window && window.styleMedia.matchMedium("(-webkit-transform-3d)"))) {
+    J3DIHasCSSMatrix = true;
+    if ("copy" in WebKitCSSMatrix.prototype)
+        J3DIHasCSSMatrixCopy = true;
+}
+*/
+
+//  console.log("J3DIHasCSSMatrix="+J3DIHasCSSMatrix);
+//  console.log("J3DIHasCSSMatrixCopy="+J3DIHasCSSMatrixCopy);
+
+//
+// J3DIMatrix4
+//
+J3DIMatrix4 = function(m)
+{
+    if (J3DIHasCSSMatrix)
+        this.$matrix = new WebKitCSSMatrix;
+    else
+        this.$matrix = new Object;
+
+    if (typeof m == 'object') {
+        if ("length" in m && m.length >= 16) {
+            this.load(m);
+            return;
+        }
+        else if (m instanceof J3DIMatrix4) {
+            this.load(m);
+            return;
+        }
+    }
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.load = function()
+{
+    if (arguments.length == 1 && typeof arguments[0] == 'object') {
+        var matrix;
+
+        if (arguments[0] instanceof J3DIMatrix4) {
+            matrix = arguments[0].$matrix;
+
+            this.$matrix.m11 = matrix.m11;
+            this.$matrix.m12 = matrix.m12;
+            this.$matrix.m13 = matrix.m13;
+            this.$matrix.m14 = matrix.m14;
+
+            this.$matrix.m21 = matrix.m21;
+            this.$matrix.m22 = matrix.m22;
+            this.$matrix.m23 = matrix.m23;
+            this.$matrix.m24 = matrix.m24;
+
+            this.$matrix.m31 = matrix.m31;
+            this.$matrix.m32 = matrix.m32;
+            this.$matrix.m33 = matrix.m33;
+            this.$matrix.m34 = matrix.m34;
+
+            this.$matrix.m41 = matrix.m41;
+            this.$matrix.m42 = matrix.m42;
+            this.$matrix.m43 = matrix.m43;
+            this.$matrix.m44 = matrix.m44;
+            return;
+        }
+        else
+            matrix = arguments[0];
+
+        if ("length" in matrix && matrix.length >= 16) {
+            this.$matrix.m11 = matrix[0];
+            this.$matrix.m12 = matrix[1];
+            this.$matrix.m13 = matrix[2];
+            this.$matrix.m14 = matrix[3];
+
+            this.$matrix.m21 = matrix[4];
+            this.$matrix.m22 = matrix[5];
+            this.$matrix.m23 = matrix[6];
+            this.$matrix.m24 = matrix[7];
+
+            this.$matrix.m31 = matrix[8];
+            this.$matrix.m32 = matrix[9];
+            this.$matrix.m33 = matrix[10];
+            this.$matrix.m34 = matrix[11];
+
+            this.$matrix.m41 = matrix[12];
+            this.$matrix.m42 = matrix[13];
+            this.$matrix.m43 = matrix[14];
+            this.$matrix.m44 = matrix[15];
+            return;
+        }
+    }
+
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.getAsArray = function()
+{
+    return [
+        this.$matrix.m11, this.$matrix.m12, this.$matrix.m13, this.$matrix.m14,
+        this.$matrix.m21, this.$matrix.m22, this.$matrix.m23, this.$matrix.m24,
+        this.$matrix.m31, this.$matrix.m32, this.$matrix.m33, this.$matrix.m34,
+        this.$matrix.m41, this.$matrix.m42, this.$matrix.m43, this.$matrix.m44
+    ];
+}
+
+J3DIMatrix4.prototype.getAsFloat32Array = function()
+{
+    if (J3DIHasCSSMatrixCopy) {
+        var array = new Float32Array(16);
+        this.$matrix.copy(array);
+        return array;
+    }
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIMatrix4.prototype.setUniform = function(ctx, loc, transpose)
+{
+    if (J3DIMatrix4.setUniformArray == undefined) {
+        J3DIMatrix4.setUniformWebGLArray = new Float32Array(16);
+        J3DIMatrix4.setUniformArray = new Array(16);
+    }
+
+    if (J3DIHasCSSMatrixCopy)
+        this.$matrix.copy(J3DIMatrix4.setUniformWebGLArray);
+    else {
+        J3DIMatrix4.setUniformArray[0] = this.$matrix.m11;
+        J3DIMatrix4.setUniformArray[1] = this.$matrix.m12;
+        J3DIMatrix4.setUniformArray[2] = this.$matrix.m13;
+        J3DIMatrix4.setUniformArray[3] = this.$matrix.m14;
+        J3DIMatrix4.setUniformArray[4] = this.$matrix.m21;
+        J3DIMatrix4.setUniformArray[5] = this.$matrix.m22;
+        J3DIMatrix4.setUniformArray[6] = this.$matrix.m23;
+        J3DIMatrix4.setUniformArray[7] = this.$matrix.m24;
+        J3DIMatrix4.setUniformArray[8] = this.$matrix.m31;
+        J3DIMatrix4.setUniformArray[9] = this.$matrix.m32;
+        J3DIMatrix4.setUniformArray[10] = this.$matrix.m33;
+        J3DIMatrix4.setUniformArray[11] = this.$matrix.m34;
+        J3DIMatrix4.setUniformArray[12] = this.$matrix.m41;
+        J3DIMatrix4.setUniformArray[13] = this.$matrix.m42;
+        J3DIMatrix4.setUniformArray[14] = this.$matrix.m43;
+        J3DIMatrix4.setUniformArray[15] = this.$matrix.m44;
+
+        J3DIMatrix4.setUniformWebGLArray.set(J3DIMatrix4.setUniformArray);
+    }
+
+    ctx.uniformMatrix4fv(loc, transpose, J3DIMatrix4.setUniformWebGLArray);
+}
+
+J3DIMatrix4.prototype.makeIdentity = function()
+{
+    this.$matrix.m11 = 1;
+    this.$matrix.m12 = 0;
+    this.$matrix.m13 = 0;
+    this.$matrix.m14 = 0;
+
+    this.$matrix.m21 = 0;
+    this.$matrix.m22 = 1;
+    this.$matrix.m23 = 0;
+    this.$matrix.m24 = 0;
+
+    this.$matrix.m31 = 0;
+    this.$matrix.m32 = 0;
+    this.$matrix.m33 = 1;
+    this.$matrix.m34 = 0;
+
+    this.$matrix.m41 = 0;
+    this.$matrix.m42 = 0;
+    this.$matrix.m43 = 0;
+    this.$matrix.m44 = 1;
+}
+
+J3DIMatrix4.prototype.transpose = function()
+{
+    var tmp = this.$matrix.m12;
+    this.$matrix.m12 = this.$matrix.m21;
+    this.$matrix.m21 = tmp;
+
+    tmp = this.$matrix.m13;
+    this.$matrix.m13 = this.$matrix.m31;
+    this.$matrix.m31 = tmp;
+
+    tmp = this.$matrix.m14;
+    this.$matrix.m14 = this.$matrix.m41;
+    this.$matrix.m41 = tmp;
+
+    tmp = this.$matrix.m23;
+    this.$matrix.m23 = this.$matrix.m32;
+    this.$matrix.m32 = tmp;
+
+    tmp = this.$matrix.m24;
+    this.$matrix.m24 = this.$matrix.m42;
+    this.$matrix.m42 = tmp;
+
+    tmp = this.$matrix.m34;
+    this.$matrix.m34 = this.$matrix.m43;
+    this.$matrix.m43 = tmp;
+}
+
+J3DIMatrix4.prototype.invert = function()
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.inverse();
+        return;
+    }
+
+    // Calculate the 4x4 determinant
+    // If the determinant is zero,
+    // then the inverse matrix is not unique.
+    var det = this._determinant4x4();
+
+    if (Math.abs(det) < 1e-8)
+        return null;
+
+    this._makeAdjoint();
+
+    // Scale the adjoint matrix to get the inverse
+    this.$matrix.m11 /= det;
+    this.$matrix.m12 /= det;
+    this.$matrix.m13 /= det;
+    this.$matrix.m14 /= det;
+
+    this.$matrix.m21 /= det;
+    this.$matrix.m22 /= det;
+    this.$matrix.m23 /= det;
+    this.$matrix.m24 /= det;
+
+    this.$matrix.m31 /= det;
+    this.$matrix.m32 /= det;
+    this.$matrix.m33 /= det;
+    this.$matrix.m34 /= det;
+
+    this.$matrix.m41 /= det;
+    this.$matrix.m42 /= det;
+    this.$matrix.m43 /= det;
+    this.$matrix.m44 /= det;
+}
+
+J3DIMatrix4.prototype.translate = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 0;
+        if (y == undefined)
+            y = 0;
+        if (z == undefined)
+            z = 0;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.translate(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m41 = x;
+    matrix.$matrix.m42 = y;
+    matrix.$matrix.m43 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.scale = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 1;
+        if (z == undefined) {
+            if (y == undefined) {
+                y = x;
+                z = x;
+            }
+            else
+                z = 1;
+        }
+        else if (y == undefined)
+            y = x;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.scale(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = x;
+    matrix.$matrix.m22 = y;
+    matrix.$matrix.m33 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.rotate = function(angle,x,y,z)
+{
+    // Forms are (angle, x,y,z), (angle,vector), (angleX, angleY, angleZ), (angle)
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (arguments.length == 1) {
+            x = 0;
+            y = 0;
+            z = 1;
+        }
+        else if (arguments.length == 3) {
+            this.rotate(angle, 1,0,0); // about X axis
+            this.rotate(x, 0,1,0); // about Y axis
+            this.rotate(y, 0,0,1); // about Z axis
+            return;
+        }
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.rotateAxisAngle(x, y, z, angle);
+        return;
+    }
+
+    // angles are in degrees. Switch to radians
+    angle = angle / 180 * Math.PI;
+
+    angle /= 2;
+    var sinA = Math.sin(angle);
+    var cosA = Math.cos(angle);
+    var sinA2 = sinA * sinA;
+
+    // normalize
+    var len = Math.sqrt(x * x + y * y + z * z);
+    if (len == 0) {
+        // bad vector, just use something reasonable
+        x = 0;
+        y = 0;
+        z = 1;
+    } else if (len != 1) {
+        x /= len;
+        y /= len;
+        z /= len;
+    }
+
+    var mat = new J3DIMatrix4();
+
+    // optimize case where axis is along major axis
+    if (x == 1 && y == 0 && z == 0) {
+        mat.$matrix.m11 = 1;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 2 * sinA * cosA;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = -2 * sinA * cosA;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 1 && z == 0) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = -2 * sinA * cosA;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 2 * sinA * cosA;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 0 && z == 1) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 2 * sinA * cosA;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = -2 * sinA * cosA;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else {
+        var x2 = x*x;
+        var y2 = y*y;
+        var z2 = z*z;
+
+        mat.$matrix.m11 = 1 - 2 * (y2 + z2) * sinA2;
+        mat.$matrix.m12 = 2 * (x * y * sinA2 + z * sinA * cosA);
+        mat.$matrix.m13 = 2 * (x * z * sinA2 - y * sinA * cosA);
+        mat.$matrix.m21 = 2 * (y * x * sinA2 - z * sinA * cosA);
+        mat.$matrix.m22 = 1 - 2 * (z2 + x2) * sinA2;
+        mat.$matrix.m23 = 2 * (y * z * sinA2 + x * sinA * cosA);
+        mat.$matrix.m31 = 2 * (z * x * sinA2 + y * sinA * cosA);
+        mat.$matrix.m32 = 2 * (z * y * sinA2 - x * sinA * cosA);
+        mat.$matrix.m33 = 1 - 2 * (x2 + y2) * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    }
+    this.multiply(mat);
+}
+
+J3DIMatrix4.prototype.multiply = function(mat)
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.multiply(mat.$matrix);
+        return;
+    }
+
+    var m11 = (mat.$matrix.m11 * this.$matrix.m11 + mat.$matrix.m12 * this.$matrix.m21
+               + mat.$matrix.m13 * this.$matrix.m31 + mat.$matrix.m14 * this.$matrix.m41);
+    var m12 = (mat.$matrix.m11 * this.$matrix.m12 + mat.$matrix.m12 * this.$matrix.m22
+               + mat.$matrix.m13 * this.$matrix.m32 + mat.$matrix.m14 * this.$matrix.m42);
+    var m13 = (mat.$matrix.m11 * this.$matrix.m13 + mat.$matrix.m12 * this.$matrix.m23
+               + mat.$matrix.m13 * this.$matrix.m33 + mat.$matrix.m14 * this.$matrix.m43);
+    var m14 = (mat.$matrix.m11 * this.$matrix.m14 + mat.$matrix.m12 * this.$matrix.m24
+               + mat.$matrix.m13 * this.$matrix.m34 + mat.$matrix.m14 * this.$matrix.m44);
+
+    var m21 = (mat.$matrix.m21 * this.$matrix.m11 + mat.$matrix.m22 * this.$matrix.m21
+               + mat.$matrix.m23 * this.$matrix.m31 + mat.$matrix.m24 * this.$matrix.m41);
+    var m22 = (mat.$matrix.m21 * this.$matrix.m12 + mat.$matrix.m22 * this.$matrix.m22
+               + mat.$matrix.m23 * this.$matrix.m32 + mat.$matrix.m24 * this.$matrix.m42);
+    var m23 = (mat.$matrix.m21 * this.$matrix.m13 + mat.$matrix.m22 * this.$matrix.m23
+               + mat.$matrix.m23 * this.$matrix.m33 + mat.$matrix.m24 * this.$matrix.m43);
+    var m24 = (mat.$matrix.m21 * this.$matrix.m14 + mat.$matrix.m22 * this.$matrix.m24
+               + mat.$matrix.m23 * this.$matrix.m34 + mat.$matrix.m24 * this.$matrix.m44);
+
+    var m31 = (mat.$matrix.m31 * this.$matrix.m11 + mat.$matrix.m32 * this.$matrix.m21
+               + mat.$matrix.m33 * this.$matrix.m31 + mat.$matrix.m34 * this.$matrix.m41);
+    var m32 = (mat.$matrix.m31 * this.$matrix.m12 + mat.$matrix.m32 * this.$matrix.m22
+               + mat.$matrix.m33 * this.$matrix.m32 + mat.$matrix.m34 * this.$matrix.m42);
+    var m33 = (mat.$matrix.m31 * this.$matrix.m13 + mat.$matrix.m32 * this.$matrix.m23
+               + mat.$matrix.m33 * this.$matrix.m33 + mat.$matrix.m34 * this.$matrix.m43);
+    var m34 = (mat.$matrix.m31 * this.$matrix.m14 + mat.$matrix.m32 * this.$matrix.m24
+               + mat.$matrix.m33 * this.$matrix.m34 + mat.$matrix.m34 * this.$matrix.m44);
+
+    var m41 = (mat.$matrix.m41 * this.$matrix.m11 + mat.$matrix.m42 * this.$matrix.m21
+               + mat.$matrix.m43 * this.$matrix.m31 + mat.$matrix.m44 * this.$matrix.m41);
+    var m42 = (mat.$matrix.m41 * this.$matrix.m12 + mat.$matrix.m42 * this.$matrix.m22
+               + mat.$matrix.m43 * this.$matrix.m32 + mat.$matrix.m44 * this.$matrix.m42);
+    var m43 = (mat.$matrix.m41 * this.$matrix.m13 + mat.$matrix.m42 * this.$matrix.m23
+               + mat.$matrix.m43 * this.$matrix.m33 + mat.$matrix.m44 * this.$matrix.m43);
+    var m44 = (mat.$matrix.m41 * this.$matrix.m14 + mat.$matrix.m42 * this.$matrix.m24
+               + mat.$matrix.m43 * this.$matrix.m34 + mat.$matrix.m44 * this.$matrix.m44);
+
+    this.$matrix.m11 = m11;
+    this.$matrix.m12 = m12;
+    this.$matrix.m13 = m13;
+    this.$matrix.m14 = m14;
+
+    this.$matrix.m21 = m21;
+    this.$matrix.m22 = m22;
+    this.$matrix.m23 = m23;
+    this.$matrix.m24 = m24;
+
+    this.$matrix.m31 = m31;
+    this.$matrix.m32 = m32;
+    this.$matrix.m33 = m33;
+    this.$matrix.m34 = m34;
+
+    this.$matrix.m41 = m41;
+    this.$matrix.m42 = m42;
+    this.$matrix.m43 = m43;
+    this.$matrix.m44 = m44;
+}
+
+J3DIMatrix4.prototype.divide = function(divisor)
+{
+    this.$matrix.m11 /= divisor;
+    this.$matrix.m12 /= divisor;
+    this.$matrix.m13 /= divisor;
+    this.$matrix.m14 /= divisor;
+
+    this.$matrix.m21 /= divisor;
+    this.$matrix.m22 /= divisor;
+    this.$matrix.m23 /= divisor;
+    this.$matrix.m24 /= divisor;
+
+    this.$matrix.m31 /= divisor;
+    this.$matrix.m32 /= divisor;
+    this.$matrix.m33 /= divisor;
+    this.$matrix.m34 /= divisor;
+
+    this.$matrix.m41 /= divisor;
+    this.$matrix.m42 /= divisor;
+    this.$matrix.m43 /= divisor;
+    this.$matrix.m44 /= divisor;
+
+}
+
+J3DIMatrix4.prototype.ortho = function(left, right, bottom, top, near, far)
+{
+    var tx = (left + right) / (left - right);
+    var ty = (top + bottom) / (top - bottom);
+    var tz = (far + near) / (far - near);
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = 2 / (left - right);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+    matrix.$matrix.m31 = 0;
+    matrix.$matrix.m32 = 0;
+    matrix.$matrix.m33 = -2 / (far - near);
+    matrix.$matrix.m34 = 0;
+    matrix.$matrix.m41 = tx;
+    matrix.$matrix.m42 = ty;
+    matrix.$matrix.m43 = tz;
+    matrix.$matrix.m44 = 1;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.frustum = function(left, right, bottom, top, near, far)
+{
+    var matrix = new J3DIMatrix4();
+    var A = (right + left) / (right - left);
+    var B = (top + bottom) / (top - bottom);
+    var C = -(far + near) / (far - near);
+    var D = -(2 * far * near) / (far - near);
+
+    matrix.$matrix.m11 = (2 * near) / (right - left);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 * near / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = A;
+    matrix.$matrix.m32 = B;
+    matrix.$matrix.m33 = C;
+    matrix.$matrix.m34 = -1;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = D;
+    matrix.$matrix.m44 = 0;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar)
+{
+    var top = Math.tan(fovy * Math.PI / 360) * zNear;
+    var bottom = -top;
+    var left = aspect * bottom;
+    var right = aspect * top;
+    this.frustum(left, right, bottom, top, zNear, zFar);
+}
+
+J3DIMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz)
+{
+    if (typeof eyez == 'object' && "length" in eyez) {
+        var t = eyez;
+        upx = t[0];
+        upy = t[1];
+        upz = t[2];
+
+        t = eyey;
+        centerx = t[0];
+        centery = t[1];
+        centerz = t[2];
+
+        t = eyex;
+        eyex = t[0];
+        eyey = t[1];
+        eyez = t[2];
+    }
+
+    var matrix = new J3DIMatrix4();
+
+    // Make rotation matrix
+
+    // Z vector
+    var zx = eyex - centerx;
+    var zy = eyey - centery;
+    var zz = eyez - centerz;
+    var mag = Math.sqrt(zx * zx + zy * zy + zz * zz);
+    if (mag) {
+        zx /= mag;
+        zy /= mag;
+        zz /= mag;
+    }
+
+    // Y vector
+    var yx = upx;
+    var yy = upy;
+    var yz = upz;
+
+    // X vector = Y cross Z
+    xx =  yy * zz - yz * zy;
+    xy = -yx * zz + yz * zx;
+    xz =  yx * zy - yy * zx;
+
+    // Recompute Y = Z cross X
+    yx = zy * xz - zz * xy;
+    yy = -zx * xz + zz * xx;
+    yx = zx * xy - zy * xx;
+
+    // cross product gives area of parallelogram, which is < 1.0 for
+    // non-perpendicular unit-length vectors; so normalize x, y here
+
+    mag = Math.sqrt(xx * xx + xy * xy + xz * xz);
+    if (mag) {
+        xx /= mag;
+        xy /= mag;
+        xz /= mag;
+    }
+
+    mag = Math.sqrt(yx * yx + yy * yy + yz * yz);
+    if (mag) {
+        yx /= mag;
+        yy /= mag;
+        yz /= mag;
+    }
+
+    matrix.$matrix.m11 = xx;
+    matrix.$matrix.m12 = xy;
+    matrix.$matrix.m13 = xz;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = yx;
+    matrix.$matrix.m22 = yy;
+    matrix.$matrix.m23 = yz;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = zx;
+    matrix.$matrix.m32 = zy;
+    matrix.$matrix.m33 = zz;
+    matrix.$matrix.m34 = 0;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = 0;
+    matrix.$matrix.m44 = 1;
+    matrix.translate(-eyex, -eyey, -eyez);
+
+    this.multiply(matrix);
+}
+
+// Returns true on success, false otherwise. All params are Array objects
+J3DIMatrix4.prototype.decompose = function(_translate, _rotate, _scale, _skew, _perspective)
+{
+    // Normalize the matrix.
+    if (this.$matrix.m44 == 0)
+        return false;
+
+    // Gather the params
+    var translate, rotate, scale, skew, perspective;
+
+    var translate = (_translate == undefined || !("length" in _translate)) ? new J3DIVector3 : _translate;
+    var rotate = (_rotate == undefined || !("length" in _rotate)) ? new J3DIVector3 : _rotate;
+    var scale = (_scale == undefined || !("length" in _scale)) ? new J3DIVector3 : _scale;
+    var skew = (_skew == undefined || !("length" in _skew)) ? new J3DIVector3 : _skew;
+    var perspective = (_perspective == undefined || !("length" in _perspective)) ? new Array(4) : _perspective;
+
+    var matrix = new J3DIMatrix4(this);
+
+    matrix.divide(matrix.$matrix.m44);
+
+    // perspectiveMatrix is used to solve for perspective, but it also provides
+    // an easy way to test for singularity of the upper 3x3 component.
+    var perspectiveMatrix = new J3DIMatrix4(matrix);
+
+    perspectiveMatrix.$matrix.m14 = 0;
+    perspectiveMatrix.$matrix.m24 = 0;
+    perspectiveMatrix.$matrix.m34 = 0;
+    perspectiveMatrix.$matrix.m44 = 1;
+
+    if (perspectiveMatrix._determinant4x4() == 0)
+        return false;
+
+    // First, isolate perspective.
+    if (matrix.$matrix.m14 != 0 || matrix.$matrix.m24 != 0 || matrix.$matrix.m34 != 0) {
+        // rightHandSide is the right hand side of the equation.
+        var rightHandSide = [ matrix.$matrix.m14, matrix.$matrix.m24, matrix.$matrix.m34, matrix.$matrix.m44 ];
+
+        // Solve the equation by inverting perspectiveMatrix and multiplying
+        // rightHandSide by the inverse.
+        var inversePerspectiveMatrix = new J3DIMatrix4(perspectiveMatrix);
+        inversePerspectiveMatrix.invert();
+        var transposedInversePerspectiveMatrix = new J3DIMatrix4(inversePerspectiveMatrix);
+        transposedInversePerspectiveMatrix.transpose();
+        transposedInversePerspectiveMatrix.multVecMatrix(perspective, rightHandSide);
+
+        // Clear the perspective partition
+        matrix.$matrix.m14 = matrix.$matrix.m24 = matrix.$matrix.m34 = 0
+        matrix.$matrix.m44 = 1;
+    }
+    else {
+        // No perspective.
+        perspective[0] = perspective[1] = perspective[2] = 0;
+        perspective[3] = 1;
+    }
+
+    // Next take care of translation
+    translate[0] = matrix.$matrix.m41
+    matrix.$matrix.m41 = 0
+    translate[1] = matrix.$matrix.m42
+    matrix.$matrix.m42 = 0
+    translate[2] = matrix.$matrix.m43
+    matrix.$matrix.m43 = 0
+
+    // Now get scale and shear. 'row' is a 3 element array of 3 component vectors
+    var row0 = new J3DIVector3(matrix.$matrix.m11, matrix.$matrix.m12, matrix.$matrix.m13);
+    var row1 = new J3DIVector3(matrix.$matrix.m21, matrix.$matrix.m22, matrix.$matrix.m23);
+    var row2 = new J3DIVector3(matrix.$matrix.m31, matrix.$matrix.m32, matrix.$matrix.m33);
+
+    // Compute X scale factor and normalize first row.
+    scale[0] = row0.vectorLength();
+    row0.divide(scale[0]);
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    skew[0] = row0.dot(row1);
+    row1.combine(row0, 1.0, -skew[0]);
+
+    // Now, compute Y scale and normalize 2nd row.
+    scale[1] = row1.vectorLength();
+    row1.divide(scale[1]);
+    skew[0] /= scale[1];
+
+    // Compute XZ and YZ shears, orthogonalize 3rd row
+    skew[1] = row1.dot(row2);
+    row2.combine(row0, 1.0, -skew[1]);
+    skew[2] = row1.dot(row2);
+    row2.combine(row1, 1.0, -skew[2]);
+
+    // Next, get Z scale and normalize 3rd row.
+    scale[2] = row2.vectorLength();
+    row2.divide(scale[2]);
+    skew[1] /= scale[2];
+    skew[2] /= scale[2];
+
+    // At this point, the matrix (in rows) is orthonormal.
+    // Check for a coordinate system flip.  If the determinant
+    // is -1, then negate the matrix and the scaling factors.
+    var pdum3 = new J3DIVector3(row1);
+    pdum3.cross(row2);
+    if (row0.dot(pdum3) < 0) {
+        for (i = 0; i < 3; i++) {
+            scale[i] *= -1;
+            row[0][i] *= -1;
+            row[1][i] *= -1;
+            row[2][i] *= -1;
+        }
+    }
+
+    // Now, get the rotations out
+    rotate[1] = Math.asin(-row0[2]);
+    if (Math.cos(rotate[1]) != 0) {
+        rotate[0] = Math.atan2(row1[2], row2[2]);
+        rotate[2] = Math.atan2(row0[1], row0[0]);
+    }
+    else {
+        rotate[0] = Math.atan2(-row2[0], row1[1]);
+        rotate[2] = 0;
+    }
+
+    // Convert rotations to degrees
+    var rad2deg = 180 / Math.PI;
+    rotate[0] *= rad2deg;
+    rotate[1] *= rad2deg;
+    rotate[2] *= rad2deg;
+
+    return true;
+}
+
+J3DIMatrix4.prototype._determinant2x2 = function(a, b, c, d)
+{
+    return a * d - b * c;
+}
+
+J3DIMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3)
+{
+    return a1 * this._determinant2x2(b2, b3, c2, c3)
+         - b1 * this._determinant2x2(a2, a3, c2, c3)
+         + c1 * this._determinant2x2(a2, a3, b2, b3);
+}
+
+J3DIMatrix4.prototype._determinant4x4 = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4)
+         - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4)
+         + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4)
+         - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+}
+
+J3DIMatrix4.prototype._makeAdjoint = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    // Row column labeling reversed since we transpose rows & columns
+    this.$matrix.m11  =   this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m21  = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m31  =   this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
+    this.$matrix.m41  = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+
+    this.$matrix.m12  = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m22  =   this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m32  = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
+    this.$matrix.m42  =   this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
+
+    this.$matrix.m13  =   this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m23  = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m33  =   this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
+    this.$matrix.m43  = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
+
+    this.$matrix.m14  = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m24  =   this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m34  = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
+    this.$matrix.m44  =   this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
+}
+
+//
+// J3DIVector3
+//
+J3DIVector3 = function(x,y,z)
+{
+    this.load(x,y,z);
+}
+
+J3DIVector3.prototype.load = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        this[0] = x[0];
+        this[1] = x[1];
+        this[2] = x[2];
+    }
+    else if (typeof x == 'number') {
+        this[0] = x;
+        this[1] = y;
+        this[2] = z;
+    }
+    else {
+        this[0] = 0;
+        this[1] = 0;
+        this[2] = 0;
+    }
+}
+
+J3DIVector3.prototype.getAsArray = function()
+{
+    return [ this[0], this[1], this[2] ];
+}
+
+J3DIVector3.prototype.getAsFloat32Array = function()
+{
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIVector3.prototype.vectorLength = function()
+{
+    return Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);
+}
+
+J3DIVector3.prototype.divide = function(divisor)
+{
+    this[0] /= divisor; this[1] /= divisor; this[2] /= divisor;
+}
+
+J3DIVector3.prototype.cross = function(v)
+{
+    this[0] =  this[1] * v[2] - this[2] * v[1];
+    this[1] = -this[0] * v[2] + this[2] * v[0];
+    this[2] =  this[0] * v[1] - this[1] * v[0];
+}
+
+J3DIVector3.prototype.dot = function(v)
+{
+    return this[0] * v[0] + this[1] * v[1] + this[2] * v[2];
+}
+
+J3DIVector3.prototype.combine = function(v, ascl, bscl)
+{
+    this[0] = (ascl * this[0]) + (bscl * v[0]);
+    this[1] = (ascl * this[1]) + (bscl * v[1]);
+    this[2] = (ascl * this[2]) + (bscl * v[2]);
+}
+
+J3DIVector3.prototype.multVecMatrix = function(matrix)
+{
+    var x = this[0];
+    var y = this[1];
+    var z = this[2];
+
+    this[0] = matrix.$matrix.m41 + x * matrix.$matrix.m11 + y * matrix.$matrix.m21 + z * matrix.$matrix.m31;
+    this[1] = matrix.$matrix.m42 + x * matrix.$matrix.m12 + y * matrix.$matrix.m22 + z * matrix.$matrix.m32;
+    this[2] = matrix.$matrix.m43 + x * matrix.$matrix.m13 + y * matrix.$matrix.m23 + z * matrix.$matrix.m33;
+    var w = matrix.$matrix.m44 + x * matrix.$matrix.m14 + y * matrix.$matrix.m24 + z * matrix.$matrix.m34;
+    if (w != 1 && w != 0) {
+        this[0] /= w;
+        this[1] /= w;
+        this[2] /= w;
+    }
+}
+
+J3DIVector3.prototype.toString = function()
+{
+    return "["+this[0]+","+this[1]+","+this[2]+"]";
+}
diff --git a/ivi/tests/2D3DAnimation/js/khronos/webgl-debug.js b/ivi/tests/2D3DAnimation/js/khronos/webgl-debug.js
new file mode 100644 (file)
index 0000000..26a8872
--- /dev/null
@@ -0,0 +1,875 @@
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+// Various functions for helping debug WebGL apps.
+
+WebGLDebugUtils = function() {
+
+/**
+ * Wrapped logging function.
+ * @param {string} msg Message to log.
+ */
+var log = function(msg) {
+  if (window.console && window.console.log) {
+    window.console.log(msg);
+  }
+};
+
+/**
+ * Wrapped error logging function.
+ * @param {string} msg Message to log.
+ */
+var error = function(msg) {
+  if (window.console && window.console.error) {
+    window.console.error(msg);
+  } else {
+    log(msg);
+  }
+};
+
+/**
+ * Which arguements are enums.
+ * @type {!Object.<number, string>}
+ */
+var glValidEnumContexts = {
+
+  // Generic setters and getters
+
+  'enable': { 0:true },
+  'disable': { 0:true },
+  'getParameter': { 0:true },
+
+  // Rendering
+
+  'drawArrays': { 0:true },
+  'drawElements': { 0:true, 2:true },
+
+  // Shaders
+
+  'createShader': { 0:true },
+  'getShaderParameter': { 1:true },
+  'getProgramParameter': { 1:true },
+
+  // Vertex attributes
+
+  'getVertexAttrib': { 1:true },
+  'vertexAttribPointer': { 2:true },
+
+  // Textures
+
+  'bindTexture': { 0:true },
+  'activeTexture': { 0:true },
+  'getTexParameter': { 0:true, 1:true },
+  'texParameterf': { 0:true, 1:true },
+  'texParameteri': { 0:true, 1:true, 2:true },
+  'texImage2D': { 0:true, 2:true, 6:true, 7:true },
+  'texSubImage2D': { 0:true, 6:true, 7:true },
+  'copyTexImage2D': { 0:true, 2:true },
+  'copyTexSubImage2D': { 0:true },
+  'generateMipmap': { 0:true },
+
+  // Buffer objects
+
+  'bindBuffer': { 0:true },
+  'bufferData': { 0:true, 2:true },
+  'bufferSubData': { 0:true },
+  'getBufferParameter': { 0:true, 1:true },
+
+  // Renderbuffers and framebuffers
+
+  'pixelStorei': { 0:true, 1:true },
+  'readPixels': { 4:true, 5:true },
+  'bindRenderbuffer': { 0:true },
+  'bindFramebuffer': { 0:true },
+  'checkFramebufferStatus': { 0:true },
+  'framebufferRenderbuffer': { 0:true, 1:true, 2:true },
+  'framebufferTexture2D': { 0:true, 1:true, 2:true },
+  'getFramebufferAttachmentParameter': { 0:true, 1:true, 2:true },
+  'getRenderbufferParameter': { 0:true, 1:true },
+  'renderbufferStorage': { 0:true, 1:true },
+
+  // Frame buffer operations (clear, blend, depth test, stencil)
+
+  'clear': { 0:true },
+  'depthFunc': { 0:true },
+  'blendFunc': { 0:true, 1:true },
+  'blendFuncSeparate': { 0:true, 1:true, 2:true, 3:true },
+  'blendEquation': { 0:true },
+  'blendEquationSeparate': { 0:true, 1:true },
+  'stencilFunc': { 0:true },
+  'stencilFuncSeparate': { 0:true, 1:true },
+  'stencilMaskSeparate': { 0:true },
+  'stencilOp': { 0:true, 1:true, 2:true },
+  'stencilOpSeparate': { 0:true, 1:true, 2:true, 3:true },
+
+  // Culling
+
+  'cullFace': { 0:true },
+  'frontFace': { 0:true },
+};
+
+/**
+ * Map of numbers to names.
+ * @type {Object}
+ */
+var glEnums = null;
+
+/**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ *    you have more than one context it doesn't matter which one
+ *    you pass in, it is only used to pull out constants.
+ */
+function init(ctx) {
+  if (glEnums == null) {
+    glEnums = { };
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'number') {
+        glEnums[ctx[propertyName]] = propertyName;
+      }
+    }
+  }
+}
+
+/**
+ * Checks the utils have been initialized.
+ */
+function checkInit() {
+  if (glEnums == null) {
+    throw 'WebGLDebugUtils.init(ctx) not called';
+  }
+}
+
+/**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+function mightBeEnum(value) {
+  checkInit();
+  return (glEnums[value] !== undefined);
+}
+
+/**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+function glEnumToString(value) {
+  checkInit();
+  var name = glEnums[value];
+  return (name !== undefined) ? name :
+      ("*UNKNOWN WebGL ENUM (0x" + value.toString(16) + ")");
+}
+
+/**
+ * Returns the string version of a WebGL argument.
+ * Attempts to convert enum arguments to strings.
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+function glFunctionArgToString(functionName, argumentIndex, value) {
+  var funcInfo = glValidEnumContexts[functionName];
+  if (funcInfo !== undefined) {
+    if (funcInfo[argumentIndex]) {
+      return glEnumToString(value);
+    }
+  }
+  if (value === null) {
+    return "null";
+  } else if (value === undefined) {
+    return "undefined";
+  } else {
+    return value.toString();
+  }
+}
+
+/**
+ * Converts the arguments of a WebGL function to a string.
+ * Attempts to convert enum arguments to strings.
+ *
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} args The arguments.
+ * @return {string} The arguments as a string.
+ */
+function glFunctionArgsToString(functionName, args) {
+  // apparently we can't do args.join(",");
+  var argStr = "";
+  for (var ii = 0; ii < args.length; ++ii) {
+    argStr += ((ii == 0) ? '' : ', ') +
+        glFunctionArgToString(functionName, ii, args[ii]);
+  }
+  return argStr;
+};
+
+
+function makePropertyWrapper(wrapper, original, propertyName) {
+  //log("wrap prop: " + propertyName);
+  wrapper.__defineGetter__(propertyName, function() {
+    return original[propertyName];
+  });
+  // TODO(gmane): this needs to handle properties that take more than
+  // one value?
+  wrapper.__defineSetter__(propertyName, function(value) {
+    //log("set: " + propertyName);
+    original[propertyName] = value;
+  });
+}
+
+// Makes a function that calls a function on another object.
+function makeFunctionWrapper(original, functionName) {
+  //log("wrap fn: " + functionName);
+  var f = original[functionName];
+  return function() {
+    //log("call: " + functionName);
+    var result = f.apply(original, arguments);
+    return result;
+  };
+}
+
+/**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not gl.NO_ERROR.
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ *        wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
+ *        The function to call when gl.getError returns an
+ *        error. If not specified the default function calls
+ *        console.log with a message.
+ * @param {!function(funcName, args): void} opt_onFunc The
+ *        function to call when each webgl function is called.
+ *        You can use this to log all calls for example.
+ */
+function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc) {
+  init(ctx);
+  opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
+        // apparently we can't do args.join(",");
+        var argStr = "";
+        for (var ii = 0; ii < args.length; ++ii) {
+          argStr += ((ii == 0) ? '' : ', ') +
+              glFunctionArgToString(functionName, ii, args[ii]);
+        }
+        error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
+              "(" + argStr + ")");
+      };
+
+  // Holds booleans for each GL error so after we get the error ourselves
+  // we can still return it to the client app.
+  var glErrorShadow = { };
+
+  // Makes a function that calls a WebGL function and then calls getError.
+  function makeErrorWrapper(ctx, functionName) {
+    return function() {
+      if (opt_onFunc) {
+        opt_onFunc(functionName, arguments);
+      }
+      var result = ctx[functionName].apply(ctx, arguments);
+      var err = ctx.getError();
+      if (err != 0) {
+        glErrorShadow[err] = true;
+        opt_onErrorFunc(err, functionName, arguments);
+      }
+      return result;
+    };
+  }
+
+  // Make a an object that has a copy of every property of the WebGL context
+  // but wraps all functions.
+  var wrapper = {};
+  for (var propertyName in ctx) {
+    if (typeof ctx[propertyName] == 'function') {
+       wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
+     } else {
+       makePropertyWrapper(wrapper, ctx, propertyName);
+     }
+  }
+
+  // Override the getError function with one that returns our saved results.
+  wrapper.getError = function() {
+    for (var err in glErrorShadow) {
+      if (glErrorShadow.hasOwnProperty(err)) {
+        if (glErrorShadow[err]) {
+          glErrorShadow[err] = false;
+          return err;
+        }
+      }
+    }
+    return ctx.NO_ERROR;
+  };
+
+  return wrapper;
+}
+
+function resetToInitialState(ctx) {
+  var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
+  var tmp = ctx.createBuffer();
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
+  for (var ii = 0; ii < numAttribs; ++ii) {
+    ctx.disableVertexAttribArray(ii);
+    ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
+    ctx.vertexAttrib1f(ii, 0);
+  }
+  ctx.deleteBuffer(tmp);
+
+  var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
+  for (var ii = 0; ii < numTextureUnits; ++ii) {
+    ctx.activeTexture(ctx.TEXTURE0 + ii);
+    ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+  }
+
+  ctx.activeTexture(ctx.TEXTURE0);
+  ctx.useProgram(null);
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+  ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+  ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
+  ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
+  ctx.disable(ctx.BLEND);
+  ctx.disable(ctx.CULL_FACE);
+  ctx.disable(ctx.DEPTH_TEST);
+  ctx.disable(ctx.DITHER);
+  ctx.disable(ctx.SCISSOR_TEST);
+  ctx.blendColor(0, 0, 0, 0);
+  ctx.blendEquation(ctx.FUNC_ADD);
+  ctx.blendFunc(ctx.ONE, ctx.ZERO);
+  ctx.clearColor(0, 0, 0, 0);
+  ctx.clearDepth(1);
+  ctx.clearStencil(-1);
+  ctx.colorMask(true, true, true, true);
+  ctx.cullFace(ctx.BACK);
+  ctx.depthFunc(ctx.LESS);
+  ctx.depthMask(true);
+  ctx.depthRange(0, 1);
+  ctx.frontFace(ctx.CCW);
+  ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
+  ctx.lineWidth(1);
+  ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
+  ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
+  // TODO: Delete this IF.
+  if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
+    ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
+  }
+  ctx.polygonOffset(0, 0);
+  ctx.sampleCoverage(1, false);
+  ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
+  ctx.stencilMask(0xFFFFFFFF);
+  ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
+  ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
+
+  // TODO: This should NOT be needed but Firefox fails with 'hint'
+  while(ctx.getError());
+}
+
+function makeLostContextSimulatingCanvas(canvas) {
+  var unwrappedContext_;
+  var wrappedContext_;
+  var onLost_ = [];
+  var onRestored_ = [];
+  var wrappedContext_ = {};
+  var contextId_ = 1;
+  var contextLost_ = false;
+  var resourceId_ = 0;
+  var resourceDb_ = [];
+  var numCallsToLoseContext_ = 0;
+  var numCalls_ = 0;
+  var canRestore_ = false;
+  var restoreTimeout_ = 0;
+
+  // Holds booleans for each GL error so can simulate errors.
+  var glErrorShadow_ = { };
+
+  canvas.getContext = function(f) {
+    return function() {
+      var ctx = f.apply(canvas, arguments);
+      // Did we get a context and is it a WebGL context?
+      if (ctx instanceof WebGLRenderingContext) {
+        if (ctx != unwrappedContext_) {
+          if (unwrappedContext_) {
+            throw "got different context"
+          }
+          unwrappedContext_ = ctx;
+          wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
+        }
+        return wrappedContext_;
+      }
+      return ctx;
+    }
+  }(canvas.getContext);
+
+  function wrapEvent(listener) {
+    if (typeof(listener) == "function") {
+      return listener;
+    } else {
+      return function(info) {
+        listener.handleEvent(info);
+      }
+    }
+  }
+
+  var addOnContextLostListener = function(listener) {
+    onLost_.push(wrapEvent(listener));
+  };
+
+  var addOnContextRestoredListener = function(listener) {
+    onRestored_.push(wrapEvent(listener));
+  };
+
+
+  function wrapAddEventListener(canvas) {
+    var f = canvas.addEventListener;
+    canvas.addEventListener = function(type, listener, bubble) {
+      switch (type) {
+        case 'webglcontextlost':
+          addOnContextLostListener(listener);
+          break;
+        case 'webglcontextrestored':
+          addOnContextRestoredListener(listener);
+          break;
+        default:
+          f.apply(canvas, arguments);
+      }
+    };
+  }
+
+  wrapAddEventListener(canvas);
+
+  canvas.loseContext = function() {
+    if (!contextLost_) {
+      contextLost_ = true;
+      numCallsToLoseContext_ = 0;
+      ++contextId_;
+      while (unwrappedContext_.getError());
+      clearErrors();
+      glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
+      var event = makeWebGLContextEvent("context lost");
+      var callbacks = onLost_.slice();
+      setTimeout(function() {
+          //log("numCallbacks:" + callbacks.length);
+          for (var ii = 0; ii < callbacks.length; ++ii) {
+            //log("calling callback:" + ii);
+            callbacks[ii](event);
+          }
+          if (restoreTimeout_ >= 0) {
+            setTimeout(function() {
+                canvas.restoreContext();
+              }, restoreTimeout_);
+          }
+        }, 0);
+    }
+  };
+
+  canvas.restoreContext = function() {
+    if (contextLost_) {
+      if (onRestored_.length) {
+        setTimeout(function() {
+            if (!canRestore_) {
+              throw "can not restore. webglcontestlost listener did not call event.preventDefault";
+            }
+            freeResources();
+            resetToInitialState(unwrappedContext_);
+            contextLost_ = false;
+            numCalls_ = 0;
+            canRestore_ = false;
+            var callbacks = onRestored_.slice();
+            var event = makeWebGLContextEvent("context restored");
+            for (var ii = 0; ii < callbacks.length; ++ii) {
+              callbacks[ii](event);
+            }
+          }, 0);
+      }
+    }
+  };
+
+  canvas.loseContextInNCalls = function(numCalls) {
+    if (contextLost_) {
+      throw "You can not ask a lost contet to be lost";
+    }
+    numCallsToLoseContext_ = numCalls_ + numCalls;
+  };
+
+  canvas.getNumCalls = function() {
+    return numCalls_;
+  };
+
+  canvas.setRestoreTimeout = function(timeout) {
+    restoreTimeout_ = timeout;
+  };
+
+  function isWebGLObject(obj) {
+    //return false;
+    return (obj instanceof WebGLBuffer ||
+            obj instanceof WebGLFramebuffer ||
+            obj instanceof WebGLProgram ||
+            obj instanceof WebGLRenderbuffer ||
+            obj instanceof WebGLShader ||
+            obj instanceof WebGLTexture);
+  }
+
+  function checkResources(args) {
+    for (var ii = 0; ii < args.length; ++ii) {
+      var arg = args[ii];
+      if (isWebGLObject(arg)) {
+        return arg.__webglDebugContextLostId__ == contextId_;
+      }
+    }
+    return true;
+  }
+
+  function clearErrors() {
+    var k = Object.keys(glErrorShadow_);
+    for (var ii = 0; ii < k.length; ++ii) {
+      delete glErrorShadow_[k];
+    }
+  }
+
+  function loseContextIfTime() {
+    ++numCalls_;
+    if (!contextLost_) {
+      if (numCallsToLoseContext_ == numCalls_) {
+        canvas.loseContext();
+      }
+    }
+  }
+
+  // Makes a function that simulates WebGL when out of context.
+  function makeLostContextFunctionWrapper(ctx, functionName) {
+    var f = ctx[functionName];
+    return function() {
+      // log("calling:" + functionName);
+      // Only call the functions if the context is not lost.
+      loseContextIfTime();
+      if (!contextLost_) {
+        //if (!checkResources(arguments)) {
+        //  glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
+        //  return;
+        //}
+        var result = f.apply(ctx, arguments);
+        return result;
+      }
+    };
+  }
+
+  function freeResources() {
+    for (var ii = 0; ii < resourceDb_.length; ++ii) {
+      var resource = resourceDb_[ii];
+      if (resource instanceof WebGLBuffer) {
+        unwrappedContext_.deleteBuffer(resource);
+      } else if (resource instanceof WebGLFramebuffer) {
+        unwrappedContext_.deleteFramebuffer(resource);
+      } else if (resource instanceof WebGLProgram) {
+        unwrappedContext_.deleteProgram(resource);
+      } else if (resource instanceof WebGLRenderbuffer) {
+        unwrappedContext_.deleteRenderbuffer(resource);
+      } else if (resource instanceof WebGLShader) {
+        unwrappedContext_.deleteShader(resource);
+      } else if (resource instanceof WebGLTexture) {
+        unwrappedContext_.deleteTexture(resource);
+      }
+    }
+  }
+
+  function makeWebGLContextEvent(statusMessage) {
+    return {
+      statusMessage: statusMessage,
+      preventDefault: function() {
+          canRestore_ = true;
+        }
+    };
+  }
+
+  return canvas;
+
+  function makeLostContextSimulatingContext(ctx) {
+    // copy all functions and properties to wrapper
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'function') {
+         wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
+             ctx, propertyName);
+       } else {
+         makePropertyWrapper(wrappedContext_, ctx, propertyName);
+       }
+    }
+
+    // Wrap a few functions specially.
+    wrappedContext_.getError = function() {
+      loseContextIfTime();
+      if (!contextLost_) {
+        var err;
+        while (err = unwrappedContext_.getError()) {
+          glErrorShadow_[err] = true;
+        }
+      }
+      for (var err in glErrorShadow_) {
+        if (glErrorShadow_[err]) {
+          delete glErrorShadow_[err];
+          return err;
+        }
+      }
+      return wrappedContext_.NO_ERROR;
+    };
+
+    var creationFunctions = [
+      "createBuffer",
+      "createFramebuffer",
+      "createProgram",
+      "createRenderbuffer",
+      "createShader",
+      "createTexture"
+    ];
+    for (var ii = 0; ii < creationFunctions.length; ++ii) {
+      var functionName = creationFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          var obj = f.apply(ctx, arguments);
+          obj.__webglDebugContextLostId__ = contextId_;
+          resourceDb_.push(obj);
+          return obj;
+        };
+      }(ctx[functionName]);
+    }
+
+    var functionsThatShouldReturnNull = [
+      "getActiveAttrib",
+      "getActiveUniform",
+      "getBufferParameter",
+      "getContextAttributes",
+      "getAttachedShaders",
+      "getFramebufferAttachmentParameter",
+      "getParameter",
+      "getProgramParameter",
+      "getProgramInfoLog",
+      "getRenderbufferParameter",
+      "getShaderParameter",
+      "getShaderInfoLog",
+      "getShaderSource",
+      "getTexParameter",
+      "getUniform",
+      "getUniformLocation",
+      "getVertexAttrib"
+    ];
+    for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
+      var functionName = functionsThatShouldReturnNull[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    var isFunctions = [
+      "isBuffer",
+      "isEnabled",
+      "isFramebuffer",
+      "isProgram",
+      "isRenderbuffer",
+      "isShader",
+      "isTexture"
+    ];
+    for (var ii = 0; ii < isFunctions.length; ++ii) {
+      var functionName = isFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return false;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    wrappedContext_.checkFramebufferStatus = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.checkFramebufferStatus);
+
+    wrappedContext_.getAttribLocation = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return -1;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getAttribLocation);
+
+    wrappedContext_.getVertexAttribOffset = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return 0;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getVertexAttribOffset);
+
+    wrappedContext_.isContextLost = function() {
+      return contextLost_;
+    };
+
+    return wrappedContext_;
+  }
+}
+
+return {
+    /**
+     * Initializes this module. Safe to call more than once.
+     * @param {!WebGLRenderingContext} ctx A WebGL context. If
+    }
+   *    you have more than one context it doesn't matter which one
+   *    you pass in, it is only used to pull out constants.
+   */
+  'init': init,
+
+  /**
+   * Returns true or false if value matches any WebGL enum
+   * @param {*} value Value to check if it might be an enum.
+   * @return {boolean} True if value matches one of the WebGL defined enums
+   */
+  'mightBeEnum': mightBeEnum,
+
+  /**
+   * Gets an string version of an WebGL enum.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+   *
+   * @param {number} value Value to return an enum for
+   * @return {string} The string version of the enum.
+   */
+  'glEnumToString': glEnumToString,
+
+  /**
+   * Converts the argument of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 0, gl.TEXTURE_2D);
+   *
+   * would return 'TEXTURE_2D'
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} argumentIndx the index of the argument.
+   * @param {*} value The value of the argument.
+   * @return {string} The value as a string.
+   */
+  'glFunctionArgToString': glFunctionArgToString,
+
+  /**
+   * Converts the arguments of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} args The arguments.
+   * @return {string} The arguments as a string.
+   */
+  'glFunctionArgsToString': glFunctionArgsToString,
+
+  /**
+   * Given a WebGL context returns a wrapped context that calls
+   * gl.getError after every command and calls a function if the
+   * result is not NO_ERROR.
+   *
+   * You can supply your own function if you want. For example, if you'd like
+   * an exception thrown on any GL error you could do this
+   *
+   *    function throwOnGLError(err, funcName, args) {
+   *      throw WebGLDebugUtils.glEnumToString(err) +
+   *            " was caused by call to " + funcName;
+   *    };
+   *
+   *    ctx = WebGLDebugUtils.makeDebugContext(
+   *        canvas.getContext("webgl"), throwOnGLError);
+   *
+   * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+   * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
+   *     to call when gl.getError returns an error. If not specified the default
+   *     function calls console.log with a message.
+   * @param {!function(funcName, args): void} opt_onFunc The
+   *     function to call when each webgl function is called. You
+   *     can use this to log all calls for example.
+   */
+  'makeDebugContext': makeDebugContext,
+
+  /**
+   * Given a canvas element returns a wrapped canvas element that will
+   * simulate lost context. The canvas returned adds the following functions.
+   *
+   * loseContext:
+   *   simulates a lost context event.
+   *
+   * restoreContext:
+   *   simulates the context being restored.
+   *
+   * lostContextInNCalls:
+   *   loses the context after N gl calls.
+   *
+   * getNumCalls:
+   *   tells you how many gl calls there have been so far.
+   *
+   * setRestoreTimeout:
+   *   sets the number of milliseconds until the context is restored
+   *   after it has been lost. Defaults to 0. Pass -1 to prevent
+   *   automatic restoring.
+   *
+   * @param {!Canvas} canvas The canvas element to wrap.
+   */
+  'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
+
+  /**
+   * Resets a context to the initial state.
+   * @param {!WebGLRenderingContext} ctx The webgl context to
+   *     reset.
+   */
+  'resetToInitialState': resetToInitialState
+};
+
+}();
+
diff --git a/ivi/tests/2D3DAnimation/js/khronos/webgl-utils.js b/ivi/tests/2D3DAnimation/js/khronos/webgl-utils.js
new file mode 100644 (file)
index 0000000..4f14f7f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/**
+ * @fileoverview This file contains functions every webgl program will need
+ * a version of one way or another.
+ *
+ * Instead of setting up a context manually it is recommended to
+ * use. This will check for success or failure. On failure it
+ * will attempt to present an approriate message to the user.
+ *
+ *       gl = WebGLUtils.setupWebGL(canvas);
+ *
+ * For animated WebGL apps use of setTimeout or setInterval are
+ * discouraged. It is recommended you structure your rendering
+ * loop like this.
+ *
+ *       function render() {
+ *         window.requestAnimFrame(render, canvas);
+ *
+ *         // do rendering
+ *         ...
+ *       }
+ *       render();
+ *
+ * This will call your rendering function up to the refresh rate
+ * of your display but will stop rendering if your app is not
+ * visible.
+ */
+
+WebGLUtils = function() {
+
+/**
+ * Creates the HTLM for a failure message
+ * @param {string} canvasContainerId id of container of th
+ *        canvas.
+ * @return {string} The html.
+ */
+var makeFailHTML = function(msg) {
+  return '' +
+    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
+    '<td align="center">' +
+    '<div style="display: table-cell; vertical-align: middle;">' +
+    '<div style="">' + msg + '</div>' +
+    '</div>' +
+    '</td></tr></table>';
+};
+
+/**
+ * Mesasge for getting a webgl browser
+ * @type {string}
+ */
+var GET_A_WEBGL_BROWSER = '' +
+  'This page requires a browser that supports WebGL.<br/>' +
+  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
+
+/**
+ * Mesasge for need better hardware
+ * @type {string}
+ */
+var OTHER_PROBLEM = '' +
+  "It doesn't appear your computer can support WebGL.<br/>" +
+  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
+
+/**
+ * Creates a webgl context. If creation fails it will
+ * change the contents of the container of the <canvas>
+ * tag to an error message with the correct links for WebGL.
+ * @param {Element} canvas. The canvas element to create a
+ *     context from.
+ * @param {WebGLContextCreationAttirbutes} opt_attribs Any
+ *     creation attributes you want to pass in.
+ * @return {WebGLRenderingContext} The created context.
+ */
+var setupWebGL = function(canvas, opt_attribs) {
+  function showLink(str) {
+    var container = canvas.parentNode;
+    if (container) {
+      container.innerHTML = makeFailHTML(str);
+    }
+  };
+
+  if (!window.WebGLRenderingContext) {
+    showLink(GET_A_WEBGL_BROWSER);
+    return null;
+  }
+
+  var context = create3DContext(canvas, opt_attribs);
+  if (!context) {
+    showLink(OTHER_PROBLEM);
+  }
+  return context;
+};
+
+/**
+ * Creates a webgl context.
+ * @param {!Canvas} canvas The canvas tag to get context
+ *     from. If one is not passed in one will be created.
+ * @return {!WebGLContext} The created context.
+ */
+var create3DContext = function(canvas, opt_attribs) {
+  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
+  var context = null;
+  for (var ii = 0; ii < names.length; ++ii) {
+    try {
+      context = canvas.getContext(names[ii], opt_attribs);
+    } catch(e) {}
+    if (context) {
+      break;
+    }
+  }
+  return context;
+}
+
+return {
+  create3DContext: create3DContext,
+  setupWebGL: setupWebGL
+};
+}();
+
+/**
+ * Provides requestAnimationFrame in a cross browser way.
+ */
+window.requestAnimFrame = (function() {
+  return window.requestAnimationFrame ||
+         window.webkitRequestAnimationFrame ||
+         window.mozRequestAnimationFrame ||
+         window.oRequestAnimationFrame ||
+         window.msRequestAnimationFrame ||
+         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
+           return window.setTimeout(callback, 1000/60);
+         };
+})();
+
+/**
+ * Provides cancelAnimationFrame in a cross browser way.
+ */
+window.cancelAnimFrame = (function() {
+  return window.cancelAnimationFrame ||
+         window.webkitCancelAnimationFrame ||
+         window.mozCancelAnimationFrame ||
+         window.oCancelAnimationFrame ||
+         window.msCancelAnimationFrame ||
+         window.clearTimeout;
+})();
+
+
diff --git a/ivi/tests/2D3DAnimation/js/main.js b/ivi/tests/2D3DAnimation/js/main.js
new file mode 100644 (file)
index 0000000..41563d0
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var ORIGIN_SPEED = 0.5;
+var multiple = 5;
+var isRunning = false;
+var isInit = true;
+var testFlag = {
+    status: false,
+    direction: false,
+    size:false,
+    speed:false
+};
+
+function start() {
+    var c = document.getElementById("canvas");
+    canvas = c;
+
+    var gl = init();
+    if (!gl) {
+        return;
+    }
+    incAngle = ORIGIN_SPEED*multiple;
+    currentAngle = 0;
+
+    f();
+    isRunning = true;
+}
+var f = function() {
+    drawPicture(gl);
+    requestId = window.requestAnimFrame(f, canvas);
+};
+
+function handleContextLost(event) {
+    if (event) {
+        event.preventDefault();
+    }
+    if (requestId !== undefined) {
+        window.cancelAnimFrame(requestId);
+        requestId = undefined;
+    }
+}
+
+function handleContextRestored() {
+    init();
+    f();
+}
+
+function reStart() {
+    if (isRunning) {
+        return;
+    }
+    incAngle = bakAngle;
+    handleContextRestored();
+    isRunning = true;
+}
+
+function stop(event) {
+    if (!isRunning) {
+        return;
+    }
+    bakAngle = incAngle;
+    incAngle = 0;
+    handleContextLost(event);
+    isRunning = false;
+}
+
+function resume() {
+    if(!isRunning) {
+        return;
+    }
+    stop();
+    reStart();
+}
+
+function setToRight() {
+    if(incAngle < 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setToLeft() {
+    if(incAngle > 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setSize(value) {
+    if(value < 7 || value > 30) {
+        return;
+    }
+    if (value != viewDistance){
+        viewDistance = value;
+    };
+    resume();
+}
+
+function setSpeed(value) {
+    if(value <= 0 || value > 10) {
+        return;
+    }
+    if(incAngle > 0) {
+        incAngle = ORIGIN_SPEED*value;
+    } else {
+        incAngle = -ORIGIN_SPEED*value;
+    }
+    resume();
+}
+
+function checkEnable() {
+    if (testFlag.status && testFlag.direction
+        && testFlag.size && testFlag.speed) {
+        EnablePassButton();
+    }
+}
+
+$(document).ready(function(){
+    start();
+    // animation-left-right status changes
+    $("input[type='radio']").bind( "change", function(event, ui) {
+        if (this.value == "left") {
+            setToLeft();
+            testFlag.direction = true;
+            checkEnable();
+        } else {
+            setToRight();
+        }
+    });
+    DisablePassButton();
+});
diff --git a/ivi/tests/2D3DAnimation/js/slider.tooltip.js b/ivi/tests/2D3DAnimation/js/slider.tooltip.js
new file mode 100644 (file)
index 0000000..59672db
--- /dev/null
@@ -0,0 +1,155 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
+            setSize(value);
+            if (parseInt(newValue, 10) != 3) {
+                testFlag.size = true;
+                checkEnable();
+            }
+        } else if (ID == "speed-1") {
+            setSpeed(parseInt(newValue, 10));
+            if (parseInt(newValue, 10) != 5) {
+                testFlag.speed = true;
+                checkEnable();
+            }
+        } else if (ID == "flip-1") {
+            if (newValue == "0") {
+                stop();
+                $("input[type='radio']").checkboxradio('disable');
+                $("#slider-1").slider('disable');
+                $("#speed-1").slider('disable');
+                testFlag.status = true;
+                checkEnable();
+            } else if (newValue == "1"){
+                if (!isInit) {
+                    reStart();
+                    $("input[type='radio']").checkboxradio('enable');
+                    $("#slider-1").slider('enable');
+                    $("#speed-1").slider('enable');
+                } else {
+                    isInit = false;
+                }
+            }
+        }
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       //this._popup.html( newValue );
+            this._popup.html( Math.round(newValue) );
+               }
+
+               if ( o.showValue ) {
+                       //this._handleText.html( newValue );
+            this._handleText.html( Math.round(newValue) );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/ivi/tests/Accelerometer/index.html b/ivi/tests/Accelerometer/index.html
new file mode 100644 (file)
index 0000000..3b970ec
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style type="text/css">
+        .d{
+            border: 1px solid #000;
+            width:100%;
+            height:200px;
+        }
+        .d li{
+            margin: 10px 5px;
+        }
+        .d p{
+            margin: 10px 25px;
+        }
+    </style>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <div class="d">
+        <ul id="coordinate">
+          <li id="x">X:</li>
+          <li id="y">Y:</li>
+          <li id="z">Z:</li>
+        </ul>
+        <p>X, Y, Z will be changed while moving the device, otherwise they will be zero</p>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionality of Accelerometer. And detects the device moving direction is x axis or y axis or z axis.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the detected direction reflects the actual device moving direction.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/Accelerometer/js/main.js b/ivi/tests/Accelerometer/js/main.js
new file mode 100644 (file)
index 0000000..af52a3e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+window.addEventListener(
+    "devicemotion",
+    function(evt) {
+        var coordinate = evt.acceleration;
+        jQuery("#x").text("X: " + Math.round(coordinate.x-0));
+        jQuery("#y").text("Y: " + Math.round(coordinate.y-0));
+        jQuery("#z").text("Z: " + Math.round(coordinate.z-0));
+    }, false);
diff --git a/ivi/tests/Alarm/NOTICE b/ivi/tests/Alarm/NOTICE
new file mode 100644 (file)
index 0000000..5e383b8
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestAlarm :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/Alarm/index.html b/ivi/tests/Alarm/index.html
new file mode 100755 (executable)
index 0000000..c932659
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AlarmTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">AlarmTest Install</div>
+                </li>
+                <li data-role="list-divider">Alarm List</li>
+            </ul>
+            <ul data-role="listview" id="alarm-all-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Absolute Alarm Time</li>
+                <li>
+                    <input type="datetime" name="alarm-time" id="alarm-time" value="0000-00-00T00:00Z" />
+                </li>
+                <li data-role="list-divider">Absolute Alarm Repeat interval(sec)</li>
+                <li><input id="absolute-alarm-period" name="absolute-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Absolute Alarm Add</li>
+                <li>
+                    <div data-role="button" id="absolute-alarm-save">Absolute Save</div>
+                </li>
+                <li data-role="list-divider">Relative Alarm Delay(sec)</li>
+                <li><input id="relative-alarm-delay" name="relative-alarm-delay" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Repeat interval(sec)</li>
+                <li><input id="relative-alarm-period" name="relative-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Add</li>
+                <li>
+                    <div data-role="button" id="relative-alarm-save">Relative Save</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Alarm Delete</li>
+                <li>
+                    <div data-role="button" id="alarm-remove-all">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+              <font style="font-size:85%">
+                <p>Check if an application is launched on time</p><br>
+                <p>1. Install AlarmTest</p>
+                <p>2. Set absolute time</p>
+                <p>3. Set an interval</p>
+                <p>4. Save an absolute button</p>
+                <p>5. Watch AlarmTest is launched on time</p>
+                <p>6. Watch AlarmTest is launched after the interval</p>
+                <p>7. Remove the alarm</p>
+                <p>8. Set delay</p>
+                <p>9. Set an interval</p>
+                <p>10. Save a relative alarm</p>
+                <p>11. Watch AlarmTest is launched on time</p>
+                <p>12. Watch AlarmTest is launched after the interval</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Alarm/js/main.js b/ivi/tests/Alarm/js/main.js
new file mode 100755 (executable)
index 0000000..35160d2
--- /dev/null
@@ -0,0 +1,300 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    $("#alarm-remove-all").bind("vclick", function() {
+        removeAll();
+        return false;
+    });
+    $("#alarm-all-list").delegate("li", "vclick", function() {
+        alarmInfo($(this).data("id"));
+        return false;
+    });
+    $("#alarm-all-list").delegate("div", "vclick", function() {
+        removeAlarm($(this).parent().data("id"));
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install_(installUrl);
+        $("#absolute-alarm-save").removeClass("ui-disabled");
+        $("#relative-alarm-save").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").bind("vclick", function() {
+        addAlarmAbsolute();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#relative-alarm-save").bind("vclick", function() {
+        addAlarmRelative();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").addClass("ui-disabled");
+    $("#relative-alarm-save").addClass("ui-disabled");
+    $("#alarm-remove-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    displayAlarms();
+    alarmPre();
+});
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function displayAlarms() {
+    var alarmsArray = tizen.alarm.getAll();
+    var period, str = "";
+
+    for (var i = 0; i < alarmsArray.length; i++) {
+        if (alarmsArray[i].period) {
+            period = alarmsArray[i].period + " sec";
+        } else {
+            period = "none";
+        }
+
+        if (alarmsArray[i] instanceof tizen.AlarmAbsolute) {
+            var d = alarmsArray[i].date,
+            m = d.getMinutes();
+
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + (d.getMonth() + 1)
+                + '/'
+                + d.getDate()
+                + '/'
+                + d.getFullYear()
+                + ' '
+                + d.getHours()
+                + ':'
+                + ((m < 10) ? "0" + m : m)
+                + ' Absolute alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else if (alarmsArray[i] instanceof tizen.AlarmRelative) {
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + alarmsArray[i].delay
+                + ' sec Relative alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else {
+            alert("Wrong alarm instance");
+            break;
+        }
+    }
+    $("#alarm-all-list").html(str).trigger("create").listview("refresh");
+}
+
+function addAlarm(alarm) {
+    var arg;
+    arg = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view",
+            null,
+            null,
+            null,
+            [new tizen.ApplicationControlData("id", ["bhvtcalarm.AlarmTest"])]);
+
+    try {
+        tizen.alarm.add(alarm, "bhvtcalarm.AlarmTest", arg);
+    } catch (e) {
+        alert("error: " + e.message);
+    }
+}
+
+function addAlarmAbsolute() {
+    var period = parseInt($("#absolute-alarm-period").prop("value")),
+    time = $("#alarm-time").prop("value"),
+    year, month, date, hours, minutes, splits, d, t;
+
+    if (time === null || time === "" || period < 0) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        splits = time.split("T");
+        d = splits[0].split("-");
+        t = splits[1].split(":");
+
+        year = parseInt(d[0]);
+        month = parseInt(d[1]) - 1;
+        date = parseInt(d[2]);
+        hours = parseInt(t[0]);
+        minutes = parseInt(t[1]);
+
+        var inputDate = new Date(year, month, date, hours, minutes, 0, 0);
+        var myAlarm = new tizen.AlarmAbsolute(inputDate, (period > 0 ? period : null));
+
+        addAlarm(myAlarm);
+        alert("Absolute Alarm Added");
+        displayAlarms();
+    }
+}
+
+function addAlarmRelative() {
+    var period = parseInt($("#relative-alarm-period").prop("value")),
+    delay = parseInt($("#relative-alarm-delay").prop("value"));
+
+    if ((delay < 0) || (period < 0)) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        var myAlarm = new tizen.AlarmRelative(delay, period);
+
+        addAlarm(myAlarm);
+        alert("Relative Alarm Added");
+        displayAlarms();
+    }
+}
+
+function removeAll() {
+    tizen.alarm.removeAll();
+    alert("Alarm delete all");
+    displayAlarms();
+}
+
+function removeAlarm(id) {
+    try {
+        tizen.alarm.remove(id);
+        alert("Alarm delete");
+    } catch (e) {
+        alert("Alarm remove failed. The once alarm might be already removed automatically");
+    }
+    displayAlarms();
+}
+
+function alarmInfo(id) {
+    var alarm = tizen.alarm.get(id);
+
+    if (alarm) {
+        if (alarm instanceof tizen.AlarmAbsolute) {
+            alert("Next scheduled alarm is " + alarm.getNextScheduledDate());
+        } else {
+            alert("Remaining seconds is " + alarm.getRemainingSeconds() + " SECS");
+        }
+    } else {
+        alert("Alarm info retrieving failed<br/>This once alarm might be already removed automatically");
+        displayAlarms();
+    }
+}
+
+function install_(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">AlarmTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            install_flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            install_flag = false;
+        }
+};
+
+function alarmPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestAlarm.wgt",
+                    false,
+                    function() {
+                        console.log("Alarm Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Alarm/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/Alarm/res/TestAlarm b/ivi/tests/Alarm/res/TestAlarm
new file mode 100644 (file)
index 0000000..c028193
Binary files /dev/null and b/ivi/tests/Alarm/res/TestAlarm differ
diff --git a/ivi/tests/AppControlExtending/index.html b/ivi/tests/AppControlExtending/index.html
new file mode 100644 (file)
index 0000000..3c7d95e
--- /dev/null
@@ -0,0 +1,90 @@
+6<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Test the custom feature</li>
+                <li>
+                    <div data-role="button" id="install1" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Test the regular feature</li>
+                <li>
+                    <div data-role="button" id="install2" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Packages Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of launching the Application which control by user instead of system. Tests the two test Applications could be launched by App ID or customized AppControl's "operation" attribute by user.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the custom package.</li>
+              <li>Click the "Launch" button to launch the custom package.</li>
+              <li>Click the "Install" button to install the regular package.</li>
+              <li>Click the "Launch" button to launch the regular package.</li>
+              <li>Click the "Uninstall" button to uninstall the two widgets.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the test Applications launch successfully.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/AppControlExtending/js/main.js b/ivi/tests/AppControlExtending/js/main.js
new file mode 100644 (file)
index 0000000..edb15cd
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+var installUrl1;
+var installUrl2;
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install1").bind("vclick", function() {
+        install(installUrl1, "install1");
+    });
+    $("#install2").bind("vclick", function() {
+        install(installUrl2, "install2");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch("app-control1");
+        if(checkInstalledPkg("apcontrol2")) {
+            $("#install2").addClass("ui-disabled");
+            $("#launch2").removeClass("ui-disabled");
+        } else {
+            $("#install2").removeClass("ui-disabled");
+        }
+    });
+    $("#launch2").bind("vclick", function() {
+        launch("app-control2");
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        ["apcontrol1", "apcontrol2"].forEach(function(package_id) {
+            if(checkInstalledPkg(package_id)) {
+                setTimeout(function() {
+                    uninstall(package_id);
+                }, 1000);
+            }
+        });
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#install2").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("apcontrol1")) {
+        $("#install1").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        alert("The package " + packageId + " is uninstalled");
+    }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl1 = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "app_control_regular_wgt.wgt")
+            {
+                var Url2 = files[i].toURI();
+                installUrl2 = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            if(type == "install1") {
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+            if(type == "install2") {
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(type == "install1") {
+                $("#install1").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Install</div>');
+            }
+            if(type == "install2") {
+                $("#install2").addClass("ui-disabled");
+                $("#launch2").removeClass("ui-disabled");
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Install</div>');
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+
+    var onUninstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            if(packageId == "apcontrol1") {
+                $("#launch1").addClass("ui-disabled");
+            }
+            if(packageId == "apcontrol2") {
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(option) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        if (option == "app-control1"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl1_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, null, onSuccess, onError, null);
+        }else if (option == "app-control2"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl2_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, "apcontrol2.AppcontrolRegularWgt", onSuccess, onError, null);
+        }
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/app_control_custom_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_custom_wgt Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "app_control_regular_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/app_control_regular_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_regular_wgt Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControlExtending/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/AppControlExtending/res/app_control_custom_wgt b/ivi/tests/AppControlExtending/res/app_control_custom_wgt
new file mode 100644 (file)
index 0000000..a42f57c
Binary files /dev/null and b/ivi/tests/AppControlExtending/res/app_control_custom_wgt differ
diff --git a/ivi/tests/AppControlExtending/res/app_control_regular_wgt b/ivi/tests/AppControlExtending/res/app_control_regular_wgt
new file mode 100644 (file)
index 0000000..0cd2ed4
Binary files /dev/null and b/ivi/tests/AppControlExtending/res/app_control_regular_wgt differ
diff --git a/ivi/tests/Application/NOTICE b/ivi/tests/Application/NOTICE
new file mode 100644 (file)
index 0000000..cd11443
--- /dev/null
@@ -0,0 +1,23 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/audio.acc,
+res/audio.amr,
+res/audio.mp3,
+res/audio.wav,
+res/iconA.png,
+res/iconV.png,
+res/image.bmp,
+res/image.gif,
+res/image.jpeg,
+res/image.png,
+res/video.3gp,
+res/video.mp4 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/Application/index.html b/ivi/tests/Application/index.html
new file mode 100755 (executable)
index 0000000..00bc65a
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#image ul, li {list-style:none;}
+#audio ul, li {list-style:none;}
+#video ul, li {list-style:none;}
+#image img {margin:5px; width:65px; height:70px}
+#audio img {margin:5px; width:70px; height:70px}
+#video img {margin:5px; width:70px; height:70px}
+</style>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Image</li>
+            </ul>
+            <ul data-role="listview" id="image"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Audio</li>
+            </ul>
+            <ul data-role="listview" id="audio"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Video</li>
+            </ul>
+            <ul data-role="listview" id="video"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl File</li>
+                <li id="allFile">All File</li>
+                <li id="imageFile">Image File</li>
+                <li id="audioFile">Audio File</li>
+                <li id="videoFile">Video File</li>
+                <li data-role="list-divider">AppControl Browser</li>
+                <li id="tizen">https://www.tizen.org</li>
+                <li><input type="text" id="url" value="http://"/><div data-role="button" id="browser">Browser</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if AppControls are supported</p><br>
+                <p>1. Select a thumbnail in the AppControl Image category</p>
+                <p>2. Check if the original image is displayed</p>
+                <p>3. Select a music file in the AppControl Audio category</p>
+                <p>4. Check if the music file is played</p>
+                <p>5. Select a video file in the AppControl Video category</p>
+                <p>6. Check if the video file is played</p>
+                <p>5. Select or Input the URL in the AppControl Browser category</p>
+                <p>6. Check if the URL is browsed</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Application/js/main.js b/ivi/tests/Application/js/main.js
new file mode 100644 (file)
index 0000000..131be5a
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path = "", mime = "", name = "", Url = "";
+var thumAudio = "", thumVideo = "";
+var sharedDir;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#image").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlImage(path, mime, name);
+        return false;
+    });
+    $("#audio").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlAudio(path, mime, name);
+        return false;
+    });
+    $("#video").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlVideo(path, mime, name);
+        return false;
+    });
+    $("#allFile").bind("vclick", function() {
+        setAppControlFile("*/*");
+        return false;
+    });
+    $("#imageFile").bind("vclick", function() {
+        setAppControlFile("image/*");
+        return false;
+    });
+    $("#videoFile").bind("vclick", function() {
+        setAppControlFile("video/*");
+        return false;
+    });
+    $("#audioFile").bind("vclick", function() {
+        setAppControlFile("audio/*");
+        return false;
+    });
+    $("#tizen").bind("vclick", function() {
+        setAppControlBrowser("https://www.tizen.org");
+        return false;
+    });
+    $("#browser").bind("vclick", function() {
+        var url = $("#url").val();
+        setAppControlBrowser(url);
+        return false;
+    });
+    applicationPre();
+    file();
+});
+
+function file() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            var text = files[i].name.substring(0, 5);
+            if(text == "iconA")
+            {
+                thumAudio = files[i].toURI();
+                thumAudio = thumAudio.replace("file:///", "/");
+            }
+            if(text == "iconV")
+            {
+                thumVideo = files[i].toURI();
+                thumVideo = thumVideo.replace("file:///", "/");
+            }
+        }
+        file2();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function file2() {
+    var documentsDir, strImage = "", strVideo = "", strAudio = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var mime = files[i].name.replace(".", "/");
+                var text = files[i].name.substring(0, 5);
+                var file = files[i].name;
+                Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                if(text == "image")
+                    strImage += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + Url + '" alt="" />' + file + '</li>';
+                if(text == "audio")
+                    strAudio += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumAudio + '" alt="" />' + file + '</li>';
+                if(text == "video")
+                    strVideo += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumVideo + '" alt="" />' + file + '</li>';
+            }
+        }
+        $("#image").html(strImage).trigger("create").listview("refresh");
+        $("#audio").html(strAudio).trigger("create").listview("refresh");
+        $("#video").html(strVideo).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function setAppControlImage(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlAudio(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlVideo(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlFile(mime) {
+    var app = {attach:[]};
+    app.attach = [];
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/pick",
+            null,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+                app.attach.push(data[0].value[0]);
+                alert("Select File : " + app.attach[0]);
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlBrowser(url) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            url,
+            null);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function applicationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            sharedDir = tizen.application.getAppSharedURI();
+            sharedDir = sharedDir.replace("file:///", "/");
+            documentsDir.copyTo(
+                files[i].fullPath,
+                sharedDir+"/data/"+files[i].name,
+                true,
+                function() {
+                    console.log("PKGID/shared/data/ File Copy");
+                },
+                function(e){
+                    console.log("Error : " + e.name);
+                });
+        }
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Application/res',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/Application/res/audio.aac b/ivi/tests/Application/res/audio.aac
new file mode 100644 (file)
index 0000000..dea42a8
Binary files /dev/null and b/ivi/tests/Application/res/audio.aac differ
diff --git a/ivi/tests/Application/res/audio.amr b/ivi/tests/Application/res/audio.amr
new file mode 100644 (file)
index 0000000..81093ff
Binary files /dev/null and b/ivi/tests/Application/res/audio.amr differ
diff --git a/ivi/tests/Application/res/audio.mp3 b/ivi/tests/Application/res/audio.mp3
new file mode 100644 (file)
index 0000000..2b62d4c
Binary files /dev/null and b/ivi/tests/Application/res/audio.mp3 differ
diff --git a/ivi/tests/Application/res/audio.wav b/ivi/tests/Application/res/audio.wav
new file mode 100644 (file)
index 0000000..f336ec8
Binary files /dev/null and b/ivi/tests/Application/res/audio.wav differ
diff --git a/ivi/tests/Application/res/iconA.png b/ivi/tests/Application/res/iconA.png
new file mode 100644 (file)
index 0000000..394dfa3
Binary files /dev/null and b/ivi/tests/Application/res/iconA.png differ
diff --git a/ivi/tests/Application/res/iconV.png b/ivi/tests/Application/res/iconV.png
new file mode 100644 (file)
index 0000000..a809e1e
Binary files /dev/null and b/ivi/tests/Application/res/iconV.png differ
diff --git a/ivi/tests/Application/res/image.bmp b/ivi/tests/Application/res/image.bmp
new file mode 100644 (file)
index 0000000..2bc4bb5
Binary files /dev/null and b/ivi/tests/Application/res/image.bmp differ
diff --git a/ivi/tests/Application/res/image.gif b/ivi/tests/Application/res/image.gif
new file mode 100644 (file)
index 0000000..c2d950d
Binary files /dev/null and b/ivi/tests/Application/res/image.gif differ
diff --git a/ivi/tests/Application/res/image.jpeg b/ivi/tests/Application/res/image.jpeg
new file mode 100644 (file)
index 0000000..bce27ff
Binary files /dev/null and b/ivi/tests/Application/res/image.jpeg differ
diff --git a/ivi/tests/Application/res/image.png b/ivi/tests/Application/res/image.png
new file mode 100644 (file)
index 0000000..ee90c37
Binary files /dev/null and b/ivi/tests/Application/res/image.png differ
diff --git a/ivi/tests/Application/res/video.3gp b/ivi/tests/Application/res/video.3gp
new file mode 100644 (file)
index 0000000..0e98843
Binary files /dev/null and b/ivi/tests/Application/res/video.3gp differ
diff --git a/ivi/tests/Application/res/video.mp4 b/ivi/tests/Application/res/video.mp4
new file mode 100755 (executable)
index 0000000..e203ae2
Binary files /dev/null and b/ivi/tests/Application/res/video.mp4 differ
diff --git a/ivi/tests/ApplicationInvisible/css/main.css b/ivi/tests/ApplicationInvisible/css/main.css
new file mode 100644 (file)
index 0000000..b41a2c4
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+.container {
+    text-align: center;
+    padding: 50px;
+}
+.numbers {
+    line-height: 40px;
+    text-align: center;
+    width: 0.6em;
+    top: 0;
+    left: 0;
+    position: absolute;
+    color: white;
+}
+.timer {
+    padding: 10px;
+    background: black;
+    display: inline-block;
+    overflow: hidden;
+    position: relative;
+    border-radius: 5px;
+}
+.cell1 {
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+.cell2 {
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+.ch6 {
+    -webkit-animation: ch6 1000ms steps(6, end) infinite;
+    animation: ch6 1000ms steps(6, end) infinite;
+}
+.ch10 {
+    -webkit-animation: ch10 1000ms steps(10, end) infinite;
+    animation: ch10 1000ms steps(10, end) infinite;
+}
+
+.second {
+    -webkit-animation-duration: 10000ms;
+    animation-duration: 10000ms;
+}
+.seconds10 {
+    -webkit-animation-duration: 60000ms;
+    animation-duration: 60000ms;
+}
+@-webkit-keyframes ch10 {
+    100% {top: -400px;}
+    0% {top: 0;}
+}
+@keyframes ch10 {
+    100% {top: -400px;}
+    0% {top: 0;}
+}
+@-webkit-keyframes ch6 {
+    100% {top: -240px;}
+    0% {top: 0;}
+}
+@keyframes ch6 {
+    100% {top: -240px;}
+    0% {top: 0;}
+}
diff --git a/ivi/tests/ApplicationInvisible/index.html b/ivi/tests/ApplicationInvisible/index.html
new file mode 100644 (file)
index 0000000..2ffbc6d
--- /dev/null
@@ -0,0 +1,107 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <title>ApplicationInvisible</title>
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+  <link rel="stylesheet" type="text/css" href="css/main.css" />
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider"><div>Enter time</div></li><li><div>
+                    <span id="en_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Current time</div></li><li><div>
+                    <span id="current_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Difference time</div></li><li><div>
+                    <span id="diff_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>JS time</div></li><li><div>
+        <div class="container">
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers" id="js_time_tensecond"></div>
+                </div>
+                <div class="cell2">
+                    <div class="numbers" id="js_time_second"></div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+                <li data-role="list-divider"><div>Animation time :</div></li><li><div>
+        <div class="container">
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers seconds10 ch6">0 1 2 3 4 5 6</div>
+                </div>
+                <div class="cell2">
+                    <div class="numbers second ch10">0 1 2 3 4 5 6 7 8 9</div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies js and css animation will suspend when application goes invisible.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Launch another exist App(Webapp or Native app) to let this tct-behavior-test lost focus, what is, let it to background and not in top screen.</li>
+              <li>Resume tct-behavior-test to top screen, e.g. click tct-behavior-test window, or start task switcher and select tct-behavior-tests again.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "JS time" is different from the "Difference time".</li>
+              <li>The "Animation time" is different from the "Difference time".</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/ApplicationInvisible/js/main.js b/ivi/tests/ApplicationInvisible/js/main.js
new file mode 100644 (file)
index 0000000..64d5bf1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+var systime = new Date();
+var timer = systime.getTime();
+var timer2 = systime.toString().substr(15, 16);
+// Time interval
+var t = 1000;
+//Counter of js
+var Num = 0;
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    Refresh();
+    setInterval("Refresh();", t);
+    //The time when entry this page timer2
+    $("#en_time").html(timer2);
+    DisablePassButton();
+    document.addEventListener(visibilitychange, notification);
+});
+
+function Refresh() {
+    Num = Num + 1;
+    //The current time
+    var curtime = new Date();
+    var timer3 = curtime.toString().substr(15, 16);
+    $("#current_time").html(timer3);
+    //The true timer: NowTime - entryTime
+    $("#diff_time").html(Math.floor((new Date().getTime()-timer)/t) % 60);
+    //The timer of js
+    $("#js_time_tensecond").html((Num-1) / 10);
+    $("#js_time_second").html((Num-1) % 10);
+    if(Num == 60){
+        Num = 0;
+    }
+}
+
+function notification() {
+    EnablePassButton();
+}
diff --git a/ivi/tests/BatteryStatus/index.html b/ivi/tests/BatteryStatus/index.html
new file mode 100644 (file)
index 0000000..71794bb
--- /dev/null
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiong.cui@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider">battery default values</li>
+        <li>
+          <div><a id="default" data-role="button" href="w3c/battery-created.html" data-ajax="false">Test battery default values</a></div>
+        </li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">battery discharging</li>
+        <li>
+          <div><a id="discharging" data-role="button" href="w3c/battery-discharging-manual.html" data-ajax="false">Test battery discharging</a></div>
+        </li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">charger plugged</li>
+        <li>
+          <div><a id="plugged" data-role="button" href="w3c/battery-plugged-in-manual.html" data-ajax="false">Test charger plugged</a></div>
+        </li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">charger unplugged</li>
+        <li>
+          <div><a id="unplugged" data-role="button" href="w3c/battery-unplugged-manual.html" data-ajax="false">Test charger unplugged</a></div>
+        </li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">battery charging</li>
+        <li>
+          <div><a id="charging" data-role="button" href="w3c/battery-charging-manual.html" data-ajax="false">Test battery charging</a></div>
+        </li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">battery full</li>
+        <li>
+          <div><a id="full" data-role="button" href="w3c/battery-full.html" data-ajax="false">Test battery full</a></div>
+        </li>
+      </ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test purpose</p>
+          <p>Verifies the functionality of battery status, event work well while charging, discharging, plug and unplug charger, battery full.</p>
+        <p>Test battery default values</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+            <li>The implementation is unable to report the battery's charging state, charging time, level or remaining time respectively.</li>
+            <li>The device is unplugged from the charger before this test case is run</li>
+          </ol>
+          Test steps:
+          <ol>
+            <li>Launch 'Test battery default values'</li>
+          </ol>
+        </ul>
+        <p>Test battery discharging</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+            <li>The device is unplugged from the charger before this test is run.</li>
+            <li>The battery must neither be empty or full, nor reach empty or full capacity during the test.</li>
+          </ol>
+          Test steps:
+          <ol>
+            <li>Launch 'Test battery discharging'</li>
+          </ol>
+        </ul>
+        <p>Test battery plugged</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+            <li>The device is unplugged from the charger before this test is run.</li>
+            <li>The battery must not be full or reach full capacity during the time the test is run.</li>
+          </ol>
+          Test steps:
+          <ol>
+            <li>Plug in the charger and wait for all the tests to complete.</li>
+            <li>Launch 'Test battery plugged'</li>
+          </ol>
+        </ul>
+        <p>Test battery unplugged</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+            <li>The device is plugged in to the charger before this test is run.</li>
+            <li>The battery must not be full or reach full capacity during the time the test is run.</li>
+          </ol>
+         Test steps:
+          <ol>
+            <li>Unplug the charger and wait for all the tests to complete.</li>
+            <li>Launch 'Test battery unplugged'</li>
+          </ol>
+        </ul>
+        <p>Test battery charging</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+            <li>The device is plugged in to the charger before this test is run.</li>
+            <li>The battery must neither be empty or full, nor reach empty or full capacity during the test.</li>
+          </ol>
+         Test steps:
+          <ol>
+            <li>Launch 'Test battery charging'</li>
+          </ol>
+        </ul>
+        <p>Test battery full</p>
+        <ul>
+          Pre-conditions:
+          <ol>
+          <li>The device is plugged in to the charger before this test is run.</li>
+          <li>The battery is full.</li>
+          </ol>
+         Test steps:
+          <ol>
+            <li>Launch 'Test battery full'</li>
+          </ol>
+        </ul>
+        <p>Expected Result</p>
+          <p>The tests all pass.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/COPYING b/ivi/tests/BatteryStatus/w3c/COPYING
new file mode 100644 (file)
index 0000000..1d3d62a
--- /dev/null
@@ -0,0 +1,32 @@
+This test suite comes from
+https://github.com/w3c/web-platform-tests/
+with modification:
+1. Modify the necessary adjustment on reference path to test harness.
+2.
+ + <style>
+ +   .button {
+ +     background: #eee;
+ +     border: 1px solid #ccc;
+ +     border-radius: 5px;
+ +     font-weight: bold;
+ +     font-size: 15px;
+ +     padding: 8px 2px;
+ +     width: 340px;
+ +   }
+ + </style>
+
+ + <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+
+The testharness come from
+https://github.com/w3c/testharness.js
+without any modification
+
+
+These tests are copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
+
diff --git a/ivi/tests/BatteryStatus/w3c/battery-charging-manual.html b/ivi/tests/BatteryStatus/w3c/battery-charging-manual.html
new file mode 100644 (file)
index 0000000..5476712
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <script src="countdown.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <meta name="flags" content="interact">
+    <style>
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to correct values, when the battery is charging.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The device is plugged in to the charger before this test is run.
+      </li>
+      <li>
+        The battery must neither be empty or full, nor reach empty or full capacity during the test.
+      </li>
+    </ol>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+
+      setup({ explicit_timeout: true });
+
+      test(function() {
+        assert_true(navigator.battery.charging);
+      }, 'The charging attribute must be set to true.');
+      
+      test(function() {
+        assert_true(navigator.battery.chargingTime < Infinity);
+      }, 'The chargingTime attribute must be set to the time remaining in seconds until the system\'s battery is completely charged. If the reported charging time ' + navigator.battery.chargingTime + ' seconds or ' + Math.round(navigator.battery.chargingTime/60) + ' minutes is not correct, please indicate that the test has failed.');
+      
+      test(function() {
+        assert_true(navigator.battery.dischargingTime === Infinity);
+      }, 'The dischargingTime attribute must be set to the value positive Infinity.');
+      
+      test(function() {
+        assert_true(0 < navigator.battery.level && navigator.battery.level < 1.0);
+      }, 'The level attribute must be set to the current battery level scaled from 0 to 1.0. If the reported battery level ' + navigator.battery.level + ' is not correct, please indicate that the test has failed.');
+      
+      var onlevelchange_test = async_test('When the battery level is updated, must increase the level attribute\'s value and fire a levelchange event.');
+      var battery_level = navigator.battery.level;
+      navigator.battery.onlevelchange = onlevelchange_test.step_func(function (e) {
+        assert_true(navigator.battery.level > battery_level, 'The value of the level attribute must increase.');
+        onlevelchange_test.done();
+      });
+      
+    })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/battery-created.html b/ivi/tests/BatteryStatus/w3c/battery-created.html
new file mode 100644 (file)
index 0000000..cfda7f3
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <style>
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      <strong>
+        This test is only useful on devices that expose the BatteryManager interface,
+        but lack a backend implementation.
+      </strong>
+    </p>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to their default values.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The implementation is unable to report the battery's charging state,
+        charging time, level or remaining time respectively.
+      </li>
+      <li>
+        The device is unplugged from the charger before this test case is run.
+      </li>
+    </ol>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+      test(function() {
+        var b = navigator.battery||navigator.webkitBattery;;
+        assert_true(b.charging === true, 'charging must be set to true');
+        assert_true(b.chargingTime === 0, 'chargingTime must be set to 0');
+        assert_true(b.level === 1.0, 'level must be set to 1.0');
+        assert_true(b.dischargingTime === Infinity, 'dischargingTime must be set to Infinity');
+
+      }, 'When a BatteryManager object is created, charging must be set to true, ' +
+      'chargingTime to 0, level to 1.0 and dischargingTime to the value positive ' +
+      'Infinity, if the implementation is unable to report the battery\'s charging ' +
+      'state, charging time, level or remaining time respectively.');
+      })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/battery-discharging-manual.html b/ivi/tests/BatteryStatus/w3c/battery-discharging-manual.html
new file mode 100644 (file)
index 0000000..ba29d16
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <script src="countdown.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <meta name="flags" content="interact">
+    <style>
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to correct values, when the battery is discharging.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The device is unplugged from the charger before this test is run.
+      </li>
+      <li>
+        The battery must neither be empty or full, nor reach empty or full capacity during the test.
+      </li>
+    </ol>
+    <p>
+      The highest prime number discovered so far is:  <output id="prime"></output>
+    </p>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+
+      setup({ explicit_timeout: true });
+      navigator.battery = navigator.battery||navigator.webkitBattery;
+      test(function() {
+        assert_false(navigator.battery.charging);
+      }, 'The charging attribute must be set to false.');
+      
+      test(function() {
+        assert_true(navigator.battery.chargingTime === Infinity);
+      }, 'The chargingTime attribute must be set to the value positive Infinity.');
+      
+      test(function() {
+        assert_true(navigator.battery.dischargingTime < Infinity);
+      }, 'The dischargingTime attribute must be set to the time remaining in seconds until the system\'s battery is completely discharged. If the reported discharging time ' + navigator.battery.dischargingTime + ' seconds or ' + Math.round(navigator.battery.dischargingTime/60) + ' minutes is not correct, please indicate that the test has failed.');
+      
+      test(function() {
+        assert_true(0 <= navigator.battery.level && navigator.battery.level <= 1.0);
+      }, 'The level attribute must be set to the current battery level scaled from 0 to 1.0');
+      
+      var onlevelchange_test = async_test('When the battery level is updated, must decrease the level attribute\'s value and fire a levelchange event. If the reported battery level ' + navigator.battery.level + ' is not correct, please indicate that the test has failed.');
+      var battery_level = navigator.battery.level;
+      
+      // compute primes to deplete the battery faster
+      var w = new Worker('prime.js');
+      w.postMessage('compute');
+      w.onmessage = function (e) {
+        document.querySelector('#prime').textContent = e.data;
+      };
+      
+      navigator.battery.onlevelchange = onlevelchange_test.step_func(function (e) {
+        assert_true(navigator.battery.level < battery_level, 'The value of the level attribute must decrease.');
+        onlevelchange_test.done();
+        w.terminate();
+      });
+      
+      add_completion_callback(function () {
+        w.terminate();
+      });
+      
+    })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/battery-full.html b/ivi/tests/BatteryStatus/w3c/battery-full.html
new file mode 100644 (file)
index 0000000..e380777
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <meta name="flags" content="interact">
+    <style>
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to correct values, when the battery is full.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The device is plugged in to the charger before this test is run.
+      </li>
+      <li>
+        The battery is full.
+      </li>
+    </ol>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+      navigator.battery = navigator.battery||navigator.webkitBattery;
+
+      test(function() {
+        assert_true(navigator.battery.charging);
+      }, 'The charging attribute must be set to true if the battery is full (the "otherwise" condition).');
+      
+      test(function() {
+        assert_true(navigator.battery.chargingTime === 0);
+      }, 'The chargingTime attribute must be set to 0.');
+      
+      test(function() {
+        assert_true(navigator.battery.dischargingTime === Infinity);
+      }, 'The dischargingTime attribute must be set to the value positive Infinity (the "otherwise" condition).');
+      
+      test(function() {
+        assert_true(navigator.battery.level === 1.0);
+      }, 'The level attribute must be set to the value 1.0.');
+      
+    })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/battery-plugged-in-manual.html b/ivi/tests/BatteryStatus/w3c/battery-plugged-in-manual.html
new file mode 100644 (file)
index 0000000..45a6c9e
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <script src="countdown.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <style>
+      #note { background-color: #fef1b5; border: solid 1px #cdab2d; padding: 5px; margin: 15px; display: none; }
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+    <meta name="flags" content="interact">
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to correct values, with corresponding events fired, when the charger is plugged in.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The device is unplugged from the charger before this test is run.
+      </li>
+      <li>
+        The battery must not be full or reach full capacity during the time the test is run.
+      </li>
+    </ol>
+    <div id="note">
+      Plug in the charger and wait for all the tests to complete.
+    </div>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+
+      setup({ explicit_timeout: true });
+      navigator.battery = navigator.battery||navigator.webkitBattery;
+      var onchargingchange_test = async_test('When the device is plugged in and its charging state is updated, must set the charging attribute\'s value to true and fire a chargingchange event.');
+      navigator.battery.onchargingchange = onchargingchange_test.step_func(function (e) {
+        assert_true(navigator.battery.charging, 'The charging attribute must be set to true.')
+        onchargingchange_test.done();
+      });
+      
+      var onchargingtimechange_test = async_test('When the device is plugged in and its charging time is updated, must set the chargingTime attribute\'s value and fire a chargingtimechange event. If the reported charging time ' + navigator.battery.chargingTime + ' seconds or ' + Math.round(navigator.battery.chargingTime/60) + ' minutes is not correct, please indicate that the test has failed.');
+      var battery_chargingtime = navigator.battery.chargingTime;
+      navigator.battery.onchargingtimechange = onchargingtimechange_test.step_func(function (e) {
+        assert_true(navigator.battery.chargingTime < battery_chargingtime, 'The value of the chargingTime attribute must decrease.');
+        onchargingtimechange_test.done();
+      });
+      
+      var ondischargingtimechange_test = async_test('When the device is plugged in and its discharging time is updated, must set the dischargingTime attribute\'s value to Infinity and fire a dischargingtimechange event.');
+      var battery_dischargingtime = navigator.battery.dischargingTime;
+      navigator.battery.ondischargingtimechange = ondischargingtimechange_test.step_func(function (e) {
+        assert_true(navigator.battery.dischargingTime === Infinity, 'The value of the dischargingTime attribute must be set to Infinity.');
+        ondischargingtimechange_test.done();
+      });
+      
+      var onlevelchange_test = async_test('When the device is plugged in and the battery level is updated, must set the level attribute\'s value and fire a levelchange event.');
+      var battery_level = navigator.battery.level;
+      navigator.battery.onlevelchange = onlevelchange_test.step_func(function (e) {
+        assert_true(navigator.battery.level > 0 && navigator.battery.level < 1.0, 'The level attribute must be set to the current battery level scaled from 0 to 1.0. If the reported battery level ' + navigator.battery.level + ' is not correct, please indicate that the test has failed.');
+        onlevelchange_test.done();
+      });
+      
+      setTimeout(function() {
+        var note = document.querySelector('#note');
+        note.style.display = 'block';
+        navigator.battery.onchargingchange = function (e) {
+          if (navigator.battery.charging) {
+            note.style.display = 'none';
+          }
+        };
+      }, 4000);
+      
+      })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/battery-unplugged-manual.html b/ivi/tests/BatteryStatus/w3c/battery-unplugged-manual.html
new file mode 100644 (file)
index 0000000..27ce7ac
--- /dev/null
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <title>Battery Status API Test Suite</title>
+    <script src="testharness.js"></script>
+    <script src="countdown.js"></script>
+    <link rel="stylesheet" href="testharness.css" media="all"/>
+    <style>
+      #note { background-color: #fef1b5; border: solid 1px #cdab2d; padding: 5px; margin: 15px; display: none; }
+      .button {
+        background: #eee;
+        border: 1px solid #ccc;
+        border-radius: 5px;
+        font-weight: bold;
+        font-size: 15px;
+        padding: 8px 2px;
+        width: 340px;
+      }
+    </style>
+    <meta name="flags" content="interact">
+  </head>
+  <body>
+    <h1>Description</h1>
+    <p>
+      This test validates that all of the navigator.battery attributes exist and are set to correct values, with corresponding events fired, when the charger is unplugged.
+    </p>
+    <h2>Preconditions</h2>
+    <ol>
+      <li>
+        The device is plugged in to the charger before this test is run.
+      </li>
+      <li>
+        The battery must not be full or reach full capacity during the time the test is run.
+      </li>
+    </ol>
+    <p>
+      The highest prime number discovered so far is:  <output id="prime"></output>
+    </p>
+    <div id="note">
+      Unplug the charger and wait for all the tests to complete.
+    </div>
+    <div><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></div>
+    <div id="log"></div>
+    <script>
+    (function() {
+
+      setup({ explicit_timeout: true });
+      navigator.battery = navigator.battery||navigator.webkitBattery;
+      var onchargingchange_test = async_test('When the device is unplugged in and its charging state is updated, must set the charging attribute\'s value to false and fire a chargingchange event.');
+      navigator.battery.onchargingchange = onchargingchange_test.step_func(function (e) {
+        assert_false(navigator.battery.charging, 'The charging attribute must be set to false.')
+        onchargingchange_test.done();
+      });
+      
+      var onchargingtimechange_test = async_test('When the device is unplugged in and its charging time is updated, must set the chargingTime attribute\'s value to Infinity and fire a chargingtimechange event.');
+      var battery_chargingtime = navigator.battery.chargingTime;
+      navigator.battery.onchargingtimechange = onchargingtimechange_test.step_func(function (e) {
+        assert_true(navigator.battery.chargingTime === Infinity, 'The value of the chargingTime attribute must be set to Infinity.');
+        onchargingtimechange_test.done();
+      });
+      
+      var ondischargingtimechange_test = async_test('When the device is unplugged in and its discharging time is updated, must set the dischargingTime attribute\'s value and fire a dischargingtimechange event.  If the reported discharging time ' + navigator.battery.dischargingTime + ' seconds or ' + Math.round(navigator.battery.dischargingTime/60) + ' minutes is not correct, please indicate that the test has failed.');
+      var battery_dischargingtime = navigator.battery.dischargingTime;
+      navigator.battery.ondischargingtimechange = ondischargingtimechange_test.step_func(function (e) {
+        assert_true(navigator.battery.dischargingTime < Infinity, 'The value of the dischargingTime attribute must be set to the remaining discharging time.');
+        ondischargingtimechange_test.done();
+      });
+      
+      var onlevelchange_test = async_test('When the device is plugged in and the battery level is updated, must set the level attribute\'s value and fire a levelchange event.');
+      var battery_level = navigator.battery.level;
+      
+      // compute primes to deplete the battery faster
+      var w = new Worker('prime.js');
+      w.postMessage('compute');
+      w.onmessage = function (e) {
+        document.querySelector('#prime').textContent = e.data;
+      };
+      
+      navigator.battery.onlevelchange = onlevelchange_test.step_func(function (e) {
+        assert_true(navigator.battery.level > 0 && navigator.battery.level < 1.0, 'The level attribute must be set to the current battery level scaled from 0 to 1.0.');
+        onlevelchange_test.done();
+        w.terminate();
+      });
+
+      add_completion_callback(function () {
+        w.terminate();
+      });
+
+      setTimeout(function() {
+        var note = document.querySelector('#note');
+        note.style.display = 'block';
+        navigator.battery.onchargingchange = function (e) {
+          if (!navigator.battery.charging) {
+            note.style.display = 'none';
+          }
+        };
+      }, 4000);
+      
+      })();
+    </script>
+  </body>
+</html>
diff --git a/ivi/tests/BatteryStatus/w3c/countdown.js b/ivi/tests/BatteryStatus/w3c/countdown.js
new file mode 100644 (file)
index 0000000..37026a7
--- /dev/null
@@ -0,0 +1,38 @@
+function countdown(prop) {
+  var seconds = !isNaN(parseInt(prop.timeout, 10)) ? (prop.timeout / 1000) : 0,
+      body = document.getElementsByTagName('body')[0],
+      div = document.createElement('div'),
+      timer, remaining_time, min, sec;
+
+  add_completion_callback(function () {
+    clearInterval(timer);
+    body.removeChild(div);
+  });
+  
+  div.innerHTML = 'This test will timeout in <span id="remaining_time">...</span>';
+  body.appendChild(div);
+    
+  remaining_time = document.querySelector('#remaining_time');
+  
+  timer = setInterval(function() {
+    function zeroPad(n) {
+      return (n < 10) ? '0' + n : n;
+    }
+  
+    if (seconds / 60 >= 1) {
+      min = Math.floor(seconds / 60);
+      sec = seconds % 60;
+    } else {
+      min = 0;
+      sec = seconds;
+    }
+    
+    if (seconds === 0) {
+      div.innerHTML = 'Timeout exceeded. Increase the timeout and re-run.';
+      clearInterval(timer);
+    }
+    
+    remaining_time.textContent = zeroPad(min) + ':' + zeroPad(sec);
+    seconds--;
+  }, 1000);
+}
diff --git a/ivi/tests/BatteryStatus/w3c/prime.js b/ivi/tests/BatteryStatus/w3c/prime.js
new file mode 100644 (file)
index 0000000..d532080
--- /dev/null
@@ -0,0 +1,35 @@
+// adapted from http://html5demos.com/worker
+
+var running = false;
+
+onmessage = function (event) {
+  // doesn't matter what the message is, just toggle the worker
+  if (running == false) {
+    running = true;
+    run(1);
+  } else {
+    running = false;
+  }
+};
+
+function run(n) {
+  // split the task into 20k chunks
+  var limit = n + 20000;
+  search: while (running && n < limit) {
+    n += 1;
+    for (var i = 2; i <= Math.sqrt(n); i += 1) {
+      if (n % i == 0) {
+        continue search;
+      }
+    }
+    // found a prime!
+    postMessage(n);
+  }
+  if (n === limit) {
+    // wait for the UI thread to update itself
+    setTimeout(function(start_time) {
+      // resume prime computation at n
+      run(n);
+    }, 150);
+  }
+}
\ No newline at end of file
diff --git a/ivi/tests/BatteryStatus/w3c/testharness.css b/ivi/tests/BatteryStatus/w3c/testharness.css
new file mode 100644 (file)
index 0000000..365084f
--- /dev/null
@@ -0,0 +1,92 @@
+html {
+    font-family:DejaVu Sans, Bitstream Vera Sans, Arial, Sans;
+}
+
+#log .warning,
+#log .warning a {
+  color: black;
+  background: yellow;
+}
+
+#log .error,
+#log .error a {
+  color: white;
+  background: red;
+}
+
+#log pre {
+  border: 1px solid black;
+  padding: 1em;
+}
+
+section#summary {
+    margin-bottom:1em;
+}
+
+table#results {
+    border-collapse:collapse;
+    table-layout:fixed;
+    width:100%;
+}
+
+table#results th:first-child,
+table#results td:first-child {
+    width:4em;
+}
+
+table#results th:last-child,
+table#results td:last-child {
+    width:50%;
+}
+
+table#results.assertions th:last-child,
+table#results.assertions td:last-child {
+    width:35%;
+}
+
+table#results th {
+    padding:0;
+    padding-bottom:0.5em;
+    border-bottom:medium solid black;
+}
+
+table#results td {
+    padding:1em;
+    padding-bottom:0.5em;
+    border-bottom:thin solid black;
+}
+
+tr.pass > td:first-child {
+    color:green;
+}
+
+tr.fail > td:first-child {
+    color:red;
+}
+
+tr.timeout > td:first-child {
+    color:red;
+}
+
+tr.notrun > td:first-child {
+    color:blue;
+}
+
+.pass > td:first-child, .fail > td:first-child, .timeout > td:first-child, .notrun > td:first-child {
+    font-variant:small-caps;
+}
+
+table#results span {
+    display:block;
+}
+
+table#results span.expected {
+    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+    white-space:pre;
+}
+
+table#results span.actual {
+    font-family:DejaVu Sans Mono, Bitstream Vera Sans Mono, Monospace;
+    white-space:pre;
+}
+
diff --git a/ivi/tests/BatteryStatus/w3c/testharness.js b/ivi/tests/BatteryStatus/w3c/testharness.js
new file mode 100644 (file)
index 0000000..b45d04c
--- /dev/null
@@ -0,0 +1,2222 @@
+/*
+Distributed under both the W3C Test Suite License [1] and the W3C
+3-clause BSD License [2]. To contribute to a W3C Test Suite, see the
+policies and contribution forms [3].
+
+[1] http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+[2] http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+[3] http://www.w3.org/2004/10/27-testcases
+*/
+
+/*
+ * == Introduction ==
+ *
+ * This file provides a framework for writing testcases. It is intended to
+ * provide a convenient API for making common assertions, and to work both
+ * for testing synchronous and asynchronous DOM features in a way that
+ * promotes clear, robust, tests.
+ *
+ * == Basic Usage ==
+ *
+ * To use this file, import the script and the testharnessreport script into
+ * the test document:
+ * <script src="/resources/testharness.js"></script>
+ * <script src="/resources/testharnessreport.js"></script>
+ *
+ * Within each file one may define one or more tests. Each test is atomic
+ * in the sense that a single test has a single result (pass/fail/timeout).
+ * Within each test one may have a number of asserts. The test fails at the
+ * first failing assert, and the remainder of the test is (typically) not run.
+ *
+ * If the file containing the tests is a HTML file with an element of id "log"
+ * this will be populated with a table containing the test results after all
+ * the tests have run.
+ *
+ * NOTE: By default tests must be created before the load event fires. For ways
+ *       to create tests after the load event, see "Determining when all tests
+ *       are complete", below
+ *
+ * == Synchronous Tests ==
+ *
+ * To create a synchronous test use the test() function:
+ *
+ * test(test_function, name, properties)
+ *
+ * test_function is a function that contains the code to test. For example a
+ * trivial passing test would be:
+ *
+ * test(function() {assert_true(true)}, "assert_true with true")
+ *
+ * The function passed in is run in the test() call.
+ *
+ * properties is an object that overrides default test properties. The
+ * recognised properties are:
+ *    timeout - the test timeout in ms
+ *
+ * e.g.
+ * test(test_function, "Sample test", {timeout:1000})
+ *
+ * would run test_function with a timeout of 1s.
+ *
+ * Additionally, test-specific metadata can be passed in the properties. These
+ * are used when the individual test has different metadata from that stored 
+ * in the <head>.
+ * The recognized metadata properties are:
+ *
+ *    help - The url of the part of the specification being tested
+ *
+ *    assert - A human readable description of what the test is attempting 
+ *             to prove
+ *
+ *    author - Name and contact information for the author of the test in the
+ *             format: "Name <email_addr>" or "Name http://contact/url"
+ *
+ * == Asynchronous Tests ==
+ *
+ * Testing asynchronous features is somewhat more complex since the result of
+ * a test may depend on one or more events or other callbacks. The API provided
+ * for testing these features is indended to be rather low-level but hopefully
+ * applicable to many situations.
+ *
+ * To create a test, one starts by getting a Test object using async_test:
+ *
+ * async_test(name, properties)
+ *
+ * e.g.
+ * var t = async_test("Simple async test")
+ *
+ * Assertions can be added to the test by calling the step method of the test
+ * object with a function containing the test assertions:
+ *
+ * t.step(function() {assert_true(true)});
+ *
+ * When all the steps are complete, the done() method must be called:
+ *
+ * t.done();
+ *
+ * As a convenience, async_test can also takes a function as first argument.
+ * This function is called with the test object as both its `this` object and
+ * first argument. The above example can be rewritten as:
+ *
+ * async_test(function(t) {
+ *     object.some_event = function() {
+ *         t.step(function (){assert_true(true); t.done();});
+ *     };
+ * }, "Simple async test");
+ *
+ * which avoids cluttering the global scope with references to async
+ * tests instances.
+ *
+ * The properties argument is identical to that for test().
+ *
+ * In many cases it is convenient to run a step in response to an event or a
+ * callback. A convenient method of doing this is through the step_func method
+ * which returns a function that, when called runs a test step. For example
+ *
+ * object.some_event = t.step_func(function(e) {assert_true(e.a)});
+ *
+ * == Making assertions ==
+ *
+ * Functions for making assertions start assert_
+ * The best way to get a list is to look in this file for functions names
+ * matching that pattern. The general signature is
+ *
+ * assert_something(actual, expected, description)
+ *
+ * although not all assertions precisely match this pattern e.g. assert_true
+ * only takes actual and description as arguments.
+ *
+ * The description parameter is used to present more useful error messages when
+ * a test fails
+ *
+ * NOTE: All asserts must be located in a test() or a step of an async_test().
+ *       asserts outside these places won't be detected correctly by the harness
+ *       and may cause a file to stop testing.
+ *
+ * == Setup ==
+ *
+ * Sometimes tests require non-trivial setup that may fail. For this purpose
+ * there is a setup() function, that may be called with one or two arguments.
+ * The two argument version is:
+ *
+ * setup(func, properties)
+ *
+ * The one argument versions may omit either argument.
+ * func is a function to be run synchronously. setup() becomes a no-op once
+ * any tests have returned results. Properties are global properties of the test
+ * harness. Currently recognised properties are:
+ *
+ * timeout - The time in ms after which the harness should stop waiting for
+ *           tests to complete (this is different to the per-test timeout
+ *           because async tests do not start their timer until .step is called)
+ *
+ * explicit_done - Wait for an explicit call to done() before declaring all
+ *                 tests complete (see below)
+ *
+ * output_document - The document to which results should be logged. By default
+ *                   this is the current document but could be an ancestor
+ *                   document in some cases e.g. a SVG test loaded in an HTML
+ *                   wrapper
+ *
+ * explicit_timeout - disable file timeout; only stop waiting for results
+ *                    when the timeout() function is called (typically for
+ *                    use when integrating with some existing test framework
+ *                    that has its own timeout mechanism).
+ *
+ * == Determining when all tests are complete ==
+ *
+ * By default the test harness will assume there are no more results to come
+ * when:
+ * 1) There are no Test objects that have been created but not completed
+ * 2) The load event on the document has fired
+ *
+ * This behaviour can be overridden by setting the explicit_done property to
+ * true in a call to setup(). If explicit_done is true, the test harness will
+ * not assume it is done until the global done() function is called. Once done()
+ * is called, the two conditions above apply like normal.
+ *
+ * == Generating tests ==
+ *
+ * NOTE: this functionality may be removed
+ *
+ * There are scenarios in which is is desirable to create a large number of
+ * (synchronous) tests that are internally similar but vary in the parameters
+ * used. To make this easier, the generate_tests function allows a single
+ * function to be called with each set of parameters in a list:
+ *
+ * generate_tests(test_function, parameter_lists, properties)
+ *
+ * For example:
+ *
+ * generate_tests(assert_equals, [
+ *     ["Sum one and one", 1+1, 2],
+ *     ["Sum one and zero", 1+0, 1]
+ *     ])
+ *
+ * Is equivalent to:
+ *
+ * test(function() {assert_equals(1+1, 2)}, "Sum one and one")
+ * test(function() {assert_equals(1+0, 1)}, "Sum one and zero")
+ *
+ * Note that the first item in each parameter list corresponds to the name of
+ * the test.
+ *
+ * The properties argument is identical to that for test(). This may be a 
+ * single object (used for all generated tests) or an array.
+ *
+ * == Callback API ==
+ *
+ * The framework provides callbacks corresponding to 3 events:
+ *
+ * start - happens when the first Test is created
+ * result - happens when a test result is recieved
+ * complete - happens when all results are recieved
+ *
+ * The page defining the tests may add callbacks for these events by calling
+ * the following methods:
+ *
+ *   add_start_callback(callback) - callback called with no arguments
+ *   add_result_callback(callback) - callback called with a test argument
+ *   add_completion_callback(callback) - callback called with an array of tests
+ *                                       and an status object
+ *
+ * tests have the following properties:
+ *   status: A status code. This can be compared to the PASS, FAIL, TIMEOUT and
+ *           NOTRUN properties on the test object
+ *   message: A message indicating the reason for failure. In the future this
+ *            will always be a string
+ *
+ *  The status object gives the overall status of the harness. It has the
+ *  following properties:
+ *    status: Can be compared to the OK, ERROR and TIMEOUT properties
+ *    message: An error message set when the status is ERROR
+ *
+ * == External API ==
+ *
+ * In order to collect the results of multiple pages containing tests, the test
+ * harness will, when loaded in a nested browsing context, attempt to call
+ * certain functions in each ancestor and opener browsing context:
+ *
+ * start - start_callback
+ * result - result_callback
+ * complete - completion_callback
+ *
+ * These are given the same arguments as the corresponding internal callbacks
+ * described above.
+ *
+ * == External API through cross-document messaging ==
+ *
+ * Where supported, the test harness will also send messages using
+ * cross-document messaging to each ancestor and opener browsing context. Since
+ * it uses the wildcard keyword (*), cross-origin communication is enabled and
+ * script on different origins can collect the results.
+ *
+ * This API follows similar conventions as those described above only slightly
+ * modified to accommodate message event API. Each message is sent by the harness
+ * is passed a single vanilla object, available as the `data` property of the
+ * event object. These objects are structures as follows:
+ *
+ * start - { type: "start" }
+ * result - { type: "result", test: Test }
+ * complete - { type: "complete", tests: [Test, ...], status: TestsStatus }
+ *
+ * == List of assertions ==
+ *
+ * assert_true(actual, description)
+ *   asserts that /actual/ is strictly true
+ *
+ * assert_false(actual, description)
+ *   asserts that /actual/ is strictly false
+ *
+ * assert_equals(actual, expected, description)
+ *   asserts that /actual/ is the same value as /expected/
+ *
+ * assert_not_equals(actual, expected, description)
+ *   asserts that /actual/ is a different value to /expected/. Yes, this means
+ *   that "expected" is a misnomer
+ *
+ * assert_in_array(actual, expected, description)
+ *   asserts that /expected/ is an Array, and /actual/ is equal to one of the
+ *   members -- expected.indexOf(actual) != -1
+ *
+ * assert_array_equals(actual, expected, description)
+ *   asserts that /actual/ and /expected/ have the same length and the value of
+ *   each indexed property in /actual/ is the strictly equal to the corresponding
+ *   property value in /expected/
+ *
+ * assert_approx_equals(actual, expected, epsilon, description)
+ *   asserts that /actual/ is a number within +/- /epsilon/ of /expected/
+ *
+ * assert_less_than(actual, expected, description)
+ *   asserts that /actual/ is a number less than /expected/
+ *
+ * assert_greater_than(actual, expected, description)
+ *   asserts that /actual/ is a number greater than /expected/
+ *
+ * assert_less_than_equal(actual, expected, description)
+ *   asserts that /actual/ is a number less than or equal to /expected/
+ *
+ * assert_greater_than_equal(actual, expected, description)
+ *   asserts that /actual/ is a number greater than or equal to /expected/
+ *
+ * assert_regexp_match(actual, expected, description)
+ *   asserts that /actual/ matches the regexp /expected/
+ *
+ * assert_class_string(object, class_name, description)
+ *   asserts that the class string of /object/ as returned in
+ *   Object.prototype.toString is equal to /class_name/.
+ *
+ * assert_own_property(object, property_name, description)
+ *   assert that object has own property property_name
+ *
+ * assert_inherits(object, property_name, description)
+ *   assert that object does not have an own property named property_name
+ *   but that property_name is present in the prototype chain for object
+ *
+ * assert_idl_attribute(object, attribute_name, description)
+ *   assert that an object that is an instance of some interface has the
+ *   attribute attribute_name following the conditions specified by WebIDL
+ *
+ * assert_readonly(object, property_name, description)
+ *   assert that property property_name on object is readonly
+ *
+ * assert_throws(code, func, description)
+ *   code - the expected exception:
+ *     o string: the thrown exception must be a DOMException with the given
+ *               name, e.g., "TimeoutError" (for compatibility with existing
+ *               tests, a constant is also supported, e.g., "TIMEOUT_ERR")
+ *     o object: the thrown exception must have a property called "name" that
+ *               matches code.name
+ *     o null:   allow any exception (in general, one of the options above
+ *               should be used)
+ *   func - a function that should throw
+ *
+ * assert_unreached(description)
+ *   asserts if called. Used to ensure that some codepath is *not* taken e.g.
+ *   an event does not fire.
+ *
+ * assert_any(assert_func, actual, expected_array, extra_arg_1, ... extra_arg_N)
+ *   asserts that one assert_func(actual, expected_array_N, extra_arg1, ..., extra_arg_N)
+ *   is true for some expected_array_N in expected_array. This only works for assert_func
+ *   with signature assert_func(actual, expected, args_1, ..., args_N). Note that tests
+ *   with multiple allowed pass conditions are bad practice unless the spec specifically
+ *   allows multiple behaviours. Test authors should not use this method simply to hide 
+ *   UA bugs.
+ *
+ * assert_exists(object, property_name, description)
+ *   *** deprecated ***
+ *   asserts that object has an own property property_name
+ *
+ * assert_not_exists(object, property_name, description)
+ *   *** deprecated ***
+ *   assert that object does not have own property property_name
+ */
+
+(function ()
+{
+    var debug = false;
+    // default timeout is 5 seconds, test can override if needed
+    var settings = {
+      output:true,
+      timeout:9000,
+      test_timeout:5000
+    };
+
+    var xhtml_ns = "http://www.w3.org/1999/xhtml";
+
+    // script_prefix is used by Output.prototype.show_results() to figure out
+    // where to get testharness.css from.  It's enclosed in an extra closure to
+    // not pollute the library's namespace with variables like "src".
+    var script_prefix = null;
+    (function ()
+    {
+        var scripts = document.getElementsByTagName("script");
+        for (var i = 0; i < scripts.length; i++)
+        {
+            if (scripts[i].src)
+            {
+                var src = scripts[i].src;
+            }
+            else if (scripts[i].href)
+            {
+                //SVG case
+                var src = scripts[i].href.baseVal;
+            }
+            if (src && src.slice(src.length - "testharness.js".length) === "testharness.js")
+            {
+                script_prefix = src.slice(0, src.length - "testharness.js".length);
+                break;
+            }
+        }
+    })();
+
+    /*
+     * API functions
+     */
+
+    var name_counter = 0;
+    function next_default_name()
+    {
+        //Don't use document.title to work around an Opera bug in XHTML documents
+        var prefix = document.getElementsByTagName("title").length > 0 ?
+                         document.getElementsByTagName("title")[0].firstChild.data :
+                         "Untitled";
+        var suffix = name_counter > 0 ? " " + name_counter : "";
+        name_counter++;
+        return prefix + suffix;
+    }
+
+    function test(func, name, properties)
+    {
+        var test_name = name ? name : next_default_name();
+        properties = properties ? properties : {};
+        var test_obj = new Test(test_name, properties);
+        test_obj.step(func);
+        if (test_obj.status === test_obj.NOTRUN) {
+            test_obj.done();
+        }
+    }
+
+    function async_test(func, name, properties)
+    {
+        if (typeof func !== "function") {
+            properties = name;
+            name = func;
+            func = null;
+        }
+        var test_name = name ? name : next_default_name();
+        properties = properties ? properties : {};
+        var test_obj = new Test(test_name, properties);
+        if (func) {
+            test_obj.step(func, test_obj, test_obj);
+        }
+        return test_obj;
+    }
+
+    function setup(func_or_properties, maybe_properties)
+    {
+        var func = null;
+        var properties = {};
+        if (arguments.length === 2) {
+            func = func_or_properties;
+            properties = maybe_properties;
+        } else if (func_or_properties instanceof Function){
+            func = func_or_properties;
+        } else {
+            properties = func_or_properties;
+        }
+        tests.setup(func, properties);
+        output.setup(properties);
+    }
+
+    function done() {
+        tests.end_wait();
+    }
+
+    function generate_tests(func, args, properties) {
+        forEach(args, function(x, i)
+                {
+                    var name = x[0];
+                    test(function()
+                         {
+                             func.apply(this, x.slice(1));
+                         }, 
+                         name, 
+                         Array.isArray(properties) ? properties[i] : properties);
+                });
+    }
+
+    function on_event(object, event, callback)
+    {
+      object.addEventListener(event, callback, false);
+    }
+
+    expose(test, 'test');
+    expose(async_test, 'async_test');
+    expose(generate_tests, 'generate_tests');
+    expose(setup, 'setup');
+    expose(done, 'done');
+    expose(on_event, 'on_event');
+
+    /*
+     * Return a string truncated to the given length, with ... added at the end
+     * if it was longer.
+     */
+    function truncate(s, len)
+    {
+        if (s.length > len) {
+            return s.substring(0, len - 3) + "...";
+        }
+        return s;
+    }
+
+    /*
+     * Convert a value to a nice, human-readable string
+     */
+    function format_value(val)
+    {
+        if (Array.isArray(val))
+        {
+            return "[" + val.map(format_value).join(", ") + "]";
+        }
+
+        switch (typeof val)
+        {
+        case "string":
+            val = val.replace("\\", "\\\\");
+            for (var i = 0; i < 32; i++)
+            {
+                var replace = "\\";
+                switch (i) {
+                case 0: replace += "0"; break;
+                case 1: replace += "x01"; break;
+                case 2: replace += "x02"; break;
+                case 3: replace += "x03"; break;
+                case 4: replace += "x04"; break;
+                case 5: replace += "x05"; break;
+                case 6: replace += "x06"; break;
+                case 7: replace += "x07"; break;
+                case 8: replace += "b"; break;
+                case 9: replace += "t"; break;
+                case 10: replace += "n"; break;
+                case 11: replace += "v"; break;
+                case 12: replace += "f"; break;
+                case 13: replace += "r"; break;
+                case 14: replace += "x0e"; break;
+                case 15: replace += "x0f"; break;
+                case 16: replace += "x10"; break;
+                case 17: replace += "x11"; break;
+                case 18: replace += "x12"; break;
+                case 19: replace += "x13"; break;
+                case 20: replace += "x14"; break;
+                case 21: replace += "x15"; break;
+                case 22: replace += "x16"; break;
+                case 23: replace += "x17"; break;
+                case 24: replace += "x18"; break;
+                case 25: replace += "x19"; break;
+                case 26: replace += "x1a"; break;
+                case 27: replace += "x1b"; break;
+                case 28: replace += "x1c"; break;
+                case 29: replace += "x1d"; break;
+                case 30: replace += "x1e"; break;
+                case 31: replace += "x1f"; break;
+                }
+                val = val.replace(RegExp(String.fromCharCode(i), "g"), replace);
+            }
+            return '"' + val.replace(/"/g, '\\"') + '"';
+        case "boolean":
+        case "undefined":
+            return String(val);
+        case "number":
+            // In JavaScript, -0 === 0 and String(-0) == "0", so we have to
+            // special-case.
+            if (val === -0 && 1/val === -Infinity)
+            {
+                return "-0";
+            }
+            return String(val);
+        case "object":
+            if (val === null)
+            {
+                return "null";
+            }
+
+            // Special-case Node objects, since those come up a lot in my tests.  I
+            // ignore namespaces.  I use duck-typing instead of instanceof, because
+            // instanceof doesn't work if the node is from another window (like an
+            // iframe's contentWindow):
+            // http://www.w3.org/Bugs/Public/show_bug.cgi?id=12295
+            if ("nodeType" in val
+            && "nodeName" in val
+            && "nodeValue" in val
+            && "childNodes" in val)
+            {
+                switch (val.nodeType)
+                {
+                case Node.ELEMENT_NODE:
+                    var ret = "<" + val.tagName.toLowerCase();
+                    for (var i = 0; i < val.attributes.length; i++)
+                    {
+                        ret += " " + val.attributes[i].name + '="' + val.attributes[i].value + '"';
+                    }
+                    ret += ">" + val.innerHTML + "</" + val.tagName.toLowerCase() + ">";
+                    return "Element node " + truncate(ret, 60);
+                case Node.TEXT_NODE:
+                    return 'Text node "' + truncate(val.data, 60) + '"';
+                case Node.PROCESSING_INSTRUCTION_NODE:
+                    return "ProcessingInstruction node with target " + format_value(truncate(val.target, 60)) + " and data " + format_value(truncate(val.data, 60));
+                case Node.COMMENT_NODE:
+                    return "Comment node <!--" + truncate(val.data, 60) + "-->";
+                case Node.DOCUMENT_NODE:
+                    return "Document node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+                case Node.DOCUMENT_TYPE_NODE:
+                    return "DocumentType node";
+                case Node.DOCUMENT_FRAGMENT_NODE:
+                    return "DocumentFragment node with " + val.childNodes.length + (val.childNodes.length == 1 ? " child" : " children");
+                default:
+                    return "Node object of unknown type";
+                }
+            }
+
+            // Fall through to default
+        default:
+            return typeof val + ' "' + truncate(String(val), 60) + '"';
+        }
+    }
+    expose(format_value, "format_value");
+
+    /*
+     * Assertions
+     */
+
+    function assert_true(actual, description)
+    {
+        assert(actual === true, "assert_true", description,
+                                "expected true got ${actual}", {actual:actual});
+    };
+    expose(assert_true, "assert_true");
+
+    function assert_false(actual, description)
+    {
+        assert(actual === false, "assert_false", description,
+                                 "expected false got ${actual}", {actual:actual});
+    };
+    expose(assert_false, "assert_false");
+
+    function same_value(x, y) {
+        if (y !== y)
+        {
+            //NaN case
+            return x !== x;
+        }
+        else if (x === 0 && y === 0) {
+            //Distinguish +0 and -0
+            return 1/x === 1/y;
+        }
+        else
+        {
+            //typical case
+            return x === y;
+        }
+    }
+
+    function assert_equals(actual, expected, description)
+    {
+         /*
+          * Test if two primitives are equal or two objects
+          * are the same object
+          */
+        if (typeof actual != typeof expected)
+        {
+            assert(false, "assert_equals", description,
+                          "expected (" + typeof expected + ") ${expected} but got (" + typeof actual + ") ${actual}",
+                          {expected:expected, actual:actual});
+            return;
+        }
+        assert(same_value(actual, expected), "assert_equals", description,
+                                             "expected ${expected} but got ${actual}",
+                                             {expected:expected, actual:actual});
+    };
+    expose(assert_equals, "assert_equals");
+
+    function assert_not_equals(actual, expected, description)
+    {
+         /*
+          * Test if two primitives are unequal or two objects
+          * are different objects
+          */
+        assert(!same_value(actual, expected), "assert_not_equals", description,
+                                              "got disallowed value ${actual}",
+                                              {actual:actual});
+    };
+    expose(assert_not_equals, "assert_not_equals");
+
+    function assert_in_array(actual, expected, description)
+    {
+        assert(expected.indexOf(actual) != -1, "assert_in_array", description,
+                                               "value ${actual} not in array ${expected}",
+                                               {actual:actual, expected:expected});
+    }
+    expose(assert_in_array, "assert_in_array");
+
+    function assert_object_equals(actual, expected, description)
+    {
+         //This needs to be improved a great deal
+         function check_equal(actual, expected, stack)
+         {
+             stack.push(actual);
+
+             var p;
+             for (p in actual)
+             {
+                 assert(expected.hasOwnProperty(p), "assert_object_equals", description,
+                                                    "unexpected property ${p}", {p:p});
+
+                 if (typeof actual[p] === "object" && actual[p] !== null)
+                 {
+                     if (stack.indexOf(actual[p]) === -1)
+                     {
+                         check_equal(actual[p], expected[p], stack);
+                     }
+                 }
+                 else
+                 {
+                     assert(same_value(actual[p], expected[p]), "assert_object_equals", description,
+                                                       "property ${p} expected ${expected} got ${actual}",
+                                                       {p:p, expected:expected, actual:actual});
+                 }
+             }
+             for (p in expected)
+             {
+                 assert(actual.hasOwnProperty(p),
+                        "assert_object_equals", description,
+                        "expected property ${p} missing", {p:p});
+             }
+             stack.pop();
+         }
+         check_equal(actual, expected, []);
+    };
+    expose(assert_object_equals, "assert_object_equals");
+
+    function assert_array_equals(actual, expected, description)
+    {
+        assert(actual.length === expected.length,
+               "assert_array_equals", description,
+               "lengths differ, expected ${expected} got ${actual}",
+               {expected:expected.length, actual:actual.length});
+
+        for (var i=0; i < actual.length; i++)
+        {
+            assert(actual.hasOwnProperty(i) === expected.hasOwnProperty(i),
+                   "assert_array_equals", description,
+                   "property ${i}, property expected to be $expected but was $actual",
+                   {i:i, expected:expected.hasOwnProperty(i) ? "present" : "missing",
+                   actual:actual.hasOwnProperty(i) ? "present" : "missing"});
+            assert(same_value(expected[i], actual[i]),
+                   "assert_array_equals", description,
+                   "property ${i}, expected ${expected} but got ${actual}",
+                   {i:i, expected:expected[i], actual:actual[i]});
+        }
+    }
+    expose(assert_array_equals, "assert_array_equals");
+
+    function assert_approx_equals(actual, expected, epsilon, description)
+    {
+        /*
+         * Test if two primitive numbers are equal withing +/- epsilon
+         */
+        assert(typeof actual === "number",
+               "assert_approx_equals", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(Math.abs(actual - expected) <= epsilon,
+               "assert_approx_equals", description,
+               "expected ${expected} +/- ${epsilon} but got ${actual}",
+               {expected:expected, actual:actual, epsilon:epsilon});
+    };
+    expose(assert_approx_equals, "assert_approx_equals");
+
+    function assert_less_than(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is less than another
+         */
+        assert(typeof actual === "number",
+               "assert_less_than", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual < expected,
+               "assert_less_than", description,
+               "expected a number less than ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_less_than, "assert_less_than");
+
+    function assert_greater_than(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is greater than another
+         */
+        assert(typeof actual === "number",
+               "assert_greater_than", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual > expected,
+               "assert_greater_than", description,
+               "expected a number greater than ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_greater_than, "assert_greater_than");
+
+    function assert_less_than_equal(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is less than or equal to another
+         */
+        assert(typeof actual === "number",
+               "assert_less_than_equal", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual <= expected,
+               "assert_less_than", description,
+               "expected a number less than or equal to ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_less_than_equal, "assert_less_than_equal");
+
+    function assert_greater_than_equal(actual, expected, description)
+    {
+        /*
+         * Test if a primitive number is greater than or equal to another
+         */
+        assert(typeof actual === "number",
+               "assert_greater_than_equal", description,
+               "expected a number but got a ${type_actual}",
+               {type_actual:typeof actual});
+
+        assert(actual >= expected,
+               "assert_greater_than_equal", description,
+               "expected a number greater than or equal to ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    };
+    expose(assert_greater_than_equal, "assert_greater_than_equal");
+
+    function assert_regexp_match(actual, expected, description) {
+        /*
+         * Test if a string (actual) matches a regexp (expected)
+         */
+        assert(expected.test(actual),
+               "assert_regexp_match", description,
+               "expected ${expected} but got ${actual}",
+               {expected:expected, actual:actual});
+    }
+    expose(assert_regexp_match, "assert_regexp_match");
+
+    function assert_class_string(object, class_string, description) {
+        assert_equals({}.toString.call(object), "[object " + class_string + "]",
+                      description);
+    }
+    expose(assert_class_string, "assert_class_string");
+
+
+    function _assert_own_property(name) {
+        return function(object, property_name, description)
+        {
+            assert(object.hasOwnProperty(property_name),
+                   name, description,
+                   "expected property ${p} missing", {p:property_name});
+        };
+    }
+    expose(_assert_own_property("assert_exists"), "assert_exists");
+    expose(_assert_own_property("assert_own_property"), "assert_own_property");
+
+    function assert_not_exists(object, property_name, description)
+    {
+        assert(!object.hasOwnProperty(property_name),
+               "assert_not_exists", description,
+               "unexpected property ${p} found", {p:property_name});
+    };
+    expose(assert_not_exists, "assert_not_exists");
+
+    function _assert_inherits(name) {
+        return function (object, property_name, description)
+        {
+            assert(typeof object === "object",
+                   name, description,
+                   "provided value is not an object");
+
+            assert("hasOwnProperty" in object,
+                   name, description,
+                   "provided value is an object but has no hasOwnProperty method");
+
+            assert(!object.hasOwnProperty(property_name),
+                   name, description,
+                   "property ${p} found on object expected in prototype chain",
+                   {p:property_name});
+
+            assert(property_name in object,
+                   name, description,
+                   "property ${p} not found in prototype chain",
+                   {p:property_name});
+        };
+    }
+    expose(_assert_inherits("assert_inherits"), "assert_inherits");
+    expose(_assert_inherits("assert_idl_attribute"), "assert_idl_attribute");
+
+    function assert_readonly(object, property_name, description)
+    {
+         var initial_value = object[property_name];
+         try {
+             //Note that this can have side effects in the case where
+             //the property has PutForwards
+             object[property_name] = initial_value + "a"; //XXX use some other value here?
+             assert(same_value(object[property_name], initial_value),
+                    "assert_readonly", description,
+                    "changing property ${p} succeeded",
+                    {p:property_name});
+         }
+         finally
+         {
+             object[property_name] = initial_value;
+         }
+    };
+    expose(assert_readonly, "assert_readonly");
+
+    function assert_throws(code, func, description)
+    {
+        try
+        {
+            func.call(this);
+            assert(false, "assert_throws", description,
+                   "${func} did not throw", {func:func});
+        }
+        catch(e)
+        {
+            if (e instanceof AssertionError) {
+                throw(e);
+            }
+            if (code === null)
+            {
+                return;
+            }
+            if (typeof code === "object")
+            {
+                assert(typeof e == "object" && "name" in e && e.name == code.name,
+                       "assert_throws", description,
+                       "${func} threw ${actual} (${actual_name}) expected ${expected} (${expected_name})",
+                                    {func:func, actual:e, actual_name:e.name,
+                                     expected:code,
+                                     expected_name:code.name});
+                return;
+            }
+
+            var code_name_map = {
+                INDEX_SIZE_ERR: 'IndexSizeError',
+                HIERARCHY_REQUEST_ERR: 'HierarchyRequestError',
+                WRONG_DOCUMENT_ERR: 'WrongDocumentError',
+                INVALID_CHARACTER_ERR: 'InvalidCharacterError',
+                NO_MODIFICATION_ALLOWED_ERR: 'NoModificationAllowedError',
+                NOT_FOUND_ERR: 'NotFoundError',
+                NOT_SUPPORTED_ERR: 'NotSupportedError',
+                INVALID_STATE_ERR: 'InvalidStateError',
+                SYNTAX_ERR: 'SyntaxError',
+                INVALID_MODIFICATION_ERR: 'InvalidModificationError',
+                NAMESPACE_ERR: 'NamespaceError',
+                INVALID_ACCESS_ERR: 'InvalidAccessError',
+                TYPE_MISMATCH_ERR: 'TypeMismatchError',
+                SECURITY_ERR: 'SecurityError',
+                NETWORK_ERR: 'NetworkError',
+                ABORT_ERR: 'AbortError',
+                URL_MISMATCH_ERR: 'URLMismatchError',
+                QUOTA_EXCEEDED_ERR: 'QuotaExceededError',
+                TIMEOUT_ERR: 'TimeoutError',
+                INVALID_NODE_TYPE_ERR: 'InvalidNodeTypeError',
+                DATA_CLONE_ERR: 'DataCloneError'
+            };
+
+            var name = code in code_name_map ? code_name_map[code] : code;
+
+            var name_code_map = {
+                IndexSizeError: 1,
+                HierarchyRequestError: 3,
+                WrongDocumentError: 4,
+                InvalidCharacterError: 5,
+                NoModificationAllowedError: 7,
+                NotFoundError: 8,
+                NotSupportedError: 9,
+                InvalidStateError: 11,
+                SyntaxError: 12,
+                InvalidModificationError: 13,
+                NamespaceError: 14,
+                InvalidAccessError: 15,
+                TypeMismatchError: 17,
+                SecurityError: 18,
+                NetworkError: 19,
+                AbortError: 20,
+                URLMismatchError: 21,
+                QuotaExceededError: 22,
+                TimeoutError: 23,
+                InvalidNodeTypeError: 24,
+                DataCloneError: 25,
+
+                UnknownError: 0,
+                ConstraintError: 0,
+                DataError: 0,
+                TransactionInactiveError: 0,
+                ReadOnlyError: 0,
+                VersionError: 0
+            };
+
+            if (!(name in name_code_map))
+            {
+                throw new AssertionError('Test bug: unrecognized DOMException code "' + code + '" passed to assert_throws()');
+            }
+
+            var required_props = { code: name_code_map[name] };
+
+            if (required_props.code === 0
+            || ("name" in e && e.name !== e.name.toUpperCase() && e.name !== "DOMException"))
+            {
+                // New style exception: also test the name property.
+                required_props.name = name;
+            }
+
+            //We'd like to test that e instanceof the appropriate interface,
+            //but we can't, because we don't know what window it was created
+            //in.  It might be an instanceof the appropriate interface on some
+            //unknown other window.  TODO: Work around this somehow?
+
+            assert(typeof e == "object",
+                   "assert_throws", description,
+                   "${func} threw ${e} with type ${type}, not an object",
+                   {func:func, e:e, type:typeof e});
+
+            for (var prop in required_props)
+            {
+                assert(typeof e == "object" && prop in e && e[prop] == required_props[prop],
+                       "assert_throws", description,
+                       "${func} threw ${e} that is not a DOMException " + code + ": property ${prop} is equal to ${actual}, expected ${expected}",
+                       {func:func, e:e, prop:prop, actual:e[prop], expected:required_props[prop]});
+            }
+        }
+    }
+    expose(assert_throws, "assert_throws");
+
+    function assert_unreached(description) {
+         assert(false, "assert_unreached", description,
+                "Reached unreachable code");
+    }
+    expose(assert_unreached, "assert_unreached");
+
+    function assert_any(assert_func, actual, expected_array) 
+    {
+        var args = [].slice.call(arguments, 3)
+        var errors = []
+        var passed = false;
+        forEach(expected_array, 
+                function(expected)
+                {
+                    try {
+                        assert_func.apply(this, [actual, expected].concat(args))
+                        passed = true;
+                    } catch(e) {
+                        errors.push(e.message);
+                    }
+                });
+        if (!passed) {
+            throw new AssertionError(errors.join("\n\n"));
+        }
+    }
+    expose(assert_any, "assert_any");
+
+    function Test(name, properties)
+    {
+        this.name = name;
+        this.status = this.NOTRUN;
+        this.timeout_id = null;
+        this.is_done = false;
+
+        this.properties = properties;
+        this.timeout_length = properties.timeout ? properties.timeout : settings.test_timeout;
+
+        this.message = null;
+
+        var this_obj = this;
+        this.steps = [];
+
+        tests.push(this);
+    }
+
+    Test.statuses = {
+        PASS:0,
+        FAIL:1,
+        TIMEOUT:2,
+        NOTRUN:3
+    };
+
+    Test.prototype = merge({}, Test.statuses);
+
+    Test.prototype.structured_clone = function()
+    {
+        if(!this._structured_clone)
+        {
+            var msg = this.message;
+            msg = msg ? String(msg) : msg;
+            this._structured_clone = merge({
+                name:String(this.name),
+                status:this.status,
+                message:msg
+            }, Test.statuses);
+        }
+        return this._structured_clone;
+    };
+
+    Test.prototype.step = function(func, this_obj)
+    {
+        //In case the test has already failed
+        if (this.status !== this.NOTRUN)
+        {
+          return;
+        }
+
+        tests.started = true;
+
+        if (this.timeout_id === null) {
+            this.set_timeout();
+        }
+
+        this.steps.push(func);
+
+        if (arguments.length === 1)
+        {
+            this_obj = this;
+        }
+
+        try
+        {
+            return func.apply(this_obj, Array.prototype.slice.call(arguments, 2));
+        }
+        catch(e)
+        {
+            //This can happen if something called synchronously invoked another
+            //step
+            if (this.status !== this.NOTRUN)
+            {
+                return;
+            }
+            this.status = this.FAIL;
+            this.message = (typeof e === "object" && e !== null) ? e.message : e;
+            if (typeof e.stack != "undefined" && typeof e.message == "string") {
+                //Try to make it more informative for some exceptions, at least
+                //in Gecko and WebKit.  This results in a stack dump instead of
+                //just errors like "Cannot read property 'parentNode' of null"
+                //or "root is null".  Makes it a lot longer, of course.
+                this.message += "(stack: " + e.stack + ")";
+            }
+            this.done();
+            if (debug && e.constructor !== AssertionError) {
+                throw e;
+            }
+        }
+    };
+
+    Test.prototype.step_func = function(func, this_obj)
+    {
+        var test_this = this;
+
+        if (arguments.length === 1)
+        {
+            this_obj = test_this;
+        }
+
+        return function()
+        {
+            test_this.step.apply(test_this, [func, this_obj].concat(
+                Array.prototype.slice.call(arguments)));
+        };
+    };
+
+    Test.prototype.step_func_done = function(func, this_obj)
+    {
+        var test_this = this;
+
+        if (arguments.length === 1)
+        {
+            this_obj = test_this;
+        }
+
+        return function()
+        {
+            test_this.step.apply(test_this, [func, this_obj].concat(
+                Array.prototype.slice.call(arguments)));
+            test_this.done();
+        };
+    };
+
+    Test.prototype.set_timeout = function()
+    {
+        var this_obj = this;
+        this.timeout_id = setTimeout(function()
+                                     {
+                                         this_obj.timeout();
+                                     }, this.timeout_length);
+    };
+
+    Test.prototype.timeout = function()
+    {
+        this.status = this.TIMEOUT;
+        this.timeout_id = null;
+        this.message = "Test timed out";
+        this.done();
+    };
+
+    Test.prototype.done = function()
+    {
+        if (this.is_done) {
+            return;
+        }
+        clearTimeout(this.timeout_id);
+        if (this.status === this.NOTRUN)
+        {
+            this.status = this.PASS;
+        }
+        this.is_done = true;
+        tests.result(this);
+    };
+
+
+    /*
+     * Harness
+     */
+
+    function TestsStatus()
+    {
+        this.status = null;
+        this.message = null;
+    }
+
+    TestsStatus.statuses = {
+        OK:0,
+        ERROR:1,
+        TIMEOUT:2
+    };
+
+    TestsStatus.prototype = merge({}, TestsStatus.statuses);
+
+    TestsStatus.prototype.structured_clone = function()
+    {
+        if(!this._structured_clone)
+        {
+            var msg = this.message;
+            msg = msg ? String(msg) : msg;
+            this._structured_clone = merge({
+                status:this.status,
+                message:msg
+            }, TestsStatus.statuses);
+        }
+        return this._structured_clone;
+    };
+
+    function Tests()
+    {
+        this.tests = [];
+        this.num_pending = 0;
+
+        this.phases = {
+            INITIAL:0,
+            SETUP:1,
+            HAVE_TESTS:2,
+            HAVE_RESULTS:3,
+            COMPLETE:4
+        };
+        this.phase = this.phases.INITIAL;
+
+        this.properties = {};
+
+        //All tests can't be done until the load event fires
+        this.all_loaded = false;
+        this.wait_for_finish = false;
+        this.processing_callbacks = false;
+
+        this.timeout_length = settings.timeout;
+        this.timeout_id = null;
+
+        this.start_callbacks = [];
+        this.test_done_callbacks = [];
+        this.all_done_callbacks = [];
+
+        this.status = new TestsStatus();
+
+        var this_obj = this;
+
+        on_event(window, "load",
+                 function()
+                 {
+                     this_obj.all_loaded = true;
+                     if (this_obj.all_done())
+                     {
+                         this_obj.complete();
+                     }
+                 });
+
+        this.set_timeout();
+    }
+
+    Tests.prototype.setup = function(func, properties)
+    {
+        if (this.phase >= this.phases.HAVE_RESULTS)
+        {
+            return;
+        }
+        if (this.phase < this.phases.SETUP)
+        {
+            this.phase = this.phases.SETUP;
+        }
+
+        for (var p in properties)
+        {
+            if (properties.hasOwnProperty(p))
+            {
+                this.properties[p] = properties[p];
+            }
+        }
+
+        if (properties.timeout)
+        {
+            this.timeout_length = properties.timeout;
+        }
+        if (properties.explicit_done)
+        {
+            this.wait_for_finish = true;
+        }
+        if (properties.explicit_timeout) {
+            this.timeout_length = null;
+        }
+
+        if (func)
+        {
+            try
+            {
+                func();
+            } catch(e)
+            {
+                this.status.status = this.status.ERROR;
+                this.status.message = e;
+            };
+        }
+        this.set_timeout();
+    };
+
+    Tests.prototype.set_timeout = function()
+    {
+        var this_obj = this;
+        clearTimeout(this.timeout_id);
+        if (this.timeout_length !== null)
+        {
+            this.timeout_id = setTimeout(function() {
+                                             this_obj.timeout();
+                                         }, this.timeout_length);
+        }
+    };
+
+    Tests.prototype.timeout = function() {
+        this.status.status = this.status.TIMEOUT;
+        this.complete();
+    };
+
+    Tests.prototype.end_wait = function()
+    {
+        this.wait_for_finish = false;
+        if (this.all_done()) {
+            this.complete();
+        }
+    };
+
+    Tests.prototype.push = function(test)
+    {
+        if (this.phase < this.phases.HAVE_TESTS) {
+            this.start();
+        }
+        this.num_pending++;
+        this.tests.push(test);
+    };
+
+    Tests.prototype.all_done = function() {
+        return (this.all_loaded && this.num_pending === 0 &&
+                !this.wait_for_finish && !this.processing_callbacks);
+    };
+
+    Tests.prototype.start = function() {
+        this.phase = this.phases.HAVE_TESTS;
+        this.notify_start();
+    };
+
+    Tests.prototype.notify_start = function() {
+        var this_obj = this;
+        forEach (this.start_callbacks,
+                 function(callback)
+                 {
+                     callback(this_obj.properties);
+                 });
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.start_callback)
+                    {
+                        try
+                        {
+                            w.start_callback(this_obj.properties);
+                        }
+                        catch(e)
+                        {
+                            if (debug)
+                            {
+                                throw(e);
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "start",
+                            properties: this_obj.properties
+                        }, "*");
+                    }
+                });
+    };
+
+    Tests.prototype.result = function(test)
+    {
+        if (this.phase > this.phases.HAVE_RESULTS)
+        {
+            return;
+        }
+        this.phase = this.phases.HAVE_RESULTS;
+        this.num_pending--;
+        this.notify_result(test);
+    };
+
+    Tests.prototype.notify_result = function(test) {
+        var this_obj = this;
+        this.processing_callbacks = true;
+        forEach(this.test_done_callbacks,
+                function(callback)
+                {
+                    callback(test, this_obj);
+                });
+
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.result_callback)
+                    {
+                        try
+                        {
+                            w.result_callback(test);
+                        }
+                        catch(e)
+                        {
+                            if(debug) {
+                                throw e;
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "result",
+                            test: test.structured_clone()
+                        }, "*");
+                    }
+                });
+        this.processing_callbacks = false;
+        if (this_obj.all_done())
+        {
+            this_obj.complete();
+        }
+    };
+
+    Tests.prototype.complete = function() {
+        if (this.phase === this.phases.COMPLETE) {
+            return;
+        }
+        this.phase = this.phases.COMPLETE;
+        var this_obj = this;
+        this.tests.forEach(
+            function(x)
+            {
+                if(x.status === x.NOTRUN)
+                {
+                    this_obj.notify_result(x);
+                }
+            }
+        );
+        this.notify_complete();
+    };
+
+    Tests.prototype.notify_complete = function()
+    {
+        clearTimeout(this.timeout_id);
+        var this_obj = this;
+        var tests = map(this_obj.tests,
+                        function(test)
+                        {
+                            return test.structured_clone();
+                        });
+        if (this.status.status === null)
+        {
+            this.status.status = this.status.OK;
+        }
+
+        forEach (this.all_done_callbacks,
+                 function(callback)
+                 {
+                     callback(this_obj.tests, this_obj.status);
+                 });
+
+        forEach_windows(
+                function(w, is_same_origin)
+                {
+                    if(is_same_origin && w.completion_callback)
+                    {
+                        try
+                        {
+                            w.completion_callback(this_obj.tests, this_obj.status);
+                        }
+                        catch(e)
+                        {
+                            if (debug)
+                            {
+                                throw e;
+                            }
+                        }
+                    }
+                    if (supports_post_message(w) && w !== self)
+                    {
+                        w.postMessage({
+                            type: "complete",
+                            tests: tests,
+                            status: this_obj.status.structured_clone()
+                        }, "*");
+                    }
+                });
+    };
+
+    var tests = new Tests();
+
+    function timeout() {
+        if (tests.timeout_length === null)
+        {
+            tests.timeout();
+        }
+    }
+    expose(timeout, 'timeout');
+
+    function add_start_callback(callback) {
+        tests.start_callbacks.push(callback);
+    }
+
+    function add_result_callback(callback)
+    {
+        tests.test_done_callbacks.push(callback);
+    }
+
+    function add_completion_callback(callback)
+    {
+       tests.all_done_callbacks.push(callback);
+    }
+
+    expose(add_start_callback, 'add_start_callback');
+    expose(add_result_callback, 'add_result_callback');
+    expose(add_completion_callback, 'add_completion_callback');
+
+    /*
+     * Output listener
+    */
+
+    function Output() {
+      this.output_document = document;
+      this.output_node = null;
+      this.done_count = 0;
+      this.enabled = settings.output;
+      this.phase = this.INITIAL;
+    }
+
+    Output.prototype.INITIAL = 0;
+    Output.prototype.STARTED = 1;
+    Output.prototype.HAVE_RESULTS = 2;
+    Output.prototype.COMPLETE = 3;
+
+    Output.prototype.setup = function(properties) {
+        if (this.phase > this.INITIAL) {
+            return;
+        }
+
+        //If output is disabled in testharnessreport.js the test shouldn't be
+        //able to override that
+        this.enabled = this.enabled && (properties.hasOwnProperty("output") ?
+                                        properties.output : settings.output);
+    };
+
+    Output.prototype.init = function(properties)
+    {
+        if (this.phase >= this.STARTED) {
+            return;
+        }
+        if (properties.output_document) {
+            this.output_document = properties.output_document;
+        } else {
+            this.output_document = document;
+        }
+        this.phase = this.STARTED;
+    };
+
+    Output.prototype.resolve_log = function()
+    {
+        var output_document;
+        if (typeof this.output_document === "function")
+        {
+            output_document = this.output_document.apply(undefined);
+        } else
+        {
+            output_document = this.output_document;
+        }
+        if (!output_document)
+        {
+            return;
+        }
+        var node = output_document.getElementById("log");
+        if (node)
+        {
+            this.output_document = output_document;
+            this.output_node = node;
+        }
+    };
+
+    Output.prototype.show_status = function(test)
+    {
+        if (this.phase < this.STARTED)
+        {
+            this.init();
+        }
+        if (!this.enabled)
+        {
+            return;
+        }
+        if (this.phase < this.HAVE_RESULTS)
+        {
+            this.resolve_log();
+            this.phase = this.HAVE_RESULTS;
+        }
+        this.done_count++;
+        if (this.output_node)
+        {
+            if (this.done_count < 100
+            || (this.done_count < 1000 && this.done_count % 100 == 0)
+            || this.done_count % 1000 == 0) {
+                this.output_node.textContent = "Running, "
+                    + this.done_count + " complete, "
+                    + tests.num_pending + " remain";
+            }
+        }
+    };
+
+    Output.prototype.show_results = function (tests, harness_status)
+    {
+        if (this.phase >= this.COMPLETE) {
+            return;
+        }
+        if (!this.enabled)
+        {
+            return;
+        }
+        if (!this.output_node) {
+            this.resolve_log();
+        }
+        this.phase = this.COMPLETE;
+
+        var log = this.output_node;
+        if (!log)
+        {
+            return;
+        }
+        var output_document = this.output_document;
+
+        while (log.lastChild)
+        {
+            log.removeChild(log.lastChild);
+        }
+
+        if (script_prefix != null) {
+            var stylesheet = output_document.createElementNS(xhtml_ns, "link");
+            stylesheet.setAttribute("rel", "stylesheet");
+            stylesheet.setAttribute("href", script_prefix + "testharness.css");
+            var heads = output_document.getElementsByTagName("head");
+            if (heads.length) {
+                heads[0].appendChild(stylesheet);
+            }
+        }
+
+        var status_text = {};
+        status_text[Test.prototype.PASS] = "Pass";
+        status_text[Test.prototype.FAIL] = "Fail";
+        status_text[Test.prototype.TIMEOUT] = "Timeout";
+        status_text[Test.prototype.NOTRUN] = "Not Run";
+
+        var status_number = {};
+        forEach(tests, function(test) {
+                    var status = status_text[test.status];
+                    if (status_number.hasOwnProperty(status))
+                    {
+                        status_number[status] += 1;
+                    } else {
+                        status_number[status] = 1;
+                    }
+                });
+
+        function status_class(status)
+        {
+            return status.replace(/\s/g, '').toLowerCase();
+        }
+
+        var summary_template = ["section", {"id":"summary"},
+                                ["h2", {}, "Summary"],
+                                ["p", {}, "Found ${num_tests} tests"],
+                                function(vars) {
+                                    var rv = [["div", {}]];
+                                    var i=0;
+                                    while (status_text.hasOwnProperty(i)) {
+                                        if (status_number.hasOwnProperty(status_text[i])) {
+                                            var status = status_text[i];
+                                            rv[0].push(["div", {"class":status_class(status)},
+                                                        ["label", {},
+                                                         ["input", {type:"checkbox", checked:"checked"}],
+                                                         status_number[status] + " " + status]]);
+                                        }
+                                        i++;
+                                    }
+                                    return rv;
+                                }];
+
+        log.appendChild(render(summary_template, {num_tests:tests.length}, output_document));
+
+        forEach(output_document.querySelectorAll("section#summary label"),
+                function(element)
+                {
+                    on_event(element, "click",
+                             function(e)
+                             {
+                                 if (output_document.getElementById("results") === null)
+                                 {
+                                     e.preventDefault();
+                                     return;
+                                 }
+                                 var result_class = element.parentNode.getAttribute("class");
+                                 var style_element = output_document.querySelector("style#hide-" + result_class);
+                                 var input_element = element.querySelector("input");
+                                 if (!style_element && !input_element.checked) {
+                                     style_element = output_document.createElementNS(xhtml_ns, "style");
+                                     style_element.id = "hide-" + result_class;
+                                     style_element.textContent = "table#results > tbody > tr."+result_class+"{display:none}";
+                                     output_document.body.appendChild(style_element);
+                                 } else if (style_element && input_element.checked) {
+                                     style_element.parentNode.removeChild(style_element);
+                                 }
+                             });
+                });
+
+        // This use of innerHTML plus manual escaping is not recommended in
+        // general, but is necessary here for performance.  Using textContent
+        // on each individual <td> adds tens of seconds of execution time for
+        // large test suites (tens of thousands of tests).
+        function escape_html(s)
+        {
+            return s.replace(/\&/g, "&amp;")
+                .replace(/</g, "&lt;")
+                .replace(/"/g, "&quot;")
+                .replace(/'/g, "&#39;");
+        }
+
+        function has_assertions()
+        {
+            for (var i = 0; i < tests.length; i++) {
+                if (tests[i].properties.hasOwnProperty("assert")) {
+                    return true;
+                }
+            }
+            return false;
+        }
+        
+        function get_assertion(test)
+        {
+            if (test.properties.hasOwnProperty("assert")) {
+                if (Array.isArray(test.properties.assert)) {
+                    return test.properties.assert.join(' ');
+                }
+                return test.properties.assert;
+            }
+            return '';
+        }
+        
+        log.appendChild(document.createElementNS(xhtml_ns, "section"));
+        var assertions = has_assertions();
+        var html = "<h2>Details</h2><table id='results' " + (assertions ? "class='assertions'" : "" ) + ">"
+            + "<thead><tr><th>Result</th><th>Test Name</th>"
+            + (assertions ? "<th>Assertion</th>" : "")
+            + "<th>Message</th></tr></thead>"
+            + "<tbody>";
+        for (var i = 0; i < tests.length; i++) {
+            html += '<tr class="'
+                + escape_html(status_class(status_text[tests[i].status]))
+                + '"><td>'
+                + escape_html(status_text[tests[i].status])
+                + "</td><td>"
+                + escape_html(tests[i].name)
+                + "</td><td>"
+                + (assertions ? escape_html(get_assertion(tests[i])) + "</td><td>" : "")
+                + escape_html(tests[i].message ? tests[i].message : " ")
+                + "</td></tr>";
+        }
+        html += "</tbody></table>";
+        try {
+            log.lastChild.innerHTML = html;
+        } catch (e) {
+            log.appendChild(document.createElementNS(xhtml_ns, "p"))
+               .textContent = "Setting innerHTML for the log threw an exception.";
+            log.appendChild(document.createElementNS(xhtml_ns, "pre"))
+               .textContent = html;
+        }
+    };
+
+    var output = new Output();
+    add_start_callback(function (properties) {output.init(properties);});
+    add_result_callback(function (test) {output.show_status(tests);});
+    add_completion_callback(function (tests, harness_status) {output.show_results(tests, harness_status);});
+
+    /*
+     * Template code
+     *
+     * A template is just a javascript structure. An element is represented as:
+     *
+     * [tag_name, {attr_name:attr_value}, child1, child2]
+     *
+     * the children can either be strings (which act like text nodes), other templates or
+     * functions (see below)
+     *
+     * A text node is represented as
+     *
+     * ["{text}", value]
+     *
+     * String values have a simple substitution syntax; ${foo} represents a variable foo.
+     *
+     * It is possible to embed logic in templates by using a function in a place where a
+     * node would usually go. The function must either return part of a template or null.
+     *
+     * In cases where a set of nodes are required as output rather than a single node
+     * with children it is possible to just use a list
+     * [node1, node2, node3]
+     *
+     * Usage:
+     *
+     * render(template, substitutions) - take a template and an object mapping
+     * variable names to parameters and return either a DOM node or a list of DOM nodes
+     *
+     * substitute(template, substitutions) - take a template and variable mapping object,
+     * make the variable substitutions and return the substituted template
+     *
+     */
+
+    function is_single_node(template)
+    {
+        return typeof template[0] === "string";
+    }
+
+    function substitute(template, substitutions)
+    {
+        if (typeof template === "function") {
+            var replacement = template(substitutions);
+            if (replacement)
+            {
+                var rv = substitute(replacement, substitutions);
+                return rv;
+            }
+            else
+            {
+                return null;
+            }
+        }
+        else if (is_single_node(template))
+        {
+            return substitute_single(template, substitutions);
+        }
+        else
+        {
+            return filter(map(template, function(x) {
+                                  return substitute(x, substitutions);
+                              }), function(x) {return x !== null;});
+        }
+    }
+
+    function substitute_single(template, substitutions)
+    {
+        var substitution_re = /\${([^ }]*)}/g;
+
+        function do_substitution(input) {
+            var components = input.split(substitution_re);
+            var rv = [];
+            for (var i=0; i<components.length; i+=2)
+            {
+                rv.push(components[i]);
+                if (components[i+1])
+                {
+                    rv.push(String(substitutions[components[i+1]]));
+                }
+            }
+            return rv;
+        }
+
+        var rv = [];
+        rv.push(do_substitution(String(template[0])).join(""));
+
+        if (template[0] === "{text}") {
+            substitute_children(template.slice(1), rv);
+        } else {
+            substitute_attrs(template[1], rv);
+            substitute_children(template.slice(2), rv);
+        }
+
+        function substitute_attrs(attrs, rv)
+        {
+            rv[1] = {};
+            for (var name in template[1])
+            {
+                if (attrs.hasOwnProperty(name))
+                {
+                    var new_name = do_substitution(name).join("");
+                    var new_value = do_substitution(attrs[name]).join("");
+                    rv[1][new_name] = new_value;
+                };
+            }
+        }
+
+        function substitute_children(children, rv)
+        {
+            for (var i=0; i<children.length; i++)
+            {
+                if (children[i] instanceof Object) {
+                    var replacement = substitute(children[i], substitutions);
+                    if (replacement !== null)
+                    {
+                        if (is_single_node(replacement))
+                        {
+                            rv.push(replacement);
+                        }
+                        else
+                        {
+                            extend(rv, replacement);
+                        }
+                    }
+                }
+                else
+                {
+                    extend(rv, do_substitution(String(children[i])));
+                }
+            }
+            return rv;
+        }
+
+        return rv;
+    }
+
+ function make_dom_single(template, doc)
+ {
+     var output_document = doc || document;
+     if (template[0] === "{text}")
+     {
+         var element = output_document.createTextNode("");
+         for (var i=1; i<template.length; i++)
+         {
+             element.data += template[i];
+         }
+     }
+     else
+     {
+         var element = output_document.createElementNS(xhtml_ns, template[0]);
+         for (var name in template[1]) {
+             if (template[1].hasOwnProperty(name))
+             {
+                 element.setAttribute(name, template[1][name]);
+             }
+         }
+         for (var i=2; i<template.length; i++)
+         {
+             if (template[i] instanceof Object)
+             {
+                 var sub_element = make_dom(template[i]);
+                 element.appendChild(sub_element);
+             }
+             else
+             {
+                 var text_node = output_document.createTextNode(template[i]);
+                 element.appendChild(text_node);
+             }
+         }
+     }
+
+     return element;
+ }
+
+
+
+ function make_dom(template, substitutions, output_document)
+    {
+        if (is_single_node(template))
+        {
+            return make_dom_single(template, output_document);
+        }
+        else
+        {
+            return map(template, function(x) {
+                           return make_dom_single(x, output_document);
+                       });
+        }
+    }
+
+ function render(template, substitutions, output_document)
+    {
+        return make_dom(substitute(template, substitutions), output_document);
+    }
+
+    /*
+     * Utility funcions
+     */
+    function assert(expected_true, function_name, description, error, substitutions)
+    {
+        if (expected_true !== true)
+        {
+            throw new AssertionError(make_message(function_name, description,
+                                                  error, substitutions));
+        }
+    }
+
+    function AssertionError(message)
+    {
+        this.message = message;
+    }
+
+    function make_message(function_name, description, error, substitutions)
+    {
+        for (var p in substitutions) {
+            if (substitutions.hasOwnProperty(p)) {
+                substitutions[p] = format_value(substitutions[p]);
+            }
+        }
+        var node_form = substitute(["{text}", "${function_name}: ${description}" + error],
+                                   merge({function_name:function_name,
+                                          description:(description?description + " ":"")},
+                                          substitutions));
+        return node_form.slice(1).join("");
+    }
+
+    function filter(array, callable, thisObj) {
+        var rv = [];
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                var pass = callable.call(thisObj, array[i], i, array);
+                if (pass) {
+                    rv.push(array[i]);
+                }
+            }
+        }
+        return rv;
+    }
+
+    function map(array, callable, thisObj)
+    {
+        var rv = [];
+        rv.length = array.length;
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                rv[i] = callable.call(thisObj, array[i], i, array);
+            }
+        }
+        return rv;
+    }
+
+    function extend(array, items)
+    {
+        Array.prototype.push.apply(array, items);
+    }
+
+    function forEach (array, callback, thisObj)
+    {
+        for (var i=0; i<array.length; i++)
+        {
+            if (array.hasOwnProperty(i))
+            {
+                callback.call(thisObj, array[i], i, array);
+            }
+        }
+    }
+
+    function merge(a,b)
+    {
+        var rv = {};
+        var p;
+        for (p in a)
+        {
+            rv[p] = a[p];
+        }
+        for (p in b) {
+            rv[p] = b[p];
+        }
+        return rv;
+    }
+
+    function expose(object, name)
+    {
+        var components = name.split(".");
+        var target = window;
+        for (var i=0; i<components.length - 1; i++)
+        {
+            if (!(components[i] in target))
+            {
+                target[components[i]] = {};
+            }
+            target = target[components[i]];
+        }
+        target[components[components.length - 1]] = object;
+    }
+
+    function forEach_windows(callback) {
+        // Iterate of the the windows [self ... top, opener]. The callback is passed
+        // two objects, the first one is the windows object itself, the second one
+        // is a boolean indicating whether or not its on the same origin as the
+        // current window.
+        var cache = forEach_windows.result_cache;
+        if (!cache) {
+            cache = [[self, true]];
+            var w = self;
+            var i = 0;
+            var so;
+            var origins = location.ancestorOrigins;
+            while (w != w.parent)
+            {
+                w = w.parent;
+                // In WebKit, calls to parent windows' properties that aren't on the same
+                // origin cause an error message to be displayed in the error console but
+                // don't throw an exception. This is a deviation from the current HTML5
+                // spec. See: https://bugs.webkit.org/show_bug.cgi?id=43504
+                // The problem with WebKit's behavior is that it pollutes the error console
+                // with error messages that can't be caught.
+                //
+                // This issue can be mitigated by relying on the (for now) proprietary
+                // `location.ancestorOrigins` property which returns an ordered list of
+                // the origins of enclosing windows. See:
+                // http://trac.webkit.org/changeset/113945.
+                if(origins) {
+                    so = (location.origin == origins[i]);
+                }
+                else
+                {
+                    so = is_same_origin(w);
+                }
+                cache.push([w, so]);
+                i++;
+            }
+            w = window.opener;
+            if(w)
+            {
+                // window.opener isn't included in the `location.ancestorOrigins` prop.
+                // We'll just have to deal with a simple check and an error msg on WebKit
+                // browsers in this case.
+                cache.push([w, is_same_origin(w)]);
+            }
+            forEach_windows.result_cache = cache;
+        }
+
+        forEach(cache,
+                function(a)
+                {
+                    callback.apply(null, a);
+                });
+    }
+
+    function is_same_origin(w) {
+        try {
+            'random_prop' in w;
+            return true;
+        } catch(e) {
+            return false;
+        }
+    }
+
+    function supports_post_message(w)
+    {
+        var supports;
+        var type;
+        // Given IE  implements postMessage across nested iframes but not across
+        // windows or tabs, you can't infer cross-origin communication from the presence
+        // of postMessage on the current window object only.
+        //
+        // Touching the postMessage prop on a window can throw if the window is
+        // not from the same origin AND post message is not supported in that
+        // browser. So just doing an existence test here won't do, you also need
+        // to wrap it in a try..cacth block.
+        try
+        {
+            type = typeof w.postMessage;
+            if (type === "function")
+            {
+                supports = true;
+            }
+            // IE8 supports postMessage, but implements it as a host object which
+            // returns "object" as its `typeof`.
+            else if (type === "object")
+            {
+                supports = true;
+            }
+            // This is the case where postMessage isn't supported AND accessing a
+            // window property across origins does NOT throw (e.g. old Safari browser).
+            else
+            {
+                supports = false;
+            }
+        }
+        catch(e) {
+            // This is the case where postMessage isn't supported AND accessing a
+            // window property across origins throws (e.g. old Firefox browser).
+            supports = false;
+        }
+        return supports;
+    }
+})();
+// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/ivi/tests/BatteryStatus/w3c/testharnessreport.js b/ivi/tests/BatteryStatus/w3c/testharnessreport.js
new file mode 100644 (file)
index 0000000..fa73347
--- /dev/null
@@ -0,0 +1,380 @@
+/*
+ * This file is intended for vendors to implement
+ * code needed to integrate testharness.js tests with their own test systems.
+ *
+ * The default implementation extracts metadata from the tests and validates 
+ * it against the cached version that should be present in the test source 
+ * file. If the cache is not found or is out of sync, source code suitable for
+ * caching the metadata is optionally generated.
+ *
+ * The cached metadata is present for extraction by test processing tools that
+ * are unable to execute javascript.
+ *
+ * Metadata is attached to tests via the properties parameter in the test
+ * constructor. See testharness.js for details.
+ *
+ * Typically test system integration will attach callbacks when each test has
+ * run, using add_result_callback(callback(test)), or when the whole test file
+ * has completed, using 
+ * add_completion_callback(callback(tests, harness_status)).
+ *
+ * For more documentation about the callback functions and the
+ * parameters they are called with see testharness.js
+ */
+
+
+
+var metadata_generator = {
+
+    currentMetadata: {},
+    cachedMetadata: false,
+    metadataProperties: ['help', 'assert', 'author'],
+    
+    error: function(message) {
+        var messageElement = document.createElement('p');
+        messageElement.setAttribute('class', 'error');
+        this.appendText(messageElement, message);
+        
+        var summary = document.getElementById('summary');
+        if (summary) {
+            summary.parentNode.insertBefore(messageElement, summary);
+        }
+        else {
+            document.body.appendChild(messageElement);
+        }
+    },
+
+    /**
+     * Ensure property value has contact information
+     */
+    validateContact: function(test, propertyName) {
+        var result = true;
+        var value = test.properties[propertyName];
+        var values = Array.isArray(value) ? value : [value];
+        for (var index = 0; index < values.length; index++) {
+            value = values[index];
+            var re = /(\S+)(\s*)<(.*)>(.*)/;
+            if (! re.test(value)) {
+                re = /(\S+)(\s+)(http[s]?:\/\/)(.*)/
+                if (! re.test(value)) {
+                    this.error('Metadata property "' + propertyName + 
+                        '" for test: "' + test.name +
+                        '" must have name and contact information ' +
+                        '("name <email>" or "name http(s)://")');
+                    result = false;
+                }
+            }
+        }
+        return result;
+    },
+    
+    /**
+     * Extract metadata from test object
+     */
+    extractFromTest: function(test) {
+        var testMetadata = {};
+        // filter out metadata from other properties in test
+        for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
+             metaIndex++) {
+            var meta = this.metadataProperties[metaIndex];
+            if (test.properties.hasOwnProperty(meta)) {
+                if ('author' == meta) {
+                    this.validateContact(test, meta);
+                }
+                testMetadata[meta] = test.properties[meta];
+            }
+        }
+        return testMetadata;
+    },
+    
+    /**
+     * Compare cached metadata to extracted metadata
+     */
+    validateCache: function() {
+        for (var testName in this.currentMetadata) {
+            if (! this.cachedMetadata.hasOwnProperty(testName)) {
+                return false;
+            }
+            var testMetadata = this.currentMetadata[testName];
+            var cachedTestMetadata = this.cachedMetadata[testName];
+            delete this.cachedMetadata[testName];
+            
+            for (var metaIndex = 0; metaIndex < this.metadataProperties.length;
+                 metaIndex++) {
+                var meta = this.metadataProperties[metaIndex];
+                if (cachedTestMetadata.hasOwnProperty(meta) && 
+                    testMetadata.hasOwnProperty(meta)) {
+                    if (Array.isArray(cachedTestMetadata[meta])) {
+                      if (! Array.isArray(testMetadata[meta])) {
+                          return false;
+                      }
+                      if (cachedTestMetadata[meta].length == 
+                          testMetadata[meta].length) {
+                          for (var index = 0; 
+                               index < cachedTestMetadata[meta].length; 
+                               index++) {
+                              if (cachedTestMetadata[meta][index] != 
+                                  testMetadata[meta][index]) {
+                                  return false;
+                              }
+                          }
+                      }
+                      else {
+                          return false;
+                      }
+                    }
+                    else {
+                      if (Array.isArray(testMetadata[meta])) {
+                        return false;
+                      }
+                      if (cachedTestMetadata[meta] != testMetadata[meta]) {
+                        return false;
+                      }
+                    }
+                }
+                else if (cachedTestMetadata.hasOwnProperty(meta) || 
+                         testMetadata.hasOwnProperty(meta)) {
+                    return false;
+                }
+            }
+        }
+        for (var testName in this.cachedMetadata) {
+            return false;
+        }
+        return true;
+    },
+  
+    appendText: function(elemement, text) {
+        elemement.appendChild(document.createTextNode(text));
+    },
+  
+    jsonifyArray: function(arrayValue, indent) {
+        var output = '[';
+
+        if (1 == arrayValue.length) {
+            output += JSON.stringify(arrayValue[0]);
+        }
+        else {
+            for (var index = 0; index < arrayValue.length; index++) {
+                if (0 < index) {
+                    output += ',\n  ' + indent;
+                }
+                output += JSON.stringify(arrayValue[index]);
+            }
+        }
+        output += ']';
+        return output;
+    },
+    
+    jsonifyObject: function(objectValue, indent) {
+        var output = '{';
+        
+        var count = 0;
+        for (var property in objectValue) {
+            ++count;
+            if (Array.isArray(objectValue[property]) || 
+                ('object' == typeof(value))) {
+                ++count;
+            }
+        }
+        if (1 == count) {
+            for (var property in objectValue) {
+                output += ' "' + property + '": '
+                          + JSON.stringify(objectValue[property])
+                          + ' ';
+            }
+        }
+        else {
+            var first = true;
+            for (var property in objectValue) {
+                if (! first) {
+                    output += ',';
+                }
+                first = false;
+                output += '\n  ' + indent + '"' + property + '": ';
+                var value = objectValue[property];
+                if (Array.isArray(value)) {
+                    output += this.jsonifyArray(value, indent + 
+                        '                '.substr(0, 5 + property.length));
+                }
+                else if ('object' == typeof(value)) {
+                    output += this.jsonifyObject(value, indent + '  ');
+                }
+                else {
+                    output += JSON.stringify(value);
+                }
+            }
+            if (1 < output.length) {
+                output += '\n' + indent;
+            }
+        }
+        output += '}';
+        return output;
+    },
+  
+    /**
+     * Generate javascript source code for captured metadata
+     * Metadata is in pretty-printed JSON format
+     */
+    generateSource: function() {
+        var source = 
+            '<script id="metadata_cache">/*\n' + 
+            this.jsonifyObject(this.currentMetadata, '') + '\n' + 
+            '*/</script>\n';
+        return source;
+    },
+    
+    /**
+     * Add element containing metadata source code
+     */
+    addSourceElement: function(event) {
+        var sourceWrapper = document.createElement('div');
+        sourceWrapper.setAttribute('id', 'metadata_source');
+
+        var instructions = document.createElement('p');
+        if (this.cachedMetadata) {
+            this.appendText(instructions, 
+                'Replace the existing <script id="metadata_cache"> element ' + 
+                'in the test\'s <head> with the following:');
+        }
+        else {
+            this.appendText(instructions, 
+                'Copy the following into the <head> element of the test ' +
+                'or the test\'s metadata sidecar file:');
+        }
+        sourceWrapper.appendChild(instructions);
+        
+        var sourceElement = document.createElement('pre');
+        this.appendText(sourceElement, this.generateSource());
+
+        sourceWrapper.appendChild(sourceElement);
+        
+        var messageElement = document.getElementById('metadata_issue');
+        messageElement.parentNode.insertBefore(sourceWrapper, 
+                                               messageElement.nextSibling);
+        messageElement.parentNode.removeChild(messageElement);
+
+        (event.preventDefault) ? event.preventDefault() : 
+                                 event.returnValue = false;
+    },
+    
+    /**
+     * Extract the metadata cache from the cache element if present
+     */
+    getCachedMetadata: function() {
+        var cacheElement = document.getElementById('metadata_cache');
+        
+        if (cacheElement) {
+            var cacheText = cacheElement.firstChild.nodeValue;
+            var openBrace = cacheText.indexOf('{');
+            var closeBrace = cacheText.lastIndexOf('}');
+            if ((-1 < openBrace) && (-1 < closeBrace)) {
+                cacheText = cacheText.slice(openBrace, closeBrace + 1);
+                try {
+                    this.cachedMetadata = JSON.parse(cacheText);
+                }
+                catch (exc) {
+                    this.cachedMetadata = 'Invalid JSON in Cached metadata. ';
+                }
+            }
+            else {
+                this.cachedMetadata = 'Metadata not found in cache element. ';
+            }
+        }
+    },
+    
+    /**
+     * Main entry point, extract metadata from tests, compare to cached version
+     * if present.
+     * If cache not present or differs from extrated metadata, generate an error
+     */
+    process: function(tests, harness_status) {
+        for (var index = 0; index < tests.length; index++) {
+            var test = tests[index];
+            if (this.currentMetadata.hasOwnProperty(test.name)) {
+                this.error('Duplicate test name: ' + test.name);
+            }
+            else {
+                this.currentMetadata[test.name] = this.extractFromTest(test);
+            }
+        }
+
+        this.getCachedMetadata();
+        
+        var message = null;
+        var messageClass = 'warning';
+        var showSource = false;
+        
+        if (0 == tests.length) {
+            if (this.cachedMetadata) {
+                message = 'Cached metadata present but no tests. ';
+            }
+        }
+        else if (1 == tests.length) {
+            if (this.cachedMetadata) {
+                message = 'Single test files should not have cached metadata. ';
+            }
+            else {
+                var testMetadata = this.currentMetadata[tests[0].name];
+                var hasMetadata = false;
+                for (var meta in testMetadata) {
+                    hasMetadata |= testMetadata.hasOwnProperty(meta);
+                }
+                if (hasMetadata) {
+                    message = 'Single tests should not have metadata. ' +
+                              'Move metadata to <head>. ';
+                }
+            }
+        }
+        else {
+            if (this.cachedMetadata) {
+                messageClass = 'error';
+                if ('string' == typeof(this.cachedMetadata)) {
+                    message = this.cachedMetadata;
+                    showSource = true;
+                }
+                else if (! this.validateCache()) {
+                    message = 'Cached metadata out of sync. ';
+                    showSource = true;
+                }
+            }
+        }
+        
+        if (message) {
+            var messageElement = document.createElement('p');
+            messageElement.setAttribute('id', 'metadata_issue');
+            messageElement.setAttribute('class', messageClass);
+            this.appendText(messageElement, message);
+            
+            if (showSource) {
+                var link = document.createElement('a');
+                this.appendText(link, 'Click for source code.');
+                link.setAttribute('href', '#');
+                link.setAttribute('onclick', 
+                                  'metadata_generator.addSourceElement(event)');
+                messageElement.appendChild(link);
+            }
+            
+            var summary = document.getElementById('summary');
+            if (summary) {
+                summary.parentNode.insertBefore(messageElement, summary);
+            }
+            else {
+                var log = document.getElementById('log');
+                if (log) {
+                    log.appendChild(messageElement);
+                }
+            }
+        }
+    },
+
+    setup: function() {
+        add_completion_callback(
+            function (tests, harness_status) { 
+                metadata_generator.process(tests, harness_status)
+            });
+    }
+}
+
+metadata_generator.setup();
+// vim: set expandtab shiftwidth=4 tabstop=4:
diff --git a/ivi/tests/Bluetooth/NOTICE b/ivi/tests/Bluetooth/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/Bluetooth/index.html b/ivi/tests/Bluetooth/index.html
new file mode 100755 (executable)
index 0000000..db6ba52
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Bluetooth Select(Server or Client)</li>
+                <li><div data-role="button" id="server">Server</div></li>
+                <li><div data-role="button" id="client">Client</div></li>
+                <li data-role="list-divider">Write Message</li>
+                <li><input type="text" id="wmsg" value=""/></li>
+                <li><div data-role="button" id="send">Send Message</div></li>
+                <li data-role="list-divider">Receive Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">Bluetooth Disconnect</li>
+                <li><div data-role="button" id="disconnect">Disconnect</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Bluetooth communication between devices supported</p><br>
+                <p>1. You must install the TCT-behavior Test both on the Server device and the Client device</p>
+                <p>2. The one side device selects a Server and the other side device selects a Client</p>
+                <p>3. Establishing a connection between two Bluetooth devices</p>
+                <p>4. Fill in Message and Click Send Message</p>
+                <p>5. Check the message on the other device</p>
+                <p>6. Click the Disconnect button and Check if the Bluetooth disconnected</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Bluetooth/js/main.js b/ivi/tests/Bluetooth/js/main.js
new file mode 100755 (executable)
index 0000000..cb6d662
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var serverConnected = false;
+var clientConnected = false;
+var globalSocket = null;
+var adapter = null;
+var type = null;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#server").bind("vclick", function() {
+        setListener();
+        startServer();
+        $("#client").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "server";
+    });
+    $("#client").bind("vclick", function() {
+        setListener();
+        connectToServer();
+        $("#server").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "client";
+    });
+    $("#send").bind("vclick", function() {
+        if(type == "server")
+            sendMsgS();
+        if(type == "client")
+            sendMsgC();
+    });
+    $("#disconnect").bind("vclick", function() {
+        adapter.unsetChangeListener();
+        disconnect();
+        serverConnected = false;
+        clientConnected = false;
+        type = null;
+        $("#server").removeClass("ui-disabled");
+        $("#client").removeClass("ui-disabled");
+        $("#disconnect").addClass("ui-disabled");
+        $("#send").addClass("ui-disabled");
+    });
+    $("#send").addClass("ui-disabled");
+    $("#disconnect").addClass("ui-disabled");
+});
+
+function setListener() {
+    var changeListener = {
+        onstatechanged: function(powered) {
+            console.log ("Power state is changed into: " + powered);
+        },
+        onnamechanged: function(name) {
+            console.log("Name is changed to: " + name);
+        },
+        onvisibilitychanged: function(visible) {
+            console.log("Visibility is changed into: " + visible);
+        }
+    };
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    adapter.setChangeListener(changeListener);
+}
+
+function startServer() {
+    if (clientConnected) {
+        alert("Already connected");
+        return;
+    }
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    console.log("StartServer Name : " + "BehaviorBT");
+    function registerSuccessCallback(handler) {
+        chatServiceHandler = handler;
+        alert("Wait for client...");
+        console.log("Chat service register success");
+        chatServiceHandler.onconnect = function(socket) {
+            globalSocket = socket;
+            var peerDevice = socket.peer;
+            alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+            console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+            clientConnected = true;
+            $("#send").removeClass("ui-disabled");
+            socket.onmessage = function() {
+                var data = socket.readData();
+                var recvmsg = "";
+                for (var i = 0; i < data.length;i++) {
+                    recvmsg += String.fromCharCode(data[i]);
+                }
+                recvmsg = decodeURIComponent(recvmsg);
+                document.getElementById("rmsg").innerHTML = "Client : " + recvmsg;
+                alert("Client : " + recvmsg);
+            };
+            socket.onerror = function(e) {
+                console.log("Socket error");
+                clientConnected = false;
+                socket.close();
+            };
+            socket.onclose = function() {
+                clientConnected = false;
+                console.log("Socket disconnected");
+            };
+        };
+    };
+    function onError(e) {
+        console.log("Operation error");
+        clientConnected = false;
+    }
+    function setVisibleAndRegister() {
+        adapter.setVisible(true, function() {
+            adapter.registerRFCOMMServiceByUUID(
+                    "5BCE9431-6C75-32AB-AFE0-2EC108A30860",
+                    "My service",
+                    registerSuccessCallback,
+                    onError
+            );
+        });
+    }
+    function setNameWithTimer() {
+        adapter.setName("BehaviorBT", function() {
+            console.log("Set name ok");
+            setVisibleAndRegister();
+        }, onError);
+    }
+    function onSuccess() {
+        console.log("Turn on success");
+        setTimeout(setNameWithTimer, 3000);
+    }
+    adapter.setPowered(true, onSuccess, function() {
+        console.log("Device is busy");
+        onError();
+    });
+}
+
+function connectToServer() {
+    if (serverConnected) {
+        alert("Already connected");
+        return;
+    }
+    console.log("Connect to Server " + "BehaviorBT");
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    function onSocketConnected(socket) {
+        globalSocket = socket;
+        var peerDevice = socket.peer;
+        alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+        console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+        serverConnected = true;
+        $("#send").removeClass("ui-disabled");
+        socket.onmessage = function() {
+            var data = socket.readData();
+            var recvmsg = "";
+            for (var i = 0; i < data.length;i++) {
+                recvmsg += String.fromCharCode(data[i]);
+            }
+            recvmsg = decodeURIComponent(recvmsg);
+            document.getElementById("rmsg").innerHTML = "Server : " + recvmsg;
+            alert("Server : " + recvmsg);
+        };
+        socket.onerror = function(e) {
+            console.log("Socket error");
+            serverConnected = false;
+            socket.close();
+        };
+        socket.onclose = function() {
+            serverConnected = false;
+            console.log("Socket disconnected");
+        };
+    }
+    function onSocketError(e) {
+        console.log("Socket error: " + e.message);
+        serverConnected = false;
+    }
+    function onError(e) {
+        console.log("Operation error");
+        serverConnected = false;
+    }
+    function getDeviceSuccessCB(device) {
+        if (device != null) {
+            console.log("Get device and then try to connect: " + "5BCE9431-6C75-32AB-AFE0-2EC108A30860");
+            device.connectToServiceByUUID("5BCE9431-6C75-32AB-AFE0-2EC108A30860", onSocketConnected, onSocketError);
+        }
+        else
+            console.log("Get device infomration error");
+    }
+    function bondSuccess(device) {
+        console.log("Bond success!");
+        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+    }
+    var discoverDevicesSuccessCallback = {
+            onstarted : function() {
+                alert("Device discovery start!");
+            },
+            ondevicefound: function (device) {
+                var msg = device.name + "("+ device.address + ")";
+                if (device.name == "BehaviorBT") {
+                    adapter.stopDiscovery(function() {});
+                    console.log("Try to connect");
+                    if (device.isBonded == true) {
+                        console.log("Try to get device information");
+                        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+                    }
+                    else {
+                        console.log("Try to bond");
+                        adapter.createBonding(device.address, bondSuccess, onError);
+                    }
+                }
+                else
+                    console.log(msg + " found");
+            },
+            ondevicedisappeared: function(device) {},
+            onfinished : function (devices) {
+                alert("Discovery finished");
+            }
+    };
+    function onSuccess() {
+        console.log("Turn on success");
+        adapter.discoverDevices(discoverDevicesSuccessCallback, onError);
+    }
+    console.log("Try to turn on");
+    adapter.setPowered(true, onSuccess, onError);
+}
+
+function sendMsgS() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && clientConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function sendMsgC() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && serverConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function disconnect() {
+    if (serverConnected == true && globalSocket != null) {
+        try {
+            globalSocket.close();
+            alert("Disconnected");
+        }
+        catch(e) {
+            console.log(e.message);
+        }
+    }
+    try {
+        if (adapter != null)
+            adapter.setPowered(
+                    false,
+                    function() {
+                        alert("Bluetooth Power Off");
+                        globalSocket = null;
+                        serverConnected = false;
+                        clientConnected = false;
+                        adapter = null;
+                        type = null;
+                    }, function(e) {
+                        console.log(e.message);
+                    }
+            );
+    }
+    catch(e) {
+        console.log(e.message);
+    }
+}
diff --git a/ivi/tests/CSP/index.html b/ivi/tests/CSP/index.html
new file mode 100644 (file)
index 0000000..09d4ce8
--- /dev/null
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Xu, Kang <kangx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="csp-none">
+                    <a href="javascript:runApp('res/csp-none.html')" data-transition="slide" style="">
+                        <h2>csp-none</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:runApp('res/csp-self.html')" data-transition="slide" style="">
+                        <h2>csp-self</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test default-src directive</li>
+                <li id="default-src_none">
+                    <a href="javascript:runApp('res/default-src_none.html')" data-transition="slide" style="">
+                        <h2>default-src_none</h2>
+                    </a>
+                </li>
+                <li id="default-src_asterisk">
+                    <a href="javascript:runApp('res/default-src_asterisk.html')" data-transition="slide" style="">
+                        <h2>default-src_asterisk</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test sandbox directive</li>
+                <li id="sandbox-empty-ext">
+                    <a href="javascript:runApp('res/sandbox-empty-ext.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-ext</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-int">
+                    <a href="javascript:runApp('res/sandbox-empty-int.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-int</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-inline">
+                    <a href="javascript:runApp('res/sandbox-empty-inline.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-inline</h2>
+                    </a>
+                </li>
+                <li id="sandbox-same-origin-allow-scripts">
+                    <a href="javascript:runApp('res/sandbox-same-origin-allow-scripts.html')" data-transition="slide" style="">
+                        <h2>sandbox-same-origin-allow-scripts</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test script-src directive</li>
+                <li id="script-src_none">
+                    <a href="javascript:runApp('res/script-src_none.html')" data-transition="slide" style="">
+                        <h2>script-src_none</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test style-src directive</li>
+                <li id="style-src_self">
+                    <a href="javascript:runApp('res/style-src_self.html')" data-transition="slide" style="">
+                        <h2>style-src_self</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of CSP worked well.</p>
+            <p>Test Pre-condition: </p>
+            <p>Tinyweb server launched with the command: "tinyweb -ssl_certificate /usr/share/tinyweb/server.pem -document_root / -listening_ports 80,8080,8081,8082,8083,8443s".</p>
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of CSP worked well when script-src, object-src, style-src, img-src, media-src, frame-src, font-src, connect-src directives set different values.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/js/main.js b/ivi/tests/CSP/js/main.js
new file mode 100644 (file)
index 0000000..a50fbd4
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('beh1csp001',
+                    'beh1csp002',
+                    'beh1csp003',
+                    'beh1csp004',
+                    'beh1csp005',
+                    'beh1csp006',
+                    'beh1csp007',
+                    'beh1csp008',
+                    'beh1csp009',
+                    'beh1csp010',
+                    'beh1csp011',
+                    'beh1csp012',
+                    'beh1csp013',
+                    'beh1csp014',
+                    'beh1csp015',
+                    'beh1csp016',
+                    'beh1csp017');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CSP";
+var RESULT_FILE_NAME = "tct-behavior-child.csp.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/ivi/tests/CSP/js/tests.js b/ivi/tests/CSP/js/tests.js
new file mode 100644 (file)
index 0000000..14861ce
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CSP/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/CSP/res/csp-asterisk.html b/ivi/tests/CSP/res/csp-asterisk.html
new file mode 100644 (file)
index 0000000..2f35419
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp001.cspasterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/csp-asterisk.wgt b/ivi/tests/CSP/res/csp-asterisk.wgt
new file mode 100644 (file)
index 0000000..d503d30
Binary files /dev/null and b/ivi/tests/CSP/res/csp-asterisk.wgt differ
diff --git a/ivi/tests/CSP/res/csp-cross-origin.html b/ivi/tests/CSP/res/csp-cross-origin.html
new file mode 100644 (file)
index 0000000..15baea4
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-cross-origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-cross-origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp002.cspcrossorigin"/>
+                <input type="hidden" id="package_id" value="beh1csp002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...8, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/csp-cross-origin.wgt b/ivi/tests/CSP/res/csp-cross-origin.wgt
new file mode 100644 (file)
index 0000000..48c3bfa
Binary files /dev/null and b/ivi/tests/CSP/res/csp-cross-origin.wgt differ
diff --git a/ivi/tests/CSP/res/csp-none.html b/ivi/tests/CSP/res/csp-none.html
new file mode 100644 (file)
index 0000000..6c943e2
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-none"/>
+                <input type="hidden" id="app_id"  value="beh1csp003.cspnone"/>
+                <input type="hidden" id="package_id" value="beh1csp003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/csp-none.wgt b/ivi/tests/CSP/res/csp-none.wgt
new file mode 100644 (file)
index 0000000..f27d612
Binary files /dev/null and b/ivi/tests/CSP/res/csp-none.wgt differ
diff --git a/ivi/tests/CSP/res/csp-self.html b/ivi/tests/CSP/res/csp-self.html
new file mode 100644 (file)
index 0000000..4ed8eec
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-self"/>
+                <input type="hidden" id="app_id"  value="beh1csp004.cspself"/>
+                <input type="hidden" id="package_id" value="beh1csp004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/csp-self.wgt b/ivi/tests/CSP/res/csp-self.wgt
new file mode 100644 (file)
index 0000000..4534491
Binary files /dev/null and b/ivi/tests/CSP/res/csp-self.wgt differ
diff --git a/ivi/tests/CSP/res/default-policy-by-directives-csp.html b/ivi/tests/CSP/res/default-policy-by-directives-csp.html
new file mode 100644 (file)
index 0000000..2aa72e7
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-csp">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-csp"/>
+                <input type="hidden" id="app_id"  value="beh1csp016.DefaultPolicyByDirectivesCsp"/>
+                <input type="hidden" id="package_id" value="beh1csp016"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-policy-by-directives-csp.wgt b/ivi/tests/CSP/res/default-policy-by-directives-csp.wgt
new file mode 100644 (file)
index 0000000..815e541
Binary files /dev/null and b/ivi/tests/CSP/res/default-policy-by-directives-csp.wgt differ
diff --git a/ivi/tests/CSP/res/default-policy-by-directives-report-only.html b/ivi/tests/CSP/res/default-policy-by-directives-report-only.html
new file mode 100644 (file)
index 0000000..9a0f395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-report-only">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-report-only"/>
+                <input type="hidden" id="app_id"  value="beh1csp017.DefaultPolicyByDirectivesReportOnly"/>
+                <input type="hidden" id="package_id" value="beh1csp017"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-policy-by-directives-report-only.wgt b/ivi/tests/CSP/res/default-policy-by-directives-report-only.wgt
new file mode 100644 (file)
index 0000000..c1751ea
Binary files /dev/null and b/ivi/tests/CSP/res/default-policy-by-directives-report-only.wgt differ
diff --git a/ivi/tests/CSP/res/default-src_asterisk.html b/ivi/tests/CSP/res/default-src_asterisk.html
new file mode 100644 (file)
index 0000000..9365374
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp015.defaultSrcAsterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-src_asterisk.wgt b/ivi/tests/CSP/res/default-src_asterisk.wgt
new file mode 100644 (file)
index 0000000..d24d4f9
Binary files /dev/null and b/ivi/tests/CSP/res/default-src_asterisk.wgt differ
diff --git a/ivi/tests/CSP/res/default-src_cross_origin.html b/ivi/tests/CSP/res/default-src_cross_origin.html
new file mode 100644 (file)
index 0000000..ebe5e6e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_cross_origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_cross_origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp014.defaultSrcCrossOrigin"/>
+                <input type="hidden" id="package_id" value="beh1csp014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...2, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-src_cross_origin.wgt b/ivi/tests/CSP/res/default-src_cross_origin.wgt
new file mode 100644 (file)
index 0000000..f481e0f
Binary files /dev/null and b/ivi/tests/CSP/res/default-src_cross_origin.wgt differ
diff --git a/ivi/tests/CSP/res/default-src_none.html b/ivi/tests/CSP/res/default-src_none.html
new file mode 100644 (file)
index 0000000..1b2d0c3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp013.defaultSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-src_none.wgt b/ivi/tests/CSP/res/default-src_none.wgt
new file mode 100644 (file)
index 0000000..c1739b4
Binary files /dev/null and b/ivi/tests/CSP/res/default-src_none.wgt differ
diff --git a/ivi/tests/CSP/res/default-src_self.html b/ivi/tests/CSP/res/default-src_self.html
new file mode 100644 (file)
index 0000000..f8eab61
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp012.defaultSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...5, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/default-src_self.wgt b/ivi/tests/CSP/res/default-src_self.wgt
new file mode 100644 (file)
index 0000000..b73b32b
Binary files /dev/null and b/ivi/tests/CSP/res/default-src_self.wgt differ
diff --git a/ivi/tests/CSP/res/sandbox-empty-ext.html b/ivi/tests/CSP/res/sandbox-empty-ext.html
new file mode 100644 (file)
index 0000000..5479c3b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-ext">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-ext"/>
+                <input type="hidden" id="app_id"  value="beh1csp011.sandboxemptyext"/>
+                <input type="hidden" id="package_id" value="beh1csp011"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/sandbox-empty-ext.wgt b/ivi/tests/CSP/res/sandbox-empty-ext.wgt
new file mode 100644 (file)
index 0000000..966fb6b
Binary files /dev/null and b/ivi/tests/CSP/res/sandbox-empty-ext.wgt differ
diff --git a/ivi/tests/CSP/res/sandbox-empty-inline.html b/ivi/tests/CSP/res/sandbox-empty-inline.html
new file mode 100644 (file)
index 0000000..bb14fbb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-inline">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-inline"/>
+                <input type="hidden" id="app_id"  value="beh1csp010.sandboxemptyinline"/>
+                <input type="hidden" id="package_id" value="beh1csp010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/sandbox-empty-inline.wgt b/ivi/tests/CSP/res/sandbox-empty-inline.wgt
new file mode 100644 (file)
index 0000000..caaa1d2
Binary files /dev/null and b/ivi/tests/CSP/res/sandbox-empty-inline.wgt differ
diff --git a/ivi/tests/CSP/res/sandbox-empty-int.html b/ivi/tests/CSP/res/sandbox-empty-int.html
new file mode 100644 (file)
index 0000000..2f5f0fe
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-int">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-int"/>
+                <input type="hidden" id="app_id"  value="beh1csp009.sandboxemptyint"/>
+                <input type="hidden" id="package_id" value="beh1csp009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/sandbox-empty-int.wgt b/ivi/tests/CSP/res/sandbox-empty-int.wgt
new file mode 100644 (file)
index 0000000..96e326a
Binary files /dev/null and b/ivi/tests/CSP/res/sandbox-empty-int.wgt differ
diff --git a/ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.html b/ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.html
new file mode 100644 (file)
index 0000000..f2b474f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-same-origin-allow-scripts">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-same-origin-allow-scripts"/>
+                <input type="hidden" id="app_id"  value="beh1csp008.sandboxsameoriginallowscripts"/>
+                <input type="hidden" id="package_id" value="beh1csp008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are three "Pass" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt b/ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt
new file mode 100644 (file)
index 0000000..5ae357c
Binary files /dev/null and b/ivi/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt differ
diff --git a/ivi/tests/CSP/res/script-src_inline_eval.html b/ivi/tests/CSP/res/script-src_inline_eval.html
new file mode 100644 (file)
index 0000000..f5f8120
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_inline_eval">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_inline_eval"/>
+                <input type="hidden" id="app_id" value="beh1csp006.scriptSrcInlineEval"/>
+                <input type="hidden" id="package_id" value="beh1csp006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/script-src_inline_eval.wgt b/ivi/tests/CSP/res/script-src_inline_eval.wgt
new file mode 100644 (file)
index 0000000..d973daa
Binary files /dev/null and b/ivi/tests/CSP/res/script-src_inline_eval.wgt differ
diff --git a/ivi/tests/CSP/res/script-src_none.html b/ivi/tests/CSP/res/script-src_none.html
new file mode 100644 (file)
index 0000000..b7dfbe8
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp007.scriptSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/script-src_none.wgt b/ivi/tests/CSP/res/script-src_none.wgt
new file mode 100644 (file)
index 0000000..ee4b45b
Binary files /dev/null and b/ivi/tests/CSP/res/script-src_none.wgt differ
diff --git a/ivi/tests/CSP/res/style-src_self.html b/ivi/tests/CSP/res/style-src_self.html
new file mode 100644 (file)
index 0000000..70c21eb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="style-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="style-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp005.styleSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" under a blue square.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSP/res/style-src_self.wgt b/ivi/tests/CSP/res/style-src_self.wgt
new file mode 100644 (file)
index 0000000..7de76b4
Binary files /dev/null and b/ivi/tests/CSP/res/style-src_self.wgt differ
diff --git a/ivi/tests/CSS-AnimTransfBackgBordFont/css/style.css b/ivi/tests/CSS-AnimTransfBackgBordFont/css/style.css
new file mode 100644 (file)
index 0000000..9170c1b
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        li, cici <cici.x.li@intel.com>
+
+*/
+
+@keyframes cssAnimate
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;background:; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-webkit-keyframes cssAnimate /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-moz-keyframes cssAnimate /* Firefox */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-o-keyframes cssAnimate /* Opera */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@keyframes cssAnimate2
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink; }
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-webkit-keyframes cssAnimate2 /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-moz-keyframes cssAnimate2 /* Firefox */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-o-keyframes cssAnimate2 /* Opera */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+#testbox1
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate 10s 1;
+        -webkit-animation:cssAnimate 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate 10s 1; /* Firefox */
+        -o-animation:cssAnimate 10s 1; /* Opera */
+        border-radius:5px;
+        -webkit-border-radius:5px;
+}
+
+#testbox2
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate2 10s 1;
+        -webkit-animation:cssAnimate2 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate2 10s 1; /* Firefox */
+        -o-animation:cssAnimate2 10s 1; /* Opera */
+        border-radius:15px;
+        -webkit-border-radius:100px;
+}
+
+#box {
+        height: 100%;
+        width: 80%;
+        margin: 5px auto;
+        box-shadow: 10px 10px 5px #888888;
+        border:5px #92B901 outset;
+        border-radius:20px;
+        transition: border 1s linear;
+        -webkit-transition: border 1s linear;
+}
+
+#box.final {
+        border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+        width: 100%;
+        height: 300px;
+        padding: 30px 0px;
+        border: 3px  #000;
+}
diff --git a/ivi/tests/CSS-AnimTransfBackgBordFont/index.html b/ivi/tests/CSS-AnimTransfBackgBordFont/index.html
new file mode 100644 (file)
index 0000000..0f09d2f
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script type="text/javascript">
+          function reloadTest() {
+                document.location.reload();
+          }
+        </script>
+
+    </head>
+
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testbox1" style="color:black; top:25%"> SQUARE </div>
+          <div id="testbox2" style="color:white; top:25%"> CIRCLE </div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS two boxes: </p>
+        <p>1. Color is changing in order of green, pink, blue, green, red, green; </p>
+        <p>2. Square/Circle move with 20 degree direction from left to right; </p>
+        <p>3. About rotate direction from left to right, square is rotate in 2D(180degree), circle is rotate in 3D(Y-axis); </p>
+        <p>4. Square/circle is transfering between square/circle when moving from right to left; </p>
+        <p>5. About font type, "SQUARE" is black, "CIRCLE" is white, both are 8 px size; </p>
+        <p>6. About frame box border, style is outset in green, with gray shadow. </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the transformation and animation function well follow above 6 rules.</p>
+      </font>
+    </div>
+    </body>
+</html>
diff --git a/ivi/tests/CSSAnimation/css/style.css b/ivi/tests/CSSAnimation/css/style.css
new file mode 100644 (file)
index 0000000..45688cb
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+@-webkit-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@-moz-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+
+#testBox {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    position: relative;
+    margin: 20px 8px;
+    border: 3px solid yellow;
+    /* Transition */
+    -webkit-transition-duration: 5s;
+    -webkit-transition-timing-function: linear;
+
+     color: Yellow;
+     text-align: center;
+     vertical-align: middle;
+
+    -webkit-animation-name: sample;
+    -webkit-animation-duration: 10s;
+    -webkit-animation-timing-function: ease;
+    -webkit-animation-delay: 2s;
+    -webkit-animation-play-state: running;
+    -webkit-animation-iteration-count: 10;
+    -webkit-animation-direction: normal;
+
+    -moz-animation-name: sample;
+    -moz-animation-duration: 10s;
+    -moz-animation-timing-function: ease;
+    -moz-animation-delay: 2s;
+    -moz-animation-play-state: running;
+    -moz-animation-iteration-count: 10;
+    -moz-animation-direction: normal;
+
+    animation-name: sample;
+    animation-duration: 10s;
+    animation-timing-function: ease;
+    animation-delay: 2s;
+    animation-play-state: running;
+    animation-iteration-count: 10;
+    animation-direction: normal;
+}
+
+#testBox.final {
+    border-radius: 50px;
+    -webkit-border-radius: 50px;
+    transition-delay: 2s;
+    -webkit-transition-delay: 2s;
+}
+
+#box {
+    height: 150px;
+    width: 300px;
+    margin: 0px auto;
+    background-color: #ccc;
+    border: 0px solid rgb(0, 0, 255);
+    transition: border 1s linear;
+    -webkit-transition: border 1s linear;
+}
+
+#box.final {
+    border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+    width: 100%;
+    height: 180px;
+    padding: 30px 0px;
+    border: 1px solid #000;
+}
diff --git a/ivi/tests/CSSAnimation/index.html b/ivi/tests/CSSAnimation/index.html
new file mode 100644 (file)
index 0000000..eb2ce0a
--- /dev/null
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/transition-test-helpers.js"></script>
+    <script type="text/javascript">
+        var test_box;
+        var box_txt = "1";
+        function init() {
+            test_box = document.getElementById("testBox");
+            test_box.addEventListener("webkitAnimationIteration", start_f, true);
+            test_box.addEventListener("animationiteration", start_f, true);
+        }
+        function start_f() {
+            try {
+                box_txt = test_box.innerText;
+                test_box.innerText = parseInt(box_txt) + 1;
+                if (test_box.innerText % 2 == 0)
+                    $("#testBox").removeClass("final");
+                else
+                    $("#testBox").addClass("final");
+            } catch (err) {
+                test_box.innerText = box_txt;
+            }
+        }
+
+        function reloadTest() {
+            document.location.reload();
+        }
+
+        const expectedValues = [
+          // [time, element-id, property, expected-value, tolerance]
+          // [0.25, 'box', 'border-top-left-radius', 25, 5],
+          [0.25, 'testBox', 'border-radius', 25, 500]
+        ];
+
+        const expectedValues2 = [
+            [0.5, 'box', 'border-top-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-right-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-bottom-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-left-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-top-width', 10, 200],
+            [0.5, 'box', 'border-right-width', 10, 200],
+            [0.5, 'box', 'border-bottom-width', 10, 200],
+            [0.5, 'box', 'border-left-width', 10, 200]
+        ];
+        function setupTest() {
+            document.getElementById('testBox').className = 'testBox final';
+        }
+        function setupTest2() {
+            var box = document.getElementById('box');
+            box.className = 'final';
+        }
+        runTransitionTest(expectedValues, setupTest, usePauseAPI);
+        runTransitionTest(expectedValues2, setupTest2, usePauseAPI);
+    </script>
+  </head>
+  <body onload="init()">
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testBox">1</div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS box is transferring between square and circle when moving from left to right, its background color is changing in the order of red, green and blue, and the counter record the times of CSS animation from 1 to 10.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and animation functions all work well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSSAnimation/js/COPYING b/ivi/tests/CSSAnimation/js/COPYING
new file mode 100644 (file)
index 0000000..86c307b
--- /dev/null
@@ -0,0 +1,6 @@
+The code of main.js comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/transitions/resources/transition-test-helpers.js
+without modification.
+
+These resources are under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
diff --git a/ivi/tests/CSSAnimation/js/transition-test-helpers.js b/ivi/tests/CSSAnimation/js/transition-test-helpers.js
new file mode 100644 (file)
index 0000000..793460e
--- /dev/null
@@ -0,0 +1,296 @@
+/* This is the helper function to run transition tests:
+
+Test page requirements:
+- The body must contain an empty div with id "result"
+- Call this function directly from the <script> inside the test page
+
+Function parameters:
+    expected [required]: an array of arrays defining a set of CSS properties that must have given values at specific times (see below)
+    callback [optional]: a function to be executed just before the test starts (none by default)
+    
+    Each sub-array must contain these items in this order:
+    - the time in seconds at which to snapshot the CSS property
+    - the id of the element on which to get the CSS property value
+    - the name of the CSS property to get [1]
+    - the expected value for the CSS property
+    - the tolerance to use when comparing the effective CSS property value with its expected value
+    
+    [1] If the CSS property name is "-webkit-transform", expected value must be an array of 1 or more numbers corresponding to the matrix elements,
+    or a string which will be compared directly (useful if the expected value is "none")
+    If the CSS property name is "-webkit-transform.N", expected value must be a number corresponding to the Nth element of the matrix
+
+*/
+
+const usePauseAPI = true;
+const dontUsePauseAPI = false;
+
+const shouldBeTransitioning = true;
+const shouldNotBeTransitioning = false;
+
+function roundNumber(num, decimalPlaces)
+{
+  return Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
+}
+
+function isCloseEnough(actual, desired, tolerance)
+{
+    var diff = Math.abs(actual - desired);
+    return diff <= tolerance;
+}
+
+function isShadow(property)
+{
+  return (property == '-webkit-box-shadow' || property == 'text-shadow');
+}
+
+function getShadowXY(cssValue)
+{
+    var text = cssValue.cssText;
+    // Shadow cssText looks like "rgb(0, 0, 255) 0px -3px 10px 0px"
+    var shadowPositionRegExp = /\)\s*(-?\d+)px\s*(-?\d+)px/;
+    var result = shadowPositionRegExp.exec(text);
+    return [parseInt(result[1]), parseInt(result[2])];
+}
+
+function compareRGB(rgb, expected, tolerance)
+{
+    return (isCloseEnough(parseInt(rgb[0]), expected[0], tolerance) &&
+            isCloseEnough(parseInt(rgb[1]), expected[1], tolerance) &&
+            isCloseEnough(parseInt(rgb[2]), expected[2], tolerance));
+}
+
+function parseCrossFade(s)
+{
+    var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
+
+    if (!matches)
+        return null;
+
+    return {"from": matches[1], "to": matches[2], "percent": parseFloat(matches[3])}
+}
+
+function checkExpectedValue(expected, index)
+{
+    var time = expected[index][0];
+    var elementId = expected[index][1];
+    var property = expected[index][2];
+    var expectedValue = expected[index][3];
+    var tolerance = expected[index][4];
+    var postCompletionCallback = expected[index][5];
+
+    var computedValue;
+    var pass = false;
+    var transformRegExp = /^-webkit-transform(\.\d+)?$/;
+    if (transformRegExp.test(property)) {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).webkitTransform;
+        if (typeof expectedValue == "string")
+            pass = (computedValue == expectedValue);
+        else if (typeof expectedValue == "number") {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            pass = isCloseEnough(parseFloat(m[parseInt(property.substring(18))]), expectedValue, tolerance);
+        } else {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            for (i = 0; i < expectedValue.length; ++i) {
+                pass = isCloseEnough(parseFloat(m[i]), expectedValue[i], tolerance);
+                if (!pass)
+                    break;
+            }
+        }
+    } else if (property == "fill" || property == "stroke") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).rgbColor;
+        if (compareRGB([computedValue.red.cssText, computedValue.green.cssText, computedValue.blue.cssText], expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        }
+    } else if (property == "stop-color" || property == "flood-color" || property == "lighting-color") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        // The computedValue cssText is rgb(num, num, num)
+        var components = computedValue.cssText.split("(")[1].split(")")[0].split(",");
+        if (compareRGB(components, expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = computedValue.cssText;
+        }
+    } else if (property == "lineHeight") {
+        computedValue = parseInt(window.getComputedStyle(document.getElementById(elementId)).lineHeight);
+        pass = isCloseEnough(computedValue, expectedValue, tolerance);
+    } else if (property == "background-image"
+               || property == "border-image-source"
+               || property == "border-image"
+               || property == "list-style-image"
+               || property == "-webkit-mask-image"
+               || property == "-webkit-mask-box-image") {
+        if (property == "border-image" || property == "-webkit-mask-image" || property == "-webkit-mask-box-image")
+            property += "-source";
+        
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        computedCrossFade = parseCrossFade(computedValue);
+
+        if (!computedCrossFade) {
+            pass = false;
+        } else {
+            pass = isCloseEnough(computedCrossFade.percent, expectedValue, tolerance);
+        }
+    } else {
+        var computedStyle = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        if (computedStyle.cssValueType == CSSValue.CSS_VALUE_LIST) {
+            var values = [];
+            for (var i = 0; i < computedStyle.length; ++i) {
+                switch (computedStyle[i].cssValueType) {
+                  case CSSValue.CSS_PRIMITIVE_VALUE:
+                    values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
+                    break;
+                  case CSSValue.CSS_CUSTOM:
+                    // arbitrarily pick shadow-x and shadow-y
+                    if (isShadow) {
+                      var shadowXY = getShadowXY(computedStyle[i]);
+                      values.push(shadowXY[0]);
+                      values.push(shadowXY[1]);
+                    } else
+                      values.push(computedStyle[i].cssText);
+                    break;
+                }
+            }
+            computedValue = values.join(',');
+            pass = true;
+            for (var i = 0; i < values.length; ++i)
+                pass &= isCloseEnough(values[i], expectedValue[i], tolerance);
+        } else if (computedStyle.cssValueType == CSSValue.CSS_PRIMITIVE_VALUE) {
+            switch (computedStyle.primitiveType) {
+                case CSSPrimitiveValue.CSS_STRING:
+                case CSSPrimitiveValue.CSS_IDENT:
+                    computedValue = computedStyle.getStringValue();
+                    pass = computedValue == expectedValue;
+                    break;
+                case CSSPrimitiveValue.CSS_RGBCOLOR:
+                    var rgbColor = computedStyle.getRGBColorValue();
+                    computedValue = [rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)]; // alpha is not exposed to JS
+                    pass = true;
+                    for (var i = 0; i < 3; ++i)
+                        pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_RECT:
+                    computedValue = computedStyle.getRectValue();
+                    computedValue = [computedValue.top.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.right.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.bottom.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.left.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)];
+                     pass = true;
+                     for (var i = 0; i < 4; ++i)
+                         pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_PERCENTAGE:
+                    computedValue = parseFloat(computedStyle.cssText);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+                    break;
+                default:
+                    computedValue = computedStyle.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+            }
+        }
+    }
+
+    if (pass)
+        result += "PASS - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s saw something close to: " + expectedValue + "<br>";
+    else
+        result += "FAIL - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s expected: " + expectedValue + " but saw: " + computedValue + "<br>";
+
+    if (postCompletionCallback)
+      result += postCompletionCallback();
+}
+
+function endTest()
+{
+    document.getElementById('result').innerHTML = result;
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+function checkExpectedValueCallback(expected, index)
+{
+    return function() { checkExpectedValue(expected, index); };
+}
+
+function runTest(expected, usePauseAPI)
+{
+    var maxTime = 0;
+    for (var i = 0; i < expected.length; ++i) {
+        var time = expected[i][0];
+        var elementId = expected[i][1];
+        var property = expected[i][2];
+        if (!property.indexOf("-webkit-transform."))
+            property = "-webkit-transform";
+
+        var tryToPauseTransition = expected[i][6];
+        if (tryToPauseTransition === undefined)
+          tryToPauseTransition = shouldBeTransitioning;
+
+        if (hasPauseTransitionAPI && usePauseAPI) {
+            if (tryToPauseTransition) {
+              var element = document.getElementById(elementId);
+              if (!internals.pauseTransitionAtTimeOnElement(property, time, element))
+                window.console.log("Failed to pause '" + property + "' transition on element '" + elementId + "'");
+            }
+            checkExpectedValue(expected, i);
+        } else {
+            if (time > maxTime)
+                maxTime = time;
+
+            window.setTimeout(checkExpectedValueCallback(expected, i), time * 1000);
+        }
+    }
+
+    if (maxTime > 0)
+        window.setTimeout(endTest, maxTime * 1000 + 50);
+    else
+        endTest();
+}
+
+function waitForAnimationStart(callback, delay)
+{
+    var delayTimeout = delay ? 1000 * delay + 10 : 0;
+    // Why the two setTimeouts? Well, for hardware animations we need to ensure that the hardware animation
+    // has started before we try to pause it, and timers fire before animations get committed in the runloop.
+    window.setTimeout(function() {
+        window.setTimeout(function() {
+            callback();
+        }, 0);
+    }, delayTimeout);
+}
+
+function startTest(expected, usePauseAPI, callback)
+{
+    if (callback)
+        callback();
+
+    waitForAnimationStart(function() {
+        runTest(expected, usePauseAPI);
+    });
+}
+
+var result = "";
+var hasPauseTransitionAPI;
+
+function runTransitionTest(expected, callback, usePauseAPI, doPixelTest)
+{
+    hasPauseTransitionAPI = 'internals' in window;
+    
+    if (window.testRunner) {
+        if (!doPixelTest)
+            testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    if (!expected)
+        throw("Expected results are missing!");
+    
+    window.addEventListener("load", function() { startTest(expected, usePauseAPI, callback); }, false);
+}
diff --git a/ivi/tests/CSSStyle/css/style.css b/ivi/tests/CSSStyle/css/style.css
new file mode 100644 (file)
index 0000000..2f6549c
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/csswg/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/w3c/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/webkit/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/webkit/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/ivi/tests/CSSStyle/index.html b/ivi/tests/CSSStyle/index.html
new file mode 100644 (file)
index 0000000..4f154b1
--- /dev/null
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/jquery/slider.tooltip.js"></script>
+    <style>
+        .normalSpan {
+            display:none;
+            color:red;
+        }
+        .columnSpan {
+            visibility:hidden;
+            color:red;
+        }
+    </style>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content" class="content">
+        <div id="d">
+          <div id="text-div">
+            <div id="p"><span class="normalSpan">A</span>
+              By&nbsp;using&nbsp;functionality&nbsp;described in this document, style sheets can declare that the content of an element is to be laid out in multiple columns.
+              <h3 id="h"><span class="columnSpan">A</span>column span</h3>
+              The main benefit of using CSS-based columns is flexibility; content can flow from one column to another.
+            </div>
+          </div>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Mulcolumn</label>
+            <a id="on" data-role="button">On</a>
+            <a id="off" data-role="button">Off</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-1">Transparency</label>
+            <input name="slider-1" id="slider-1" min="0" max="1" step=".01" value="1" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="u">
+            <label for="slider-1">Font Color</label>
+            <a id="red" data-role="button">Red</a>
+            <a id="green" data-role="button">Green</a>
+            <a id="blue" data-role="button">Blue</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Transform</label>
+            <a id="upper" data-role="button">Uppercase</a>
+            <a id="lower" data-role="button">Lowercase</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Shadow</label>
+            <a id="shadow1" data-role="button">Shadow1</a>
+            <a id="shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Box Shadow</label>
+            <a id="box-shadow1" data-role="button">Shadow1</a>
+            <a id="box-shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-2">Outline offset</label>
+            <input name="slider-2" id="slider-2" min="0" max="15" step="1" value="5" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Border</label>
+            <a id="border1" data-role="button">Border1</a>
+            <a id="border2" data-role="button">Border2</a>
+        </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies</p>
+        <ul>
+          <li>the dotted line box has a white background, red first letter, green dotted border.</li>
+          <li>the general description uses default font in browser.</li>
+          <li>the functionality of all the text color in red, green or blue, background transparence from 0% to 100%, outline offset from 0 to 15, multicolumn enabling and disabling.</li>
+          <li>the text in uppercase or lowercase, text and box shadow in two effects.</li>
+          <li>the "column span" text shows in random code when using uppercase.</li>
+        </ul>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well in the dotted line box.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/CSSStyle/js/jquery/COPYING b/ivi/tests/CSSStyle/js/jquery/COPYING
new file mode 100644 (file)
index 0000000..45c0b34
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+slider.tooltip.js:
+The above file is licensed under jQuery MIT License:
+From https://github.com/jquery/jquery-mobile
+Please see the LICENSE.MIT for the MIT terms and conditions.
diff --git a/ivi/tests/CSSStyle/js/jquery/slider.tooltip.js b/ivi/tests/CSSStyle/js/jquery/slider.tooltip.js
new file mode 100644 (file)
index 0000000..035bc67
--- /dev/null
@@ -0,0 +1,141 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue*100)+"%");
+                $("#p").css("opacity", newValue);
+                if(newValue != 1){
+                    testFlag.Transparency = true;
+                    status();
+                }
+            }
+        }else if(ID == "slider-2"){
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue));
+                $("#text-div").css("outline-offset", newValue);
+                if(newValue != 5){
+                    testFlag.Outline = true;
+                    status();
+                }
+            }
+        }
+
+               //if ( o.popupEnabled ) {
+               //      this._positionPopup();
+               //      this._popup.html( newValue );
+               //}
+
+               //if ( o.showValue ) {
+               //      this._handleText.html( newValue );
+               //}
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/ivi/tests/CSSStyle/js/main.js b/ivi/tests/CSSStyle/js/main.js
new file mode 100644 (file)
index 0000000..79dbffc
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var testFlag={
+        Mulcolumn: false,
+        Transparency: false,
+        Color: false,
+        Transform: false,
+        TextShadow: false,
+        BoxShadow: false,
+        Outline: false,
+        Border: false
+    };
+
+function status(){
+    if(testFlag.Mulcolumn && testFlag.Transparency && testFlag.Color && testFlag.Transform && testFlag.TextShadow && testFlag.BoxShadow && testFlag.Outline && testFlag.Border)
+        EnablePassButton();
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    /** CSS Multicolumn */
+    $("#on").click(function(){
+        $("#off").removeClass("text-on");
+        $("#on").addClass("text-on");
+        $("#p").addClass("text-multi");
+        $("#h").addClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+    $("#off").click(function(){
+        $("#on").removeClass("text-on");
+        $("#off").addClass("text-on");
+        $("#p").removeClass("text-multi");
+        $("#h").removeClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+
+    /** CSS Color */
+    $("#red").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#red").toggleClass("text-on");
+        // remove text-green and text-blue style
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-red style
+        $p.toggleClass("text-red");
+        testFlag.Color = true;
+        status();
+    });
+    $("#green").click(function(){
+        var $p = $("#p");
+        $("#red").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#green").toggleClass("text-on");
+        // remove text-red and text-blue style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-green style
+        $p.toggleClass("text-green");
+        testFlag.Color = true;
+        status();
+    });
+    $("#blue").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#red").removeClass("text-on");
+        $("#blue").toggleClass("text-on");
+        // remove text-red and text-green style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        // add/remove text-blue style
+        $p.toggleClass("text-blue");
+        testFlag.Color = true;
+        status();
+    });
+
+    /** CSS Text Transform */
+    $("#upper").click(function(){
+        $("#lower").removeClass("text-on");
+        $("#upper").toggleClass("text-on");
+        $("#p").removeClass("text-lower");
+        $("#p").toggleClass("text-upper");
+        testFlag.Transform = true;
+        status();
+    });
+    $("#lower").click(function(){
+        $("#upper").removeClass("text-on");
+        $("#lower").toggleClass("text-on");
+        $("#p").removeClass("text-upper");
+        $("#p").toggleClass("text-lower");
+        testFlag.Transform = true;
+        status();
+    });
+
+    /** CSS Text Shadow */
+    $("#shadow1").click(function(){
+        $("#shadow2").removeClass("text-on");
+        $("#shadow1").toggleClass("text-on");
+        $("#p").removeClass("text-shadow2");
+        $("#p").toggleClass("text-shadow1");
+        testFlag.TextShadow = true;
+        status();
+    });
+    $("#shadow2").click(function(){
+        $("#shadow1").removeClass("text-on");
+        $("#shadow2").toggleClass("text-on");
+        $("#p").removeClass("text-shadow1");
+        $("#p").toggleClass("text-shadow2");
+        testFlag.TextShadow = true;
+        status();
+    });
+
+    /** CSS Box Shadow */
+    $("#box-shadow1").click(function(){
+        $("#box-shadow2").removeClass("text-on");
+        $("#box-shadow1").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow2");
+        $("#text-div").toggleClass("box-shadow1");
+        testFlag.BoxShadow = true;
+        status();
+    });
+    $("#box-shadow2").click(function(){
+        $("#box-shadow1").removeClass("text-on");
+        $("#box-shadow2").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow1");
+        $("#text-div").toggleClass("box-shadow2");
+        testFlag.BoxShadow = true;
+        status();
+    });
+
+    /** CSS Border */
+    $("#border1").click(function(){
+        $("#border2").removeClass("text-on");
+        $("#border1").toggleClass("text-on");
+        $("#text-div").removeClass("border2");
+        $("#text-div").toggleClass("border1");
+        testFlag.Border = true;
+        status();
+    });
+    $("#border2").click(function(){
+        $("#border1").removeClass("text-on");
+        $("#border2").toggleClass("text-on");
+        $("#text-div").removeClass("border1");
+        $("#text-div").toggleClass("border2");
+        testFlag.Border = true;
+        status();
+    });
+
+
+    /* Hide input*/
+    $("#slider-1").hide();
+    $("#slider-2").hide();
+});
diff --git a/ivi/tests/Camera/index.html b/ivi/tests/Camera/index.html
new file mode 100644 (file)
index 0000000..eb71a0c
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 300px;
+            }
+            #photoShow {
+                height: 210px;
+                line-height:210px;
+            }
+        </style>
+    </head>
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="filename"></p>
+              <div id="photoShow" align="center"></div>
+            </div>
+            <input type="file" id="files" accept="image/*" capture="camera" class="hideButton" />
+            <div align="center">
+              <input id="button" type="button" value="Launch camera to take a photo" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of Camera. Opens a device camera, previews the image automatically, then presents the captured photo after clicking the "capture" button.</p>
+            <p>Test Step: </p>
+            <p>Click the "Launch camera to take a photo" button to launch the camera preview.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the camera preview and capture work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Camera/js/main.js b/ivi/tests/Camera/js/main.js
new file mode 100644 (file)
index 0000000..0169f6d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+function drawOnCanvas(file) {
+  var reader = new FileReader();
+
+  reader.onload = function (e) {
+    var dataURL = e.target.result;
+        var c = document.createElement("Canvas");
+        ctx = c.getContext('2d');
+        img = new Image();
+
+    img.onload = function() {
+      c.width = img.width;
+      c.height = img.height;
+
+      var fheight = 180;
+      var fwidth = fheight / img.height * img.width
+      ctx.drawImage(img, 0, 0, fwidth, fheight);
+    };
+    img.src = dataURL;
+    $('#photoShow').html(c);
+  };
+
+  reader.readAsDataURL(file);
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    $("#photoShow").html("No photo");
+    $("#files")[0].onchange = function(evt) {
+        try {
+            // loading
+            $.mobile.showPageLoadingMsg();
+
+            var files = evt.target.files; // FileList object
+            $("#filename").html(files[0].name);
+            drawOnCanvas(files[0]);
+
+            $.mobile.hidePageLoadingMsg();
+            EnablePassButton();
+        } catch(err) {
+            $.mobile.hidePageLoadingMsg();
+            $("#filename").html(err);
+        }
+    }
+
+    $("#button")[0].onclick = function() {
+        var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
+        if(ie){
+            $("#files")[0].click();
+            $("#button")[0].value = $("#files")[0].value;
+        }else{
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#files")[0].dispatchEvent(evt);
+        }
+    }
+
+});
diff --git a/ivi/tests/CameraViaUserMedia/index.html b/ivi/tests/CameraViaUserMedia/index.html
new file mode 100644 (file)
index 0000000..2249cc5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 330px;
+                line-height:330px;
+            }
+        </style>
+    </head>
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="errormassage"></p>
+              <div align="center">
+                <video width="330px" height="330px" id="localView" autoplay="autoplay"></video>
+              </div>
+            </div>
+            <div align="center">
+              <input id="getUserMeida" type="button" value="Start camera preview" />
+              <input id="stopUserMeida" type="button" value="Stop camera preview" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of enabling and disabling the Camera preview.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Start camera preview" button to launch the preview.</li>
+              <li>Click the "Stop camera preview" button to close the preview.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Camera preview works well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/CameraViaUserMedia/js/main.js b/ivi/tests/CameraViaUserMedia/js/main.js
new file mode 100644 (file)
index 0000000..5e1556a
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+$(document).ready(function(){
+    DisablePassButton();
+    $("#errormassage").html("No video");
+    //getUserMedia
+    $("#getUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia({video: true}, function(s){
+                var url = webkitURL.createObjectURL(s);
+                $("#localView")[0].src = url;
+                $("#localView").show();
+                $("#errormassage").hide();
+                EnablePassButton();
+            }, function(error){
+                $("#errormassage").show();
+                $("#errormassage").html("Get user media occur error:<font color='red'>PERMISSION DENIED</font>");
+            });
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").html("Get usr media occur error,with error message:<font color='red'>"+e.message+"</font>");
+        }
+    }
+
+    //stop getUserMedia
+    $("#stopUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        }
+    }
+});
diff --git a/ivi/tests/Canvas-PicRotaScaleTransfVampix/COPYING b/ivi/tests/Canvas-PicRotaScaleTransfVampix/COPYING
new file mode 100644 (file)
index 0000000..03c1b1c
--- /dev/null
@@ -0,0 +1,3 @@
+flowser.png
+
+This file is created by Intel test developers under 3-Clause BSD License.
diff --git a/ivi/tests/Canvas-PicRotaScaleTransfVampix/flowser.png b/ivi/tests/Canvas-PicRotaScaleTransfVampix/flowser.png
new file mode 100644 (file)
index 0000000..f9bfe88
Binary files /dev/null and b/ivi/tests/Canvas-PicRotaScaleTransfVampix/flowser.png differ
diff --git a/ivi/tests/Canvas-PicRotaScaleTransfVampix/index.html b/ivi/tests/Canvas-PicRotaScaleTransfVampix/index.html
new file mode 100644 (file)
index 0000000..73a39cd
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+        <script type="text/javascript">
+                function reloadTest() {
+                        document.location.reload();
+                }
+        </script>
+  </head>
+
+<body>
+   <div data-role="header">
+        <h1 id="main_page_title"></h1>
+   </div>
+
+   <h3>Original Picture</p>
+   <img id="flowser" src="./flowser.png" alt="flowser" />
+
+   <p>Target Picture</p>
+   <canvas id="myCanvas" width="300" height="240" style="border:1px solid #c3c3c3;">
+        Your browser does not support the canvas element.
+   </canvas>
+
+   <script type="text/javascript">
+        var c=document.getElementById("myCanvas");
+        var cxt=c.getContext("2d");
+        var img=new Image()
+        img.src="./flowser.png"
+        cxt.drawImage(img,0,0);
+   </script>
+
+   <div data-role="content">
+        <button onclick="rotate()">Rotate Pic</button>
+        <button onclick="scale()">Scale Pic</button>
+        <button onclick="transform()">Transform Pic</button>
+        <button onclick="to_blackWhite()">Vampix Pic</button>
+        <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+   </div>
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies picture management with HTML5 Canvas: </p>
+        <p>1.click "Rotate Pic" button to rotate pic with 20 degree, then click "Test Again" button; </p>
+        <p>2.click "Scale Pic" to enlarger with 1.5 scale, click 2 or many times to enlarge continuously, then click "Test Again" button; </p>
+        <p>3.click "Transform Pic" to check pic transformation, then click "Test Again" button; </p>
+        <p>4.click "Vampix Pic" to change pic to "black white", then click "Test Again" button; </p>
+        <p>5.Do combination test, click "Rotate Pic" + "Scale Pic" + "Vampix Pic" in order, then click "Test Again" button; </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the pic could be rotated,scaled,transformed, vampixed well.</p>
+      </font>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Canvas-PicRotaScaleTransfVampix/js/main.js b/ivi/tests/Canvas-PicRotaScaleTransfVampix/js/main.js
new file mode 100644 (file)
index 0000000..0efe899
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+*/
+
+function rotate()
+{
+        cxt.rotate(20*Math.PI/180);
+        cxt.clearRect(0,0,500,500);
+        cxt.drawImage(img,0,0);
+}
+function scale()
+{
+        cxt.scale(1.5,1.5);
+        cxt.drawImage(img,0,0);
+}
+/*
+function translate()
+{
+        cxt.translate(70,70);
+        cxt.drawImage(img,0,0);
+}*/
+
+function transform()
+{
+        cxt.transform(0.8,0.5,0.5,1,10,0);
+        cxt.drawImage(img,0,0);
+}
+
+function to_blackWhite()
+{
+        cxt.drawImage(img,0,0);
+        var imgData = cxt.getImageData(0, 0, c.width, c.height);
+        var imgD = imgData.data;
+        for(var i=0, n=imgD.length; i<n; i+=4){
+                var gray = imgD[i] * 0.3 + imgD[i+1] * 0.59 + imgD[i+2] * 0.11;
+                imgD[i] = gray;
+                imgD[i+1] = gray;
+                imgD[i+2] = gray;
+        }
+        cxt.putImageData(imgData, 0, 0);
+}
diff --git a/ivi/tests/Clipboard/index.html b/ivi/tests/Clipboard/index.html
new file mode 100644 (file)
index 0000000..a6ffdf0
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+      <div data-role="header">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed">
+      </div>
+      <div data-role="popup" id="popup_info">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports clipboard to copy, cut and paste texts. Tests the functionality by long pressing the selected text, choose the "Copy", "Cut" and "Paste" in popup menu.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the copy and paste test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the copy, cut and paste functions all work well.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/Clipboard/js/main.js b/ivi/tests/Clipboard/js/main.js
new file mode 100644 (file)
index 0000000..41bdfe2
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bclipboard")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Clipboard application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                $("#install").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bclipboard", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : Clipboard application is already uninstalled or not installed");
+    }
+
+    try {
+        tizen.application.launch("bclipboard.clipboard", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/Clipboard.wgt",
+                    true,
+                    function() {
+                        console.log("Clipboard Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Clipboard/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/ivi/tests/Clipboard/res/Clipboard b/ivi/tests/Clipboard/res/Clipboard
new file mode 100644 (file)
index 0000000..09e7d58
Binary files /dev/null and b/ivi/tests/Clipboard/res/Clipboard differ
diff --git a/ivi/tests/ConfigurationExtension/index.html b/ivi/tests/ConfigurationExtension/index.html
new file mode 100644 (file)
index 0000000..9b1db37
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Xu, Kang <kangx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test src content</li>
+                <li id="application-content">
+                    <a href="javascript:runApp('res/application-content.html')" data-transition="slide" style="">
+                        <h2>application-content</h2>
+                    </a>
+                </li>
+                <li id="application-content-crosswalksite">
+                    <a href="javascript:runApp('res/application-content-crosswalksite.html')" data-transition="slide" style="">
+                        <h2>application-content-crosswalksite</h2>
+                    </a>
+                </li>                 
+                <li data-role="list-divider" role="heading">Test background support</li>
+                <li id="setting-bs-disable">
+                    <a href="javascript:runApp('res/setting-bs-disable.html')" data-transition="slide" style="">
+                        <h2>setting-bs-disable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test context menu</li>
+                <li id="setting-cm-disable">
+                    <a href="javascript:runApp('res/setting-cm-disable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-cm-enable">
+                    <a href="javascript:runApp('res/setting-cm-enable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test encryption</li>
+                <li id="setting-encrypt-disable">
+                    <a href="javascript:runApp('res/setting-encrypt-disable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-encrypt-enable">
+                    <a href="javascript:runApp('res/setting-encrypt-enable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test hwkey</li>
+                <li id="setting-hwkey-default">
+                    <a href="javascript:runApp('res/setting-hwkey-default.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-default</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-disable">
+                    <a href="javascript:runApp('res/setting-hwkey-disable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-enable">
+                    <a href="javascript:runApp('res/setting-hwkey-enable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of tizen-specific widget configuration extension and w3c widget configuration extension.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support additional configuration elements that are not included in W3C Widget Packaging and XML Configuration, like "&lt;tizen:application&gt;", "&lt;tizen:privilege&gt;", "&lt;tizen:setting&gt;" etc.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/js/main.js b/ivi/tests/ConfigurationExtension/js/main.js
new file mode 100644 (file)
index 0000000..9023934
--- /dev/null
@@ -0,0 +1,282 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt2apc001',
+                    'wrt2sam045',
+                    'wrt2sao044',
+                    'wrt2saz043',
+                    'wrt2sod031',
+                    'wrt2sbd024',
+                    'wrt2scd026',
+                    'wrt2sce027',
+                    'wrt2shd044',
+                    'wrt2skd041',
+                    'wrt2ske042',
+                    'wrt2sed028',
+                    'wrt2see029',
+                    'wrt2apc002');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ConfigurationExtension";
+var RESULT_FILE_NAME = "tct-behavior-child.ce.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/ivi/tests/ConfigurationExtension/js/tests.js b/ivi/tests/ConfigurationExtension/js/tests.js
new file mode 100644 (file)
index 0000000..dac8aad
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var nolaunch_wgt = new Array('setting-encrypt-enable','setting-encrypt-disable');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    }
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ConfigurationExtension/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.html b/ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.html
new file mode 100644 (file)
index 0000000..7f4d9df
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-content">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-content-crosswalksite"/>
+                <input type="hidden" id="app_id"  value="wrt2apc002.ApplicationContent"/>
+                <input type="hidden" id="package_id" value="wrt2apc002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget redirect the start page to "https://www.crosswalk-project.org/".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.wgt b/ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.wgt
new file mode 100644 (file)
index 0000000..1dbf25c
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/application-content-crosswalksite.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/application-content.html b/ivi/tests/ConfigurationExtension/res/application-content.html
new file mode 100644 (file)
index 0000000..bc2e44e
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-content">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-content"/>
+                <input type="hidden" id="app_id"  value="wrt2apc001.ApplicationContent"/>
+                <input type="hidden" id="package_id" value="wrt2apc001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget redirect the start page to "http://www.google.com".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/application-content.wgt b/ivi/tests/ConfigurationExtension/res/application-content.wgt
new file mode 100644 (file)
index 0000000..abff3e5
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/application-content.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-bs-disable.html b/ivi/tests/ConfigurationExtension/res/setting-bs-disable.html
new file mode 100644 (file)
index 0000000..a76768c
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-bs-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-bs-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sbd024.SettingBsDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sbd024"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the counter on the page doesn't change when the widget is running background.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-bs-disable.wgt b/ivi/tests/ConfigurationExtension/res/setting-bs-disable.wgt
new file mode 100644 (file)
index 0000000..42500ce
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-bs-disable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-cm-disable.html b/ivi/tests/ConfigurationExtension/res/setting-cm-disable.html
new file mode 100644 (file)
index 0000000..da79881
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2scd026.SettingCmDisable"/>
+                <input type="hidden" id="package_id" value="wrt2scd026"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>No popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-cm-disable.wgt b/ivi/tests/ConfigurationExtension/res/setting-cm-disable.wgt
new file mode 100644 (file)
index 0000000..84064b4
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-cm-disable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-cm-enable.html b/ivi/tests/ConfigurationExtension/res/setting-cm-enable.html
new file mode 100644 (file)
index 0000000..b8c164f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2sce027.SettingCmEnable"/>
+                <input type="hidden" id="package_id" value="wrt2sce027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-cm-enable.wgt b/ivi/tests/ConfigurationExtension/res/setting-cm-enable.wgt
new file mode 100644 (file)
index 0000000..fd771ce
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-cm-enable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.html b/ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.html
new file mode 100644 (file)
index 0000000..d90a40e
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sed028.SettingEncryptDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sed028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is not encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: "app_launcher -l" in "app" user to get the app id of setting-encrypt-disable.</li>
+              <li>Use the command: "vi /home/app/.config/xwalk-service/applications/'app-id'/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is a normal text.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt b/ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt
new file mode 100644 (file)
index 0000000..0c6922f
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.html b/ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.html
new file mode 100644 (file)
index 0000000..c5668fa
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2see029.SettingEncryptEnable"/>
+                <input type="hidden" id="package_id" value="wrt2see029"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: "app_launcher -l" in "app" user to get the app id of setting-encrypt-enable.</li>
+              <li>Use the command: "vi /home/app/.config/xwalk-service/applications/'app-id'/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is messy code.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt b/ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt
new file mode 100644 (file)
index 0000000..8dbcfbb
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-default.html b/ivi/tests/ConfigurationExtension/res/setting-hwkey-default.html
new file mode 100644 (file)
index 0000000..e52b061
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-default">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-default"/>
+                <input type="hidden" id="app_id"  value="wrt2shd044.settinghwkeydefault"/>
+                <input type="hidden" id="package_id" value="wrt2shd044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-default.wgt b/ivi/tests/ConfigurationExtension/res/setting-hwkey-default.wgt
new file mode 100644 (file)
index 0000000..cc600e7
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-hwkey-default.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.html b/ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.html
new file mode 100644 (file)
index 0000000..2db22bf
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2skd041.settinghwkeydisable"/>
+                <input type="hidden" id="package_id" value="wrt2skd041"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are two "Pass" displayed and no change on the screen when click the menu or back key.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt b/ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt
new file mode 100644 (file)
index 0000000..7ba8c67
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt differ
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.html b/ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.html
new file mode 100644 (file)
index 0000000..a776b29
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2ske042.settinghwkeyenable"/>
+                <input type="hidden" id="package_id" value="wrt2ske042"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt b/ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt
new file mode 100644 (file)
index 0000000..a090050
Binary files /dev/null and b/ivi/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt differ
diff --git a/ivi/tests/DataSync/NOTICE b/ivi/tests/DataSync/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/DataSync/index.html b/ivi/tests/DataSync/index.html
new file mode 100755 (executable)
index 0000000..915f1c9
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview">
+            <li data-role="list-divider">OMA DS(Data Synchronization) Server</li>
+            <li>
+                <input type="url" id="url" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server ID</li>
+            <li>
+                <input type="text" id="account" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Password</li>
+            <li>
+                <input type="password" id="passwd" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Database URI</li>
+            <li>
+                <input type="text" id="database" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Connect</li>
+            <li>
+                <div data-role="button" onclick="addProfile();">Add Profile</div>
+            </li>
+            <li data-role="list-divider">Contacts Sync</li>
+            <li>
+                <div data-role="button" onclick="startSync();">Start Sync</div>
+            </li>
+            <li data-role="list-divider">Contacts List</li>
+        </ul>
+        <ul data-role="listview" id="contactsList"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if data is successfully synchronized with an OMA DS server</p><br>
+            <p>Precondition: Pick one in &lt;Sample OMA DS Server List&gt; and add test contacts</p>
+            <p>&lt;Sample OMA DS Server List&gt;</p>
+            <p>- http://my.funambol.com/sync</p>
+            <p>- https://www.everdroid.com/web</p>
+            <p>- OMA DS 1.2 protocol Server</p><br>
+            <p>1. Fill in preset OMA DS Server, ID, Password and Database URI containing data to sync.<br>
+For the Database URI field "OMA DS Server Database URI",<br>
+- if you choose funambol OMA DS Server for this test, a tester needs to fill "card" string to the URI field.<br>
+- if you choose everdroid OMA DS Server for this test, a tester needs to fill "con" string to the URI field.<br>
+- if you are using other OMA DS Servers, then you need to go to the web page of the OMA DS Server which you use for the test.</p>
+            <p>2. Click Add Profile</p>
+            <p>3. Click Start Sync</p>
+            <p>4. Check the contacts are synchronized with the OMA DS server</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/DataSync/js/main.js b/ivi/tests/DataSync/js/main.js
new file mode 100755 (executable)
index 0000000..37dff3d
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var profileId = null;
+var account, passwd, url, database;
+
+var init = function () {
+    serverGuide();
+};
+
+function serverGuide() {
+    //alert("<Sample OMA DS Server List>\n1. http://my.funambol.com/sync \n2. https://www.everdroid.com/web  \n3. OMA DS 1.2 protocol Server\n*Recommend the 1st server");
+}
+
+function addProfile() {
+    try {
+        account = $("#account").val();
+        passwd = $("#passwd").val();
+        url = $("#url").val();
+        database = $("#database").val();
+
+        // Create a sync info.
+        var syncInfo = new tizen.SyncInfo(url, account, passwd, "MANUAL", "REFRESH_FROM_SERVER");
+
+        // Sync both contacts and events.
+        var contactInfo = new tizen.SyncServiceInfo(true, "CONTACT", database);
+        var serviceInfo = [contactInfo];
+
+        // Adds a profile to sync.
+        var profile = new tizen.SyncProfileInfo("MyProfile", syncInfo, serviceInfo);
+        tizen.datasync.add(profile);
+
+        profileId = profile.profileId;
+        alert("Add Profile ID : " + profileId);
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function startSync() {
+    var total;
+    var syncProgressCallback = {
+            onprogress: function (profileId, serviceType, isFromServer, totalPerType, syncedPerType) {
+                console.log('Total: ' + totalPerType + ', synced: ' + syncedPerType + ', for the sync type: ' + serviceType);
+                total = totalPerType;
+            },
+            onstopped: function (profileId) {
+                removeProfile();
+            },
+            onfailed: function (profileId, error) {
+                alert('Please try again in a few minutes.');
+                console.log('Failed with id: ' + profileId + ', error name: ' + error.name);
+            },
+            oncompleted: function (profileId) {
+                console.log("Completed with id" + profileId);
+                alert("Sync Completed - " + total + " Contacts");
+                contactList();
+            }
+    };
+
+    try {
+        tizen.datasync.startSync(profileId, syncProgressCallback);
+        alert("Contact sync start\n(OMA DS Server - Device)");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function removeProfile() {
+    try {
+        tizen.datasync.remove(profileId);
+        console.log("Removed ProfileId.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function stopSync() {
+    try {
+        tizen.datasync.stopSync(profileId);
+        console.log("Stopped.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+/*function getLastSyncStatistics() {
+    try {
+        // Gets the sync statistics information with the given id.
+        var statistics = tizen.datasync.getLastSyncStatistics(profileId);
+        alert("Num statistics: " + statistics.length);
+        for(i in statistics) {
+            alert("syncStatus: " + statistics[i].syncStatus + ", serviceType: " + statistics[i].serviceType + ", lastSyncTime: " + statistics[i].lastSyncTime);
+            alert("serverToClientTotal: " + statistics[i].serverToClientTotal + ", serverToClientAdded: " + statistics[i].serverToClientAdded + ", serverToClientUpdated: " + statistics[i].serverToClientUpdated + ", serverToClientRemoved: " + statistics[i].serverToClientRemoved);
+            alert("clientToServerTotal: " + statistics[i].clientToServerTotal + ", clientToServerAdded: " + statistics[i].clientToServerAdded + ", clientToServerUpdated: " + statistics[i].clientToServerUpdated + ", clientToServerRemoved: " + statistics[i].clientToServerRemoved);
+        }
+    } catch(err) {
+        console.log(err.message);
+    }
+}*/
+
+function contactList() {
+    function successCallback(contacts) {
+        var str = "";
+
+        if(contacts.length > 0)
+        {
+            for (var i = 0; i < contacts.length; i++)
+            {
+                str += '<li>' + contacts[i].name.displayName + ' (' + contacts[i].phoneNumbers[0].number + ')</li>';
+            }
+            $("#contactsList").html(str).trigger("create").listview("refresh");
+        }
+        else
+        {
+            alert("Not found Contacts");
+        }
+        removeProfile();
+    }
+
+    function errorCallback(err) {
+        alert("An error occurred: " + err.message);
+    }
+
+    var filter = new tizen.AttributeFilter("lastUpdated", "EXISTS", null);
+
+    try {
+        tizen.contact.getDefaultAddressBook().find(successCallback, errorCallback, filter);
+    } catch(err) {
+        alert('The following error occurred while finding: ' +  err.name);
+    }
+}
+$(document).bind('pageinit', init);
\ No newline at end of file
diff --git a/ivi/tests/Download/NOTICE b/ivi/tests/Download/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/Download/css/style.css b/ivi/tests/Download/css/style.css
new file mode 100644 (file)
index 0000000..6759e4c
--- /dev/null
@@ -0,0 +1,27 @@
+/* progress bar container */
+#progressbar {
+    border: 1px solid black;
+    width: 328px;
+    height: 18px;
+    position: relative;
+    text-align: center;
+    color: white;
+    -webkit-border-radius: 8px;
+}
+/* color bar */
+#progressbar div.progress {
+    position: absolute;
+    width: 0;
+    height: 100%;
+    overflow: hidden;
+    background-color: #369;
+    -webkit-border-radius: 8px;
+}
+/* text off bar */
+#progressbar div.text {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    text-align: center;
+    -webkit-border-radius: 8px;
+}
\ No newline at end of file
diff --git a/ivi/tests/Download/index.html b/ivi/tests/Download/index.html
new file mode 100755 (executable)
index 0000000..c8b9ee2
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<link rel="stylesheet" type="text/css" href="css/style.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="js/jqueryprogressbar.js" type="text/javascript"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Download URL</li>
+                <li>
+                    <input type="url" id="url" value="http://download.tizen.org/tct/tct-download-tizen-tests-image-hq.png" />
+                </li>
+                <li data-role="list-divider">Progress Bar</li>
+                <li>
+                    <div data-role="none" id="progressbar"></div>
+                </li>
+                <li data-role="list-divider">Download</li>
+                <li>
+                    <div data-role="button" id="download">Download</div>
+                    <div data-role="button" id="pause">Pause</div>
+                    <div data-role="button" id="resume">Resume</div>
+                    <div data-role="button" id="cancel">Cancel</div>
+                </li>
+                <li data-role="list-divider">Download folder</li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Download list delete</li>
+                <li>
+                    <div data-role="button" id="delete">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the file is successfully downloaded</p><br>
+                <p>1. Fill in Download URL field (or use the default)</p>
+                <p>2. Click Download button and check the Progress Bar updated</p>
+                <p>3. Click Cancel, Pause, Download buttons to verify the functionalities</p>
+                <p>4. Check a download directory if the file successfully downloaded</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Download/js/jqueryprogressbar.js b/ivi/tests/Download/js/jqueryprogressbar.js
new file mode 100644 (file)
index 0000000..457b54a
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2007 Josh Bush (digitalbush.com)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Progress Bar Plugin for jQuery
+ * Version: Alpha 2
+ * Release: 2007-02-26
+ */
+
+(function($) {
+    //Main Method
+    $.fn.reportprogress = function(val,maxVal) {
+        var max=100;
+        if(maxVal)
+            max=maxVal;
+        return this.each(
+            function(){
+                var div=$(this);
+                var innerdiv=div.find(".progress");
+
+                if(innerdiv.length!=1){
+                    innerdiv=$("<div class='progress'></div>");
+                    div.append("<div class='text'>&nbsp;</div>");
+                    $("<span class='text'>&nbsp;</span>").css("width",div.width()).appendTo(innerdiv);
+                    div.append(innerdiv);
+                }
+                var width=Math.round(val/max*100);
+                innerdiv.css("width",width+"%");
+                div.find(".text").html(width+" %");
+            }
+        );
+    };
+})(jQuery);
diff --git a/ivi/tests/Download/js/main.js b/ivi/tests/Download/js/main.js
new file mode 100644 (file)
index 0000000..869a2f8
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gDownloadId, gDocumentsDir, gFiles;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#list").delegate("div", "vclick", function() {
+        deleteFileFromFolder($(this).parent().data("id"));
+        return false;
+    });
+
+    $("#download").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "DOWNLOADING") {
+                alert("Already downloading");
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            download();
+        }
+        return false;
+    });
+
+    $("#resume").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "PAUSED") {
+                try {
+                    tizen.download.resume(gDownloadId);
+                    alert("Resumed");
+                } catch (exc) {
+                    alert("download.resume failed: " + exc.message);
+                }
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            alert("No download in progress");
+        }
+        return false;
+    });
+
+    $("#pause").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        var state = tizen.download.getState(gDownloadId);
+
+        if (state == "PAUSED") {
+            alert("Already paused");
+        } else {
+            try {
+                tizen.download.pause(gDownloadId);
+                alert("Paused");
+            } catch (exc) {
+                alert("download.pause failed: " + exc.message);
+            }
+        }
+        return false;
+    });
+
+    $("#cancel").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        try {
+            tizen.download.cancel(gDownloadId);
+        } catch (exc) {
+            alert("download.cancel failed: " + exc.message);
+        }
+        return false;
+    });
+
+    $("#delete").bind("vclick", function() {
+        deleteAllFile();
+        return false;
+    });
+    prepareDirsAndFiles();
+});
+
+function onError(err) {
+    alert("Error: " + err.message);
+}
+
+function prepareDirsAndFiles() {
+    try {
+        tizen.filesystem.resolve("downloads", function(dir) {
+            gDocumentsDir = dir;
+            showFileList();
+        }, onError, "rw");
+    } catch (exc) {
+        alert("tizen.filesystem.resolve(\"downloads\") exc: " + exc.message);
+    }
+}
+
+function makeFileList(files) {
+    var str = "";
+
+    gFiles = files;
+    $("#list>li[data-id]").remove();
+
+    for (var i = 0; i < files.length; i++) {
+        if (files[i].isDirectory == false) {
+            str += '<li class="ui-li-text-ellipsis" data-id="'
+                + i
+                + '">'
+                + files[i].name
+                + '<div data-role="button" data-inline="true">Delete</div></li>';
+        }
+    }
+    $("#list").append(str).trigger("create").listview("refresh");
+}
+
+function showFileList() {
+    if(gDocumentsDir) {
+        gDocumentsDir.listFiles(function(files) {
+            makeFileList(files);
+        }, onError);
+    }
+}
+
+function deleteFileFromFolder(id) {
+    if (id == null) {
+        return;
+    }
+
+    try {
+        gDocumentsDir.deleteFile(gFiles[Number(id)].fullPath, showFileList, onError);
+        alert("Download delete");
+    } catch (exc) {
+        alert("deleteFile exc: " + exc.message);
+    }
+}
+
+function deleteAllFile() {
+    alert("Download delete all");
+    if(gFiles.length > 0)
+        for(var i = 0; i < gFiles.length; i++)
+            if(gFiles[i].isFile == true)
+                gDocumentsDir.deleteFile(gFiles[i].fullPath, showFileList, onError);
+}
+
+function download() {
+    var url = $("#url").val();
+
+    if (url == "") {
+        alert("Input target URL");
+        return;
+    }
+
+    var downloadRequest = new tizen.DownloadRequest(url, "downloads"),
+    listener = {
+        onprogress: function(id, receivedSize, totalSize) {
+            //$("#progressbar").progressbar("option", "value", receivedSize/totalSize*100);
+            if(receivedSize > 0)
+                $("#progressbar").reportprogress(receivedSize/totalSize*100);
+            console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
+        },
+        onpaused: function(id) {
+            console.log('Paused with id: ' + id);
+            //showFileList();
+        },
+        oncanceled: function(id) {
+            alert("Canceled");
+            //showFileList();
+            console.log(id);
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        },
+        oncompleted: function(id, fullPath) {
+            alert("Completed! Full path: " + fullPath);
+            showFileList();
+            gDownloadId = undefined;
+        },
+        onfailed: function(id, error) {
+            alert("Failed! Err: " + error.name);
+            //showFileList();
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        }
+    };
+
+    //$("#progressbar").progressbar("option", "value", 0);
+    $("#progressbar").reportprogress(0);
+
+    try {
+        gDownloadId = tizen.download.start(downloadRequest, listener);
+        alert("Download");
+    } catch (exc) {
+        alert("download.start failed : " + exc.message);
+    }
+}
+
+var pct=0;
+var handle=0;
+function update(){
+    $("#progressbar").reportprogress(++pct);
+    if(pct==100){
+        clearInterval(handle);
+        $("#run").val("start");
+        pct=0;
+    }
+}
+jQuery(function($){
+    $("#run").click(function(){
+        if(this.value=="start"){
+            handle=setInterval("update()",100);
+            this.value="stop";
+        }else{
+            clearInterval(handle);
+            this.value="start";
+        }
+    });
+    $("#reset").click(function(){
+        pct=0;
+        $("#progressbar").reportprogress(0);
+    });
+});
diff --git a/ivi/tests/DragandDrop/index.html b/ivi/tests/DragandDrop/index.html
new file mode 100644 (file)
index 0000000..5796f23
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+      <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports drag and drop functions.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the drag and drop test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the blue rectangle could be drag and drop to the white box.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/DragandDrop/js/main.js b/ivi/tests/DragandDrop/js/main.js
new file mode 100644 (file)
index 0000000..0dd8e11
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhdragdrop")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The application DragandDrop is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(checkInstalledPkg("bhdragdrop")) {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhdragdrop", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : DragandDrop application is already uninstalled or not installed");
+    }
+    try {
+        tizen.application.launch("bhdragdrop.DragandDrop", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/DragandDrop.wgt",
+                    true,
+                    function() {
+                        console.log("DragandDrop Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DragandDrop/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/ivi/tests/DragandDrop/res/DragandDrop b/ivi/tests/DragandDrop/res/DragandDrop
new file mode 100644 (file)
index 0000000..66dcb5c
Binary files /dev/null and b/ivi/tests/DragandDrop/res/DragandDrop differ
diff --git a/ivi/tests/DynamicBox/index.html b/ivi/tests/DynamicBox/index.html
new file mode 100644 (file)
index 0000000..5ef78d8
--- /dev/null
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of DynamicBox application: mouse event and visibility event for DynamicBox.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button, test step passes if all app widgets installed successfully.</li>
+              <li>Click the "Launch" button to launch the DynamicBox Viewer. After each step below, press "Back" key (soft or hard key) to go forward next step:</li>
+              <ol>
+                <li>Click the "Mouse event false"; press the filled blue square; test step passes if the blue square doesn't change;</li>
+                <li>Click the "Sample"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Dynamic Box"; press the menu button to select size 354x354; then drag down the box; test step passes if there apears a button "Send message to Box", and click the button, "Hello, Dynamic Box" appends into the box;</li>
+                <li>Click the "AppWidget Content mouse event"; press the filled blue square; test step passes if the blue square changes to green;</li>
+                <li>Click the "AppWidget Load event"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Visibility widget"; test step passes if there is a green 'Pass' text, and after drag down the 'Pass' there appears 'PD index.html';</li>
+                <li>Click the "Size Decoration"; press the menu button to select box size; test step passes if the box in '354x354' size has different frame decoration from those in '175x175' and '345x175' sizes;</li>
+                <li>Click the "Size Preview"; press the menu button; test step passes if there are icons in the size list.</li>
+              </ol>
+              <li>Click the "Uninstall" button, test step passes if all app widgets uninstalled successfully.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test steps pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/DynamicBox/js/main.js b/ivi/tests/DynamicBox/js/main.js
new file mode 100644 (file)
index 0000000..4fdfc29
--- /dev/null
@@ -0,0 +1,322 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "";
+var wgt_names = new Array('app-widget-mouse-event-false.wgt',
+                          'app-widget-sample.wgt',
+                          'app-widget-box-appwidgetready-event.wgt',
+                          'app-widget-mouse-event-true.wgt',
+                          'app-widget-load-event.wgt',
+                          'app-widget-visibility-event.wgt',
+                          'app-widget-box-size-decoration.wgt',
+                          'app-widget-box-size-preview.wgt');
+
+var package_ids = new Array('wrt6awi014',
+                            'wrt6app001',
+                            'wrt6awb006',
+                            'wrt6awi013',
+                            'wrt6aws016',
+                            'wrt6aws018',
+                            'wrt6awb003',
+                            'wrt6awb005');
+
+var id_maps = {'rMLtTXzQr2-2.0.0-arm.tpk':                'rMLtTXzQr2',
+               'SD2nFxbyeA-2.0.0-i386.tpk':               'SD2nFxbyeA',
+               'app-widget-mouse-event-false.wgt':        'wrt6awi014',
+               'app-widget-sample.wgt':                   'wrt6app001',
+               'app-widget-box-appwidgetready-event.wgt': 'wrt6awb006',
+               'app-widget-mouse-event-true.wgt':         'wrt6awi013',
+               'app-widget-load-event.wgt':               'wrt6aws016',
+               'app-widget-visibility-event.wgt':         'wrt6aws018',
+               'app-widget-box-size-decoration.wgt':      'wrt6awb003',
+               'app-widget-box-size-preview.wgt':         'wrt6awb005'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DynamicBox/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/DynamicBox/res/LICENSE.Flora b/ivi/tests/DynamicBox/res/LICENSE.Flora
new file mode 100644 (file)
index 0000000..4a0af40
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices
+     within Derivative Works that You distribute, alongside or as an addendum
+     to the NOTICE text from the Work, provided that such additional attribution
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/ivi/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk b/ivi/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk
new file mode 100644 (file)
index 0000000..8241fb8
Binary files /dev/null and b/ivi/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt b/ivi/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt
new file mode 100644 (file)
index 0000000..0897346
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-box-size-decoration.wgt b/ivi/tests/DynamicBox/res/app-widget-box-size-decoration.wgt
new file mode 100644 (file)
index 0000000..8e97297
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-box-size-decoration.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-box-size-preview.wgt b/ivi/tests/DynamicBox/res/app-widget-box-size-preview.wgt
new file mode 100644 (file)
index 0000000..774a7c3
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-box-size-preview.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-load-event.wgt b/ivi/tests/DynamicBox/res/app-widget-load-event.wgt
new file mode 100644 (file)
index 0000000..2a220c4
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-load-event.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-mouse-event-false.wgt b/ivi/tests/DynamicBox/res/app-widget-mouse-event-false.wgt
new file mode 100644 (file)
index 0000000..a274947
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-mouse-event-false.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-mouse-event-true.wgt b/ivi/tests/DynamicBox/res/app-widget-mouse-event-true.wgt
new file mode 100644 (file)
index 0000000..1991dba
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-mouse-event-true.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-sample.wgt b/ivi/tests/DynamicBox/res/app-widget-sample.wgt
new file mode 100644 (file)
index 0000000..3ce54bf
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-sample.wgt differ
diff --git a/ivi/tests/DynamicBox/res/app-widget-visibility-event.wgt b/ivi/tests/DynamicBox/res/app-widget-visibility-event.wgt
new file mode 100644 (file)
index 0000000..23750ca
Binary files /dev/null and b/ivi/tests/DynamicBox/res/app-widget-visibility-event.wgt differ
diff --git a/ivi/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk b/ivi/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk
new file mode 100644 (file)
index 0000000..777a62a
Binary files /dev/null and b/ivi/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk differ
diff --git a/ivi/tests/FileReader/css/style.css b/ivi/tests/FileReader/css/style.css
new file mode 100644 (file)
index 0000000..6ff3fab
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+*/
+
+/* Message Div */
+#messageInfo {
+   margin: 10px;
+}
+.errorMessage {
+    color: red;
+}
+
+/* File List */
+#filesList {
+    table-layout: fixed;
+}
+
+#filesList tr td {
+    padding: 5px;
+    font-size: large;
+    word-break: break-all;
+    word-wrap:break-word;
+}
+
+#filePreview {
+    margin-top: 10px;
+    text-align: center;
+    border: 1px solid black;
+    width: 100%;
+    height: 300px;
+    overflow: auto;
+}
+
+#fileContent {
+    position:relative;
+    top:40%;
+}
+
+#uploadButton {
+    margin-top: 20px;
+}
diff --git a/ivi/tests/FileReader/index.html b/ivi/tests/FileReader/index.html
new file mode 100644 (file)
index 0000000..08c7502
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <input id="fileUpload" type="file" multiple size="80" onchange="getFileList()" hidden/>
+            <div id="messageInfo">Upload: 0 file</div>
+            <table id="filesList" border="1" width="100%" align="center">
+                <tr id="example"><td width='70%'>No file selected</td><td width='30%'>0KB</td></tr>
+            </table>
+            <div align="center"><div id="filePreview"><p id="fileContent">No file data</p></div></div>
+            <div id="uploadButton" data-role="button">Open files</div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of File Reader. Tests the functionality of loading one or multiple files, opening the files one by one by clicking the hyperlink in file name.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure at least one txt file is located in the device.</p>
+            <p>Expected Result: </p>
+            <ul>
+              <li>File upload successfully.</li>
+              <li>File size show correctly.</li>
+              <li>File content print on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/FileReader/js/main.js b/ivi/tests/FileReader/js/main.js
new file mode 100644 (file)
index 0000000..f046a13
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+*/
+$(document).ready(function(){
+    $("#uploadButton").on("click", function() {
+        if (document.createEvent) {
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#fileUpload")[0].dispatchEvent(evt);
+        }
+    });
+    DisablePassButton();
+});
+
+function getFileList() {
+    try{
+        // get FileList through input element
+        var filesList = document.getElementById("fileUpload").files;
+        // FileList.length
+        if(filesList && filesList.length > 0){
+            $("#example").remove();
+            $("#messageInfo").html("Upload: " + filesList.length + " file/s");
+            var filesStr = "";
+            for(var i= 0; i < filesList.length; i++) {
+                // FileList.item() to get file items
+                var file = filesList.item(i);
+                // Blob.slice testing
+                file.slice = file.slice || file.webkitSlice || file.mozSlice;
+                var fileBlob = file.slice(0, file.size);
+                // This fileBlob should be the same with the file
+                if(fileBlob.size == file.size){
+                    filesStr = filesStr + "<tr><td width='70%'><a href='javascript:startRead(" + i + ")'>" + file.name + "</a></td><td width='30%'>" + Math.round(file.size/1024) + "KB</td>" + "</tr>";
+                }
+            }
+            $("#filesList").show();
+            $("#filesList").html(filesStr);
+        }
+    } catch (err) {
+        $("#messageInfo").addClass("errorMessage");
+        $("#messageInfo").html("Error: " + err.code + " - " + err.message);
+    }
+}
+
+var filetype = "";
+function startRead(index) {
+
+    var file = document.getElementById("fileUpload").files[index];
+    if (file) {
+        var reader = new FileReader();
+        if(file.type.indexOf("text") >= 0) {
+            // readAsText
+            // Read file into memory as UTF-8
+            reader.readAsText(file, "UTF-8");
+            filetype = "text";
+        } else if (file.type.indexOf("image") >= 0) {
+            // readAsDataURL
+            reader.readAsDataURL(file);
+            filetype = "image";
+        } else {
+            try {
+                //try to read other types of file as text.
+                reader.readAsText(file, "UTF-8");
+                filetype = "text";
+            } catch(e) {
+                $.mobile.hidePageLoadingMsg();
+                $("#filePreview").html("Cannot pre-view this type of file!");
+            }
+        }
+        EnablePassButton();
+        // Handle progress, success, and errors
+        reader.onloadstart = loadstart;
+        reader.onload = loaded;
+        reader.onloadend = loadend;
+        reader.onerror = errorHandler;
+    }
+}
+function loadstart(evt) {
+    // loading
+    $.mobile.showPageLoadingMsg();
+}
+
+function loaded(evt) {
+    var reader = evt.target;
+    if (reader && reader.result) {
+        if(filetype == "text") {
+            $("#filePreview").html(reader.result);
+        } else if (filetype == "image") {
+            $("#filePreview").html("<image src='" + reader.result + "'></image>");
+        }
+    }
+}
+
+function loadend(evt) {
+    $.mobile.hidePageLoadingMsg();
+}
+
+function errorHandler(evt) {
+   $("#messageInfo").addClass("errorMessage");
+   $("#messageInfo").html(evt.target.error.name);
+}
diff --git a/ivi/tests/FullScreen/index.html b/ivi/tests/FullScreen/index.html
new file mode 100644 (file)
index 0000000..61b38aa
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style>
+        div:full-screen {
+            opacity: 0;
+        }
+        div:-webkit-full-screen {
+            opacity: 0;
+        }
+        :full-screen-ancestor {
+            opacity: 1;
+            background: green;
+        }
+        :-webkit-full-screen-ancestor {
+            background: green;
+        }
+    </style>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider" id="labelFullScreen">FullScreen</li>
+        <li id ="buttonFullScreen">
+          <div data-role="button" id="requestFullScreen">Request</div>
+          <div data-role="button" id="cancelFullScreen" class="hideButton">Cancle FullScreen</div>
+        </li>
+        <li data-role="list-divider" id="labelcssFullScreen">CSS FullScreen</li>
+        <li id ="buttoncssFullScreen">
+          <div data-role="button" id="cssFullScreen">Request</div>
+          <div data-role="button" id="cancelCssFullScreen" class="hideButton">Cancle CSS FullScreen</div>
+        </li>
+      </ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the full screen mode and CSS full screen mode could be enabled and cancelled. The CSS full screen mode is filled with green color in background.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if full screen mode and CSS full screen mode functions all work well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/ivi/tests/FullScreen/js/main.js b/ivi/tests/FullScreen/js/main.js
new file mode 100644 (file)
index 0000000..81c6db3
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+$(document).ready(function () {
+    DisablePassButton();
+    $("#requestFullScreen").on(
+        "click",
+        function(evt) {
+            document.documentElement.webkitRequestFullScreen();
+            requestElement("cancelFullScreen");
+            EnablePassButton();
+     });
+
+     $("#cancelFullScreen").on(
+        "click",
+        function(evt) {
+            document.webkitCancelFullScreen();
+            requestElement("");
+     });
+
+     $("#cssFullScreen").on(
+        "click",
+        function(evt) {
+            if (!document.webkitIsFullScreen) {
+                var element = evt.originalEvent.srcElement;
+                requestElement("cancelCssFullScreen");
+                element.webkitRequestFullScreen();
+                setTimeout(function() {
+                    document.documentElement.webkitRequestFullScreen();
+                }, 50);
+            }
+            EnablePassButton();
+     });
+
+     $("#cancelCssFullScreen").on(
+        "click",
+        function(evt) {
+            if (document.webkitIsFullScreen) {
+                document.webkitCancelFullScreen();
+                if ($(document)["context"].styleSheets.length > 2) {
+                     $(document)["context"].styleSheets[2].deleteRule(1);
+                }
+                document.documentElement.webkitRequestFullScreen();
+                requestElement("");
+            }
+     });
+});
+
+function requestElement(ID) {
+    var IDs = ["requestFullScreen", "cancelFullScreen", "cssFullScreen", "cancelCssFullScreen", "labelFullScreen", "labelcssFullScreen", "buttonFullScreen", "buttoncssFullScreen"];
+    IDs.forEach(function(entry) {
+        if (ID != entry) {
+            if (ID == "cancelFullScreen" && entry != "labelFullScreen" && entry != "buttonFullScreen") {
+                $("#" + entry).hide();
+            } else if (ID == "cancelCssFullScreen" && entry != "labelcssFullScreen" && entry != "buttoncssFullScreen") {
+                $("#" + entry).hide();
+            }
+        } else {
+            $("#" + entry).css("display", "");
+            $("#" + entry).show();
+        }
+        if (ID == "") {
+            if (entry == IDs[1] || entry == IDs[3]) {
+                $("#" + entry).hide();
+            } else {
+                $("#" + entry).show();
+            }
+        }
+    });
+}
diff --git a/ivi/tests/Gamepad/index.html b/ivi/tests/Gamepad/index.html
new file mode 100644 (file)
index 0000000..072dadc
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, Jianfeng <jianfengx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test Gamepad</li>
+                <li id="Crosswalk_WebApp_ScrollIndicators_Default">
+                    <a href="javascript:runApp('res/GamePad_basic-manual.html')" data-transition="slide" style="">
+                        <h2>Gamepad_basic</h2>
+                    </a>
+                </li>
+                <li id="Crosswalk_WebApp_ScrollIndicators_LargeSize">
+                    <a href="javascript:runApp('res/GamePad_connected-manual.html')" data-transition="slide" style="">
+                        <h2>GamePad_connected</h2>
+                    </a>
+                </li>
+                <li id="Crosswalk_WebApp_ScrollIndicators_Default">
+                    <a href="javascript:runApp('res/GamePadButton_basic-manual.html')" data-transition="slide" style="">
+                        <h2>GamePadButton_basic</h2>
+                    </a>
+                </li>
+                <li id="Crosswalk_WebApp_ScrollIndicators_Map">
+                    <a href="javascript:runApp('res/GamepadEvent_gamepadconnected-manual.html')" data-transition="slide" style="">
+                        <h2>GamepadEvent_gamepadconnected</h2>
+                    </a>
+                </li>
+                <li id="Crosswalk_WebApp_ScrollIndicators_Pic">
+                    <a href="javascript:runApp('res/GamepadEvent_gamepaddisconnected-manual.html')" data-transition="slide" style="">
+                        <h2>GamepadEvent_gamepaddisconnected</h2>
+                    </a>
+                </li>                 
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the Gamepad is supported.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/Gamepad/res/GamePadButton_basic-manual.html b/ivi/tests/Gamepad/res/GamePadButton_basic-manual.html
new file mode 100644 (file)
index 0000000..80adfc3
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Jianfeng.Xu <jianfengx.xu@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Crosswalk_WebApp_ScrollIndicators_Default">
+      <div id="content">
+        <p>Please connect and press a button on gamepad.</p>
+        <p>Test Passes if show test result is 'Pass'.</p>
+        <div id = "log"></div>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Step: </p>
+          <p>Connect and press button on gamepad.</p>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test Passes if show test result is 'Pass'.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+<script>
+var text = "";
+function runTest(gamepads) {
+  text = "";
+  for (var j = 0; j < gamepads.length; j++) {
+    var pad = gamepads[j];
+    if(pad) {
+      var gamepadbutton = pad.buttons[0];
+      [
+        ["boolean", "pressed", "readonly"],
+        ["double", "value", "readonly"]
+      ].forEach(function(attr) {
+            var type = attr[0];
+            var name = attr[1];
+            var read = attr[2];
+            text = text + "<br>gamepadbuttonButton_" + name + "_basic&nbsp;&nbsp;&nbsp;Check if the  readonly attribute " + name + " in gamepadbuttonButton exists and type of " + type + "&nbsp;&nbsp;&nbsp;&nbsp;";
+            document.getElementById("log").innerHTML = text;
+            if(!(name in gamepadbutton)) { 
+              text = text  + name + " does not exist&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+              document.getElementById("log").innerHTML = text;
+            } else {
+              var typeResult = true;
+              switch(type) {
+                case "double":
+                  if (typeof gamepadbutton[name] != "number") {
+                    typeResult = false;
+                  }
+                break;
+                case "boolean":
+                  if (typeof gamepadbutton[name] != "boolean") {
+                    typeResult = false;
+                  }
+                break;
+                default:
+                  break;
+              }
+              if (!typeResult)
+              {
+                text = text  + "The type of " + name +" is not " + type + "&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+                document.getElementById("log").innerHTML = text;
+              } else {
+                var readResult = true;
+                switch(type) {
+                  case "double":
+                      var dc = gamepadbutton[name];
+                      gamepadbutton[name] = dc + 1;
+                      if (dc != gamepadbutton[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  case "boolean":
+                      var dc = gamepadbutton[name];
+                      if (dc)
+                      {
+                        gamepadbutton[name] = false;
+                      }else {
+                        gamepadbutton[name] = true;
+                      }
+                      if (dc != gamepadbutton[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  break;
+                  default:
+                  break;
+                }
+                if (!readResult)
+                {
+                  text = text  + "The " + name +" is not readonly&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+                  document.getElementById("log").innerHTML = text;
+                } else {
+                  text = text  + "&nbsp;&nbsp;&nbsp;&nbsppass";
+                  document.getElementById("log").innerHTML = text;
+                }
+              }
+            }
+      });
+    }
+  }
+}
+
+function runAnimation() {  
+  var gamepads =  navigator.getGamepads();
+  if(gamepads.length > 0) {
+    runTest(gamepads);
+  };
+  window.requestAnimationFrame(runAnimation);
+}
+window.requestAnimationFrame(runAnimation);
+</script>
+</html>
diff --git a/ivi/tests/Gamepad/res/GamePad_basic-manual.html b/ivi/tests/Gamepad/res/GamePad_basic-manual.html
new file mode 100644 (file)
index 0000000..db6639f
--- /dev/null
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Jianfeng.Xu <jianfengx.xu@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Crosswalk_WebApp_ScrollIndicators_Default">
+      <div id="content">
+        <p>Please connect and press a button on gamepad.</p>
+        <p>Test Passes if show test result is 'Pass'.</p>
+        <div id = "log"></div>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Step: </p>
+          <p>Connect and press button on gamepad.</p>
+          <p>Expected Result: </p>
+          <p>Test Passes if show test result is 'Pass'.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+<script>
+var text = "";
+function runTest(gamepads) {
+  text = "";
+  for (var j = 0; j < gamepads.length; j++) {
+   var pad = gamepads[j];
+   if(pad) {
+     var gamepad = pad;
+     [
+       ["string", "id", "readonly"],
+       ["long", "index", "readonly"],
+       ["boolean", "connected", "readonly"],
+       ["double", "timestamp", "readonly"],
+       ["string", "mapping", "readonly"],
+       ["object", "axes", "readonly"],
+       ["object", "buttons", "readonly"]
+     ].forEach(function(attr) {
+            var type = attr[0];
+            var name = attr[1];
+            var read = attr[2];
+            text = text + "<br>GamePad_" + name + "_basic&nbsp;&nbsp;&nbsp;Check if the  readonly attribute " + name + " in gamepad exists and type of " + type + "&nbsp;&nbsp;&nbsp;&nbsp;";
+            document.getElementById("log").innerHTML = text;
+            if(!(name in gamepad)) { 
+              text = text  + name + " does not exist&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+              document.getElementById("log").innerHTML = text;
+            } else {
+              var typeResult = true;
+              switch(type) {
+                case "string":
+                  if(typeof gamepad[name] != "string") {
+                    typeResult = false;
+                  }
+                break;
+                case "long":
+                  if (typeof gamepad[name] != "number") {
+                    typeResult = false;
+                  }
+                break;
+                case "double":
+                  if (typeof gamepad[name] != "number") {
+                    typeResult = false;
+                  }
+                break;
+                case "boolean":
+                  if (typeof gamepad[name] != "boolean") {
+                    typeResult = false;
+                  }
+                break;
+                case "object":
+                  if (typeof gamepad[name] != "object") {
+                    typeResult = false;
+                  }
+                break;
+                default:
+                  break;
+              }
+              if (!typeResult)
+              {
+                text = text  + "The type of " + name +" is not " + type + "&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+                document.getElementById("log").innerHTML = text;
+              } else {
+                var readResult = true;
+                switch(type) {
+                  case "string":
+                      var dc = gamepad[name];
+                      gamepad[name] = dc+ "test";
+                      if (dc != gamepad[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  case "long":
+                      var dc = gamepad[name];
+                      gamepad[name] = dc + 1;
+                      if (dc != gamepad[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  case "double":
+                      var dc = gamepad[name];
+                      gamepad[name] = dc + 1;
+                      if (dc != gamepad[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  case "boolean":
+                      var dc = gamepad[name];
+                      if (dc)
+                      {
+                        gamepad[name] = false;
+                      }else {
+                        gamepad[name] = true;
+                      }
+                      if (dc != gamepad[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  case "object":
+                      gamepad[name] = null;
+                      if (null == gamepad[name])
+                      {
+                        readResult = false;
+                      }
+                  break;
+                  default:
+                  break;
+                }
+                if (!readResult)
+                {
+                  text = text  + "The " + name +" is not readonly&nbsp;&nbsp;&nbsp;&nbsp;fail</br>";
+                  document.getElementById("log").innerHTML = text;
+                } else {
+                  text = text  + "&nbsp;&nbsp;&nbsp;&nbsppass";
+                  document.getElementById("log").innerHTML = text;
+                }
+              }
+            } 
+      });            
+    }        
+  }
+}
+
+function runAnimation()
+{  
+  var gamepads =  navigator.getGamepads();
+  if(gamepads.length > 0) {
+    runTest(gamepads);
+  };
+  window.requestAnimationFrame(runAnimation);
+}
+window.requestAnimationFrame(runAnimation);
+</script>
+</html>
diff --git a/ivi/tests/Gamepad/res/GamePad_connected-manual.html b/ivi/tests/Gamepad/res/GamePad_connected-manual.html
new file mode 100644 (file)
index 0000000..56f11cd
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Jianfeng.Xu <jianfengx.xu@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Crosswalk_WebApp_ScrollIndicators_Default">
+      <div id="content">
+        <p>Please connect and press a button on gamepad.</p>
+        <p>Test Passes if the show result is true.</p>
+        <div id = "log"></div>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Step: </p>
+          <p>Connect and press button on gamepad.</p>
+          <p>Expected Result: </p>
+          <p>Test Passes if the show result is true.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+<script>
+var text = "";
+function runTest(gamepads) {
+  for (var j = 0; j < gamepads.length; j++) {
+    var pad = gamepads[j];
+    if(pad) {
+      text = pad.connected;
+      document.getElementById("log").innerHTML = text;
+    }
+  }
+}
+
+function runAnimation() {  
+  var gamepads =  navigator.getGamepads();
+  if(gamepads.length > 0) {
+    runTest(gamepads);
+  };
+  window.requestAnimationFrame(runAnimation);
+}
+window.requestAnimationFrame(runAnimation);
+</script>
+</html>
\ No newline at end of file
diff --git a/ivi/tests/Gamepad/res/GamepadEvent_gamepadconnected-manual.html b/ivi/tests/Gamepad/res/GamepadEvent_gamepadconnected-manual.html
new file mode 100644 (file)
index 0000000..fc1fafc
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Jianfeng.Xu <jianfengx.xu@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Crosswalk_WebApp_ScrollIndicators_Default">
+      <div id="content">
+        <p>Please reconnect gamepad and press button on gamepad.</p>
+        <p>Test Passes if the show result is "[object Gamepad]". </p>
+        <div id="log"></div>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Step: </p>
+          <p>Connect and press button on gamepad.</p>
+          <p>Expected Result: </p>
+          <p>Test Passes if the show result is "[object Gamepad]".</p>
+        </font>
+      </div>
+    </div>
+  </body>
+<script>
+function runTest(e) {
+  var text = "";
+  document.getElementById("log").innerHTML = e.gamepad;
+}
+
+window.addEventListener("gamepadconnected", runTest);
+</script>
+</html>
diff --git a/ivi/tests/Gamepad/res/GamepadEvent_gamepaddisconnected-manual.html b/ivi/tests/Gamepad/res/GamepadEvent_gamepaddisconnected-manual.html
new file mode 100644 (file)
index 0000000..4f8752f
--- /dev/null
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Jianfeng.Xu <jianfengx.xu@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Crosswalk_WebApp_ScrollIndicators_Default">
+      <div id="content">
+      <p>Please remove the gamepad from device.</p>
+      <p>Test Passes if the show result is "pass" when you remove the gamepad. </p>
+      <div id="log"></div>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Step: </p>
+          <p>Please remove the gamepad from device.</p>
+          <p>Expected Result: </p>
+          <p>Test Passes if the show result is "pass" when you remove the gamepad.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+<script>
+function runTest(e) {
+  var text = "";
+  document.getElementById("log").innerHTML = "pass";
+}
+
+window.addEventListener("gamepaddisconnected", runTest);
+</script>
+</html>
\ No newline at end of file
diff --git a/ivi/tests/HybridApplication/index.html b/ivi/tests/HybridApplication/index.html
new file mode 100644 (file)
index 0000000..474e867
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <title>HybridApplication</title>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" class="wgtButton">Update</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch3" class="wgtButton">Try to Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of hybrid application. Tests the functionality of two hybrid applications installation, uninstallation, launching, update and communicating with the native application by clicking the "START/ STOP" buttons, clearing the messages by clicking the "CLEAR" button. And quit the hybrid application by clicking the "RETURN" button.</p>
+            <ol>
+              <li>Click the "Install" button to install the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Update" button to update the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Uninstall" button to uninstall the Hybrid app.</li>
+              <li>Click the "Try to Launch" button to launch the Hybrid app, it will get an error msg.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test points work well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/HybridApplication/js/main.js b/ivi/tests/HybridApplication/js/main.js
new file mode 100644 (file)
index 0000000..bf94896
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+var installUrl, updateUrl, platformName, packagePath;
+var opened_flag = false;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        if (!opened_flag) {
+            opened_flag = true;
+            $("#update").removeClass("ui-disabled");
+        }
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+        EnablePassButton();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhtchybrid")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is updated");
+            $("#update").removeClass("ui-disabled");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Hybrid application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "HybridApp2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if (type == "install") {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+                if (type == "update") {
+                    $("#update").addClass("ui-disabled");
+                    $("#launch2").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                $("#launch3").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhtchybrid", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhtchybrid.HybridApp", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp2")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/HybridApp2.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp2 Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "HybridApp1")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/HybridApp1.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp1 Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    //add corssplatform support
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    platformName = deviceCapabilities.platformCoreCpuArch;
+    if (platformName.indexOf("armv7") >= 0) {
+        packagePath = "wgt-package/tests/HybridApplication/res/armv7/";
+    } else if (platformName.indexOf("x86") >= 0) {
+        packagePath = packagePath + "wgt-package/tests/HybridApplication/res/x86/";
+    } else {
+        alert("Error: Unsupported platform");
+        return;
+    }
+
+    tizen.filesystem.resolve(
+        packagePath,
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/ivi/tests/HybridApplication/res/armv7/HybridApp1 b/ivi/tests/HybridApplication/res/armv7/HybridApp1
new file mode 100644 (file)
index 0000000..9cb7376
Binary files /dev/null and b/ivi/tests/HybridApplication/res/armv7/HybridApp1 differ
diff --git a/ivi/tests/HybridApplication/res/armv7/HybridApp2 b/ivi/tests/HybridApplication/res/armv7/HybridApp2
new file mode 100644 (file)
index 0000000..38e386f
Binary files /dev/null and b/ivi/tests/HybridApplication/res/armv7/HybridApp2 differ
diff --git a/ivi/tests/HybridApplication/res/x86/HybridApp1 b/ivi/tests/HybridApplication/res/x86/HybridApp1
new file mode 100644 (file)
index 0000000..5cb4550
Binary files /dev/null and b/ivi/tests/HybridApplication/res/x86/HybridApp1 differ
diff --git a/ivi/tests/HybridApplication/res/x86/HybridApp2 b/ivi/tests/HybridApplication/res/x86/HybridApp2
new file mode 100644 (file)
index 0000000..b5d92f0
Binary files /dev/null and b/ivi/tests/HybridApplication/res/x86/HybridApp2 differ
diff --git a/ivi/tests/LocationGPS/css/style.css b/ivi/tests/LocationGPS/css/style.css
new file mode 100644 (file)
index 0000000..11effe4
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+
+.position_font {
+    color: #3399FF;
+    font-size: 20px;
+}
+
+.attribute_show {
+    margin: 2px;
+    margin-left: 5px;
+    margin-right: 5px;
+    height: 40px;
+    line-height:40px;
+    border: #666666 solid thin;
+    background-color: #CCCCCC;
+}
+td {
+    background-color: #996633;
+}
diff --git a/ivi/tests/LocationGPS/index.html b/ivi/tests/LocationGPS/index.html
new file mode 100644 (file)
index 0000000..1ad5033
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .observate {
+                border: #000 solid 1px;
+                height: 220px;
+                margin-bottom: 10px;
+            }
+            .display {
+                margin: 3px;
+            }
+        </style>
+    </head>
+    <body onload="initialize()">
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" class="observate">
+              <ul id="coordinate">
+                <li id="latitudeDiv" class="display">Latitude: n/a</li>
+                <li id="longitudeDiv" class="display">Longitude: n/a</li>
+                <li id="speedDiv" class="display">Speed: n/a</li>
+              </ul>
+              <p id="errormessage"></p>
+            </div>
+            <p class="ui-li-desc">* Make sure GPS is enabled.</p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the location information of latitude and longitude position can be fetched through GPS.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure device networking is disabled and GPS is enabled.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if both the latitude and longitude return the correct position data.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/LocationGPS/js/main.js b/ivi/tests/LocationGPS/js/main.js
new file mode 100644 (file)
index 0000000..9e1748f
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+var html_log;
+html_log = "<b>Html Console:</b><br>";
+
+function html_console(message) {
+    html_log += message + "<br>";
+    jQuery("#htmlConsole").html(html_log);
+}
+// -------------------------------------------
+
+function initialize() {
+    $.mobile.showPageLoadingMsg();
+    DisablePassButton();
+    try {
+        navigator.geolocation.watchPosition(successCallback, errorCallback, { maximumAge: 60000});
+    } catch (err) {
+        $.mobile.hidePageLoadingMsg();
+        jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + err.message + "</font></p>");
+    }
+}
+
+function successCallback (position) {
+    $.mobile.hidePageLoadingMsg();
+    EnablePassButton();
+    var coordinates = position.coords;
+    jQuery("#latitudeDiv").text("Latitude: " + coordinates.latitude);
+    jQuery("#longitudeDiv").text("Longitude: " + coordinates.longitude);
+    jQuery("#speedDiv").text("Speed: " + coordinates.speed);
+}
+
+function errorCallback (error) {
+    $.mobile.hidePageLoadingMsg();
+    var positionError_const =["PERMISSION DENIED", "POSITION UNAVAILABLE", "TIMEOUT"];
+    var index = error.code-0-1;
+    jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + positionError_const[index] + "</font></p>");
+}
diff --git a/ivi/tests/MediaPlayback/css/style.css b/ivi/tests/MediaPlayback/css/style.css
new file mode 100644 (file)
index 0000000..c2ee1ee
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:100%;
+}
+
+div.ui-slider-bg {
+border: none;
+height: 100%;
+}
diff --git a/ivi/tests/MediaPlayback/index.html b/ivi/tests/MediaPlayback/index.html
new file mode 100644 (file)
index 0000000..090164c
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/jquery/slider.tooltip.js"></script>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div id="contentdiv">
+        <video id="MediaPlayback" width="340" height="200" src="" poster="../../res/images/meego/PNG_512x512_318Kb_BBB.png" controls="controls" loop>Not Support ...</video>
+      </div>
+      <div id="volumediv" data-role="controlgroup">
+        <label for="slider-1">Volume</label>
+        <input name="slider-1" id="slider-1" min="0" max="1" step="0.01" value="0.60" data-highlight="true" data-show-value="true" type="range">
+      </div>
+      <div id="buttondiv">
+        <a href="javascript:Previous()" id="previous" data-role="button">Retest Previous Video</a>
+        <a href="javascript:Next()" id="next" data-role="button">Test Next Video</a>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the video playback of 3GP and MP4 files works correctly. And tests the functionality of playback operations including play and pause, volume up and down, time bar sliding forward and backward, full screen and normal screen switching on every video files.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well during the video playback.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/MediaPlayback/js/jquery/COPYING b/ivi/tests/MediaPlayback/js/jquery/COPYING
new file mode 100644 (file)
index 0000000..45c0b34
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+slider.tooltip.js:
+The above file is licensed under jQuery MIT License:
+From https://github.com/jquery/jquery-mobile
+Please see the LICENSE.MIT for the MIT terms and conditions.
diff --git a/ivi/tests/MediaPlayback/js/jquery/slider.tooltip.js b/ivi/tests/MediaPlayback/js/jquery/slider.tooltip.js
new file mode 100644 (file)
index 0000000..7f37a88
--- /dev/null
@@ -0,0 +1,122 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+            this._popup.html(Math.round(newValue*100)+"%" );
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+
+               if ( o.showValue ) {
+            this._handleText.html(Math.round(newValue*100)+"%");
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/ivi/tests/MediaPlayback/js/main.js b/ivi/tests/MediaPlayback/js/main.js
new file mode 100644 (file)
index 0000000..7529951
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var videoFileList = new Array("3GP_h263_CIF_30FPS_507Kbps_HE-AAC_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp", "MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4", "MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4");
+var testTarget='';
+
+$(document).ready(function(){
+    $("#previous").addClass("ui-disabled");
+
+    //add contentdiv style
+    $("#contentdiv").css({"width":"340px","margin":"0px auto"});
+    //set default video.src
+    $("#MediaPlayback").attr("src", "../../res/media/meego/" + videoFileList[0]);
+    document.getElementById("MediaPlayback").play();
+
+    document.getElementById("MediaPlayback").volume = 0.6;
+    $("#slider-1").hide();
+    DisablePassButton();
+});
+
+function Previous() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i > 1) {
+        testTarget.src="../../res/media/meego/"+videoFileList[i-1];
+        testTarget.play();
+        $("#next").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/meego/"+videoFileList[i-1];
+        testTarget.play();
+        $("#previous").addClass("ui-disabled");
+        $("#next").removeClass("ui-disabled");
+    }
+}
+
+function Next() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i < 1) {
+        testTarget.src="../../res/media/meego/"+videoFileList[i+1];
+        testTarget.play();
+        $("#previous").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/meego/"+videoFileList[i+1];
+        testTarget.play();
+        $("#next").addClass("ui-disabled");
+        $("#previous").removeClass("ui-disabled");
+        EnablePassButton();
+    }
+}
+
+function getFileName(o){
+    var pos=o.lastIndexOf("/");
+    return o.substring(pos+1);
+}
diff --git a/ivi/tests/MessagingEmail/NOTICE b/ivi/tests/MessagingEmail/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/MessagingEmail/index.html b/ivi/tests/MessagingEmail/index.html
new file mode 100755 (executable)
index 0000000..b4bddb6
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+<div data-role="page">
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+
+    <div id="content">
+        <ul data-role="listview">
+            <!-- <li data-role="list-divider">Email Precondition</li>
+            <li>
+                <div data-role="button" onclick="account();">Email Account Set</div>
+            </li> -->
+            <li data-role="list-divider">Recipient</li>
+            <li>
+                <input id="email" type="email" value="" />
+            </li>
+            <li data-role="list-divider">CC</li>
+            <li>
+                <input id="cc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">BCC</li>
+            <li>
+                <input id="bcc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">Title</li>
+            <li>
+                <input type="text" id="title" value="Behavior_Test E-mail" />
+            </li>
+            <li data-role="list-divider">Email Content</li>
+            <li>
+                <textarea id="emailContent" style="min-height:200px; width:99%;">Behavior_Test_Messaging_Email</textarea>
+            </li>
+            <li data-role="list-divider">Attachments</li>
+            <li>
+                <div data-role="button" id="addAttach">Add attachment</div>
+            </li>
+        </ul>
+        <ul data-role="listview" id="attachmentsList" style="font-size:12pt; word-wrap:break-word;"></ul>
+        <ul data-role="listview">
+            <li data-role="list-divider">Email Send</li>
+            <li>
+                <div data-role="button" id="send">Email Send</div>
+            </li>
+        </ul>
+    </div>
+
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the email is successfully sent</p><br>
+            <p>1. Fill in Recipient, CC, BCC, Title, Email Content fields</p>
+            <p>2. Select Add attachment and pick an attachment</p>
+            <p>3. Select Email Send</p>
+            <p>4. Check if the email is successfully sent(Check Recipient, CC, BCC accounts to varify the delivery)</p>
+        </font>
+    </div>
+</div>
+</body>
+</html>
diff --git a/ivi/tests/MessagingEmail/js/main.js b/ivi/tests/MessagingEmail/js/main.js
new file mode 100644 (file)
index 0000000..3df867d
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var errorMessage = '',
+    emailReg = /^([\w\-\.]+@([\w\-]+\.)+[\w\-]{2,4})?$/,
+    emailArray = [],
+    numberOfBadEmails = 0,
+    app = {
+        attach: []
+    };
+
+function replaceAll(txt, replace, with_this) {
+    return txt.replace(new RegExp(replace, 'g'), with_this);
+}
+
+function verifyEmail() {
+    var result = false, i, tempEmail, email = $('#email').val(), tab = null;
+
+    if (email === '') {
+        errorMessage = 'Enter email address';
+    } else {
+        numberOfBadEmails = 0;
+        emailArray = [];
+        tab = email.split(/[,; ]/);
+        for (i = 0; i < tab.length; i += 1) {
+            tempEmail = $.trim(tab[i]);
+            if (tempEmail !== '') {
+                if (emailReg.test(tempEmail)) {
+                    emailArray.push(tempEmail);
+                } else {
+                    numberOfBadEmails += 1;
+                }
+            }
+        }
+        if (emailArray.length > 0 && numberOfBadEmails === 0) {
+            result = true;
+        } else {
+            if (numberOfBadEmails === 1) {
+                errorMessage = 'one email address is incorrect';
+            } else {
+                errorMessage = numberOfBadEmails + ' email addresses are incorrect';
+            }
+        }
+    }
+
+    return result;
+}
+
+function verifyTitle() {
+    var result = false,
+        title = $('#title').val();
+
+    if (title === '') {
+        errorMessage = 'enter email title';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function verifyContent() {
+    var result = false,
+        content = $('#emailContent').val();
+
+    if (content === '') {
+        errorMessage = 'Enter email content';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function createAttachList(element) {
+    return ('<li><div>' + element + '</div></li>');
+}
+
+function attachListUpdate() {
+    var fileName = 'filename', size = '0kB', i, len;
+    $('#attachmentsList').replaceWith($('<ul data-role="listview" id="attachmentsList"></ul>'));
+
+    for (i = 0, len = app.attach.length; i < len; i += 1) {
+        $('#attachmentsList').append(createAttachList(app.attach[i]));
+    }
+
+    $('#attachmentsList').trigger('create');
+}
+
+// Define the success callback.
+function messageSent() {
+    app.attach = [];
+    attachListUpdate();
+    alert('Email was sent');
+}
+
+// Define the error callback.
+function messageFailed(error) {
+    alert('Error occured while sending the message!');
+}
+
+// workaround for launch accounts settings;
+function runEmailService() {
+    var apps = "";
+    function onGetInfo(data) {
+        for (var i = 0; i < data.length; i++)
+        {
+            if(data[i].id == "setting-myaccount-efl")
+                apps = data[i].id;
+        }
+        if (apps) {
+            tizen.application.launch(apps);
+        } else {
+            alert('Account settings cannot be launched. Please configure email account by system options.');
+        }
+    }
+    tizen.application.getAppsInfo(onGetInfo);
+}
+
+function virtualAttachmentPath(absolutePath) {
+    absolutePath = absolutePath.replace(/^\/opt\/usr\/media\//, "");
+    var parts = absolutePath.split("/");
+    switch (parts[0]) {
+    case "Images":
+        parts[0] = "images";
+        break;
+    case "Videos":
+        parts[0] = "videos";
+        break;
+    case "Sounds":
+        parts[0] = "music";
+        break;
+    case "Documents":
+        parts[0] = "documents";
+        break;
+    case "Downloads":
+        parts[0] = "downloads";
+        break;
+    default:
+        return null;
+    }
+    return parts.join("/");
+}
+
+// Define the success callback.
+function serviceListCB(services) {
+    var i, len, msgService, email, tmpArray = [], name, vname;
+    function split(str) {
+        return str.split(/[,; ]/).filter(function (item) {
+            return (item.trim() !== '');
+        });
+    }
+
+    if (services.length > 0) {
+        msgService = services[0];
+        alert('Sending an Email(takes about 1 minute)');
+
+        email = new tizen.Message('messaging.email');
+        email.subject = $('#title').val();
+        email.to = split($('#email').val());
+        email.cc = split($('#cc').val());
+        email.bcc = split($('#bcc').val());
+        email.body.plainBody = $('#emailContent').val();
+        email.body.htmlBody = "<div>" + $("#emailContent").val();
+
+        for (i = 0, len = app.attach.length; i < len; i += 1) {
+            name = app.attach[i];
+            vname = virtualAttachmentPath(name);
+            try {
+                tmpArray.push(new tizen.MessageAttachment(vname));
+            } catch (err) {
+                alert("Attachment could not be added:\n" + name);
+            }
+        }
+        email.attachments = tmpArray;
+
+        // Send request
+        msgService.sendMessage(email, messageSent, messageFailed);
+    } else {
+        if (confirm('This application for proper running requires configure email account.\n Do you want configure account now?')) {
+            runEmailService();
+        }
+    }
+}
+
+function serviceListError(e) {
+    alert('err: ' + e.message);
+}
+
+function sendMessage() {
+    try {
+        tizen.messaging.getMessageServices("messaging.email", serviceListCB, serviceListError);
+    } catch (e) {
+        alert('err: ' + e.message);
+    }
+}
+
+function startFileManager() {
+    function getDataFromFileManager(data) {
+        app.attach.push(data[0].value[0]);
+        attachListUpdate();
+    }
+
+    var serviceRequest = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/pick', null, '*/*');
+
+    var appControlReplyCB = {
+            onsuccess: getDataFromFileManager,
+            onfailure: function() {}
+    };
+
+    try {
+    tizen.application.launchAppControl(serviceRequest, null,
+    function() {
+        console.log("launch appControl succeeded");
+    },
+    function(e) {
+        alert("launch appControl failed. Reason: " + e.message);
+    },
+    appControlReplyCB);
+    } catch(e) {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function init() {
+    $('#send').bind('click', function (event) {
+        if (verifyEmail() && verifyTitle() && verifyContent()) {
+            sendMessage();
+        } else {
+            alert(errorMessage);
+        }
+    });
+    $('#addAttach').bind('click', function (event) {
+        startFileManager();
+    });
+}
+
+$(document).ready(init);
\ No newline at end of file
diff --git a/ivi/tests/MessagingSMSMMS/NOTICE b/ivi/tests/MessagingSMSMMS/NOTICE
new file mode 100644 (file)
index 0000000..81b6824
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/image.png :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/MessagingSMSMMS/index.html b/ivi/tests/MessagingSMSMMS/index.html
new file mode 100755 (executable)
index 0000000..c53eb5f
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Recipient</li>
+                <li><input type="tel" id="tel" value="" /></li>            
+                <li data-role="list-divider">Send Message</li>
+                <li><div data-role="button" id="sms">SMS</div></li>
+                <li><div data-role="button" id="mms">MMS</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if SMS/MMS is sent properly</p><br>
+                <p>1. Fill in Recipient</p>
+                <p>2. Select SMS Send</p>
+                <p>3. Select MMS Send</p>
+                <p>4. Check if the SMS/MMS is successfully sent</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/MessagingSMSMMS/js/main.js b/ivi/tests/MessagingSMSMMS/js/main.js
new file mode 100755 (executable)
index 0000000..faecc92
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var h, m, s, day, year, month, date;
+var deviceCapabilities;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#sms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.sms", smsSuccessCallback, errorCallback);
+    });
+    $("#mms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.mms", mmsSuccessCallback, errorCallback);
+    });
+    deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(!deviceCapabilities.telephonyMms) {
+        $("#mms").addClass("ui-disabled");
+    }
+});
+
+function checkTime(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function checkDay(i) {
+    switch(i)
+    {
+    case 0:
+        i = "Sunday";
+        break;
+    case 1:
+        i = "Monday";
+        break;
+    case 2:
+        i = "Tuesday";
+        break;
+    case 3:
+        i = "Wednesday";
+        break;
+    case 4:
+        i = "Thursday";
+        break;
+    case 5:
+        i = "Friday";
+        break;
+    case 6:
+        i = "Saturday";
+        break;
+    }
+    return i;
+}
+
+function checkMonth(i) {
+    switch(i)
+    {
+    case 0:
+        i = "January";
+        break;
+    case 1:
+        i = "February";
+        break;
+    case 2:
+        i = "March";
+        break;
+    case 3:
+        i = "April";
+        break;
+    case 4:
+        i = "May";
+        break;
+    case 5:
+        i = "June";
+        break;
+    case 6:
+        i = "July";
+        break;
+    case 7:
+        i = "August";
+        break;
+    case 8:
+        i = "September";
+        break;
+    case 9:
+        i = "October";
+        break;
+    case 10:
+        i = "November";
+        break;
+    case 11:
+        i = "December";
+        break;
+    }
+    return i;
+}
+
+function currentTime() {
+    h = new Date().getHours();
+    m = new Date().getMinutes();
+    s = new Date().getSeconds();
+    day = new Date().getDay();
+    month = new Date().getMonth();
+    date = new Date().getDate();
+    year = new Date().getFullYear();
+    h = checkTime(h);
+    m = checkTime(m);
+    s = checkTime(s);
+    day = checkDay(day);
+    month = checkMonth(month);
+}
+
+function smsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var sms = new tizen.Message("messaging.sms");
+        sms.body.plainBody = "BehaviorTC SMS Messaging Test\n" + h + ":" + m + ":" + s;
+        sms.to = [$("#tel").val()];
+        services[0].sendMessage(sms, messageSent, messageFailed);
+    }
+}
+
+function mmsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var mms = new tizen.Message("messaging.mms");
+        mms.body.plainBody = "BehaviorTC MMS Messaging Test\n" + day + ", " + month + " " + date + ", " + year + ". " + h + ":" + m + ":" + s;
+        mms.to = [$("#tel").val()];
+        mms.subject = "BehaviorTC Messaging Test";
+        mms.attachments = [new tizen.MessageAttachment("wgt-package/tests/MessagingSMSMMS/res/image.png", "image/png")];
+        services[0].sendMessage(mms, messageSent, messageFailed);
+    }
+}
+
+function messageSent(recipients) {
+    alert("Message sent successfully to " + recipients.length + " recipients.");
+}
+
+function messageFailed(error) {
+    alert('Error occured while sending the message! ' + error.message);
+}
+
+function errorCallback(error) {
+    alert("Cannot get messaging service " + error.message);
+}
\ No newline at end of file
diff --git a/ivi/tests/MessagingSMSMMS/res/image.png b/ivi/tests/MessagingSMSMMS/res/image.png
new file mode 100644 (file)
index 0000000..983c883
Binary files /dev/null and b/ivi/tests/MessagingSMSMMS/res/image.png differ
diff --git a/ivi/tests/NFC/NOTICE b/ivi/tests/NFC/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/NFC/index.html b/ivi/tests/NFC/index.html
new file mode 100644 (file)
index 0000000..ab8d2a5
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">NFC Write Message</li>
+                <li><input type="text" id="wmsg" value="BehaviorNFC"/></li>
+                <li data-role="list-divider">NFC Tag Test</li>
+                <li><div data-role="button" id="write">Write to card</div></li>
+                <li><div data-role="button" id="read">Read from card</div></li>
+                <li data-role="list-divider">NFC Read Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">NFC Peer Test</li>
+                <li><div data-role="button" id="communicate">Communicate with another device</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check NFC communication</p><br>
+                <p>1. Fill in NFC Write Message</p>
+                <p>2. Click Write to card and Place the NFC Tag to device</p>
+                <p>3. Check the Write Message</p>
+                <p>4. Click Read from card and Place the NFC Tag to device</p>
+                <p>5. Check the Read Message</p>
+                <p>6. Click Communicate with another device and Connected two device which are operated NFC</p>
+                <p>7. Check the Receive Message</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/NFC/js/main.js b/ivi/tests/NFC/js/main.js
new file mode 100755 (executable)
index 0000000..0aeef2c
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var writeMessage = "", readMessage = "", newMessage = "";
+var nfcFlag;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#read").bind("vclick", function() {
+        nfcFlag = false;
+        alert("Read NFC Tag\nPlace the NFC Tag to device");
+    });
+    $("#write").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "") {
+            nfcFlag = true;
+            alert("Write NFC Tag\nPlace the NFC Tag to device");
+        }
+    });
+    $("#communicate").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "")
+            alert("Peer to Peer NFC\nConnected two device which are operated NFC");
+    });
+    try {
+        tizen.nfc.setExclusiveMode(true) ;
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+    setPower(function(){
+        setTagListener();
+        setPeerListener();    
+    });
+});
+
+function writeMsg() {
+    newMessage = new tizen.NDEFMessage();
+    writeMessage = $("#wmsg").val();
+    if(writeMessage == "") {
+        alert("Fill in NFC Write Message");
+        nfcFlag = null;
+    }
+    else
+        newMessage.records[0] = new tizen.NDEFRecordText(writeMessage, "en-US");
+}
+
+function setPower(onpowered) {
+    var gNfcAdapter;
+    try {
+        gNfcAdapter = tizen.nfc.getDefaultAdapter();
+        if (!gNfcAdapter.powered) {
+            gNfcAdapter.setPowered(
+                    true,
+                    function () {onpowered();console.log("Power on succeed");},
+                    function () {console.log("Power on failed")});
+        } else {
+            onpowered();
+        }
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+}
+
+function setTagListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcTag) {
+                console.log("NFC Tag's type is " + nfcTag.type);
+                if(nfcFlag == false)
+                {
+                    try {
+                        nfcTag.readNDEF(
+                                function(message){
+                                    readMessage = message.records[0].text;
+                                    alert("Read message : " + readMessage);
+                                    document.getElementById("rmsg").innerHTML = readMessage;
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+                if(nfcFlag == true)
+                {
+                    try {
+                        nfcTag.writeNDEF(
+                                newMessage,
+                                function(){
+                                    alert("Write message : " + writeMessage);
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+            },
+            ondetach : function() {
+                console.log("NFC Tag is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetTagListener();
+    }
+    adapter.setTagListener(onSuccessCB);
+}
+
+function setPeerListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcPeer) {
+                console.log("NFC Target is detected");
+
+                nfcPeer.setReceiveNDEFListener(
+                        function(message){
+                            readMessage = message.records[0].text;
+                            alert("Receive message : " + readMessage);
+                            document.getElementById("rmsg").innerHTML = readMessage;
+                            nfcPeer.unsetReceiveNDEFListener();
+                        });
+                nfcPeer.sendNDEF(
+                        newMessage,
+                        function(){
+                            console.log("Send message");
+                        },
+                        function(e){
+                            console.log(e.message);
+                        });
+            },
+            ondetach : function() {
+                console.log("NFC Target is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetPeerListener();
+    }
+    adapter.setPeerListener(onSuccessCB);
+}
\ No newline at end of file
diff --git a/ivi/tests/Notification/NOTICE b/ivi/tests/Notification/NOTICE
new file mode 100644 (file)
index 0000000..366d59e
--- /dev/null
@@ -0,0 +1,18 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestNotification,
+res/noti.png,
+res/noti1,png,
+res/noti2.png,
+res/noti3.png,
+res/noti4.png,
+res/notification.wav :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/Notification/index.html b/ivi/tests/Notification/index.html
new file mode 100644 (file)
index 0000000..843ed82
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">NotificationTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">NotificationTest Install</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Add</li>
+                <li>
+                    <div data-role="button" id="noti-type-simple">SIMPLE Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-ongoing">ONGOING Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-progress">PROGRESS Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-thumbnail">THUMBNAIL Notification</div>
+                </li>
+                <li data-role="list-divider">Notification List</li>
+            </ul>
+            <ul data-role="listview" id="noti-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Delete</li>
+                <li>
+                    <div data-role="button" id="delete-all">Delete All</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if a notification is successfully posted</p><br>
+                <p># Simple Notification</p>
+                <p>1. Install NotificationTest</p>
+                <p>(This application is used to verify AppControl in Notification.)</p>
+                <p>2. Click SIMPLE Notification</p>
+                <p>3. Check notification tray if a simple notification is posted</p>
+                <p>4. Clicks the simple notification and check if a NotificationTest application is launched</p>
+                <p>5. In the mean time, check if the notification is disappeared</p><br>
+                <p># Ongoing Notification</p>
+                <p>1. Click ONGOING Notification</p>
+                <p>2. Check notification tray if a ongoing notification is posted</p>
+                <p>3. Clicks the ongoing notification and check if it is NOT disappeared</p>
+                <p>4. Remove the ongoing notification by clicking Delete in the Notification List</p><br>
+                <p># Progress Notification</p>
+                <p>1. Click PROGRESS Notification</p>
+                <p>2. Check notification tray if a progress notification is posted</p>
+                <p>(The progress notification shows a bar that shows the current progress)</p>
+                <p>3. Clicks the progress notification and check if it is NOT disappeared</p>
+                <p>4. Remove the progress notification by clicking Delete in the Notification List</p><br>
+                <p># Thumbnail Notification</p>
+                <p>1. Click THUMBNAIL Notification</p>
+                <p>2. Check notification tray if a thumbnail notification is posted</p>
+                <p>3. Clicks the thumbnail notification and check if it is disappeared</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Notification/js/main.js b/ivi/tests/Notification/js/main.js
new file mode 100644 (file)
index 0000000..a45edd1
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gCurrentNoti;
+var iconPath, soundPath, thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4;
+
+var init = function () {
+    showNotifications();
+    setTimeout(init, 500);
+};
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#noti-list").delegate("div", "vclick", function() {
+        var id = $(this).parent().data("id");
+
+        try {
+            tizen.notification.remove(id);
+            alert("Notification delete");
+        } catch (exc) {
+            alert("notification.remove failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#delete-all").bind("vclick", function() {
+        try {
+            tizen.notification.removeAll();
+            alert("Notification delete all");
+        } catch (exc) {
+            alert("notification.removeAll failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#noti-type-simple").bind("vclick", function() {
+        postNotification("SIMPLE");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-ongoing").bind("vclick", function() {
+        postNotification("ONGOING");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-progress").bind("vclick", function() {
+        postNotification("PROGRESS");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-thumbnail").bind("vclick", function() {
+        postNotification("THUMBNAIL");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#noti-type-simple").removeClass("ui-disabled");
+        $("#noti-type-ongoing").removeClass("ui-disabled");
+        $("#noti-type-progress").removeClass("ui-disabled");
+        $("#noti-type-thumbnail").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-simple").addClass("ui-disabled");
+    $("#noti-type-ongoing").addClass("ui-disabled");
+    $("#noti-type-progress").addClass("ui-disabled");
+    $("#noti-type-thumbnail").addClass("ui-disabled");
+    $("#delete-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    notificationPre();
+});
+
+function showNotifications() {
+    var notiArray, str = "";
+
+    try {
+        notiArray = tizen.notification.getAll();
+    } catch (exc) {
+        alert("notification.getAll failed");
+        return;
+    }
+
+    for (var i = 0; i < notiArray.length; i++) {
+        str += '<li data-id="'
+            + notiArray[i].id
+            + '">'
+            + notiArray[i].title
+            //+ ' ('
+            //+ notiArray[i].statusType
+            //+ ')'
+            + '<div data-role="button" data-inline="true">Delete</div></li>';
+    }
+    $("#noti-list").html(str).trigger("create").listview("refresh");
+}
+
+function postNotification(type) {
+    var title = "";
+    var appControl = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view", null, null, null);
+    var notiDict = {
+            iconPath : iconPath,
+            soundPath : soundPath,
+            vibration : true,
+            ledColor : "#4B0082",
+            ledOnPeriod : 1000,
+            ledOffPeriod : 500
+        };
+    if (type == "SIMPLE") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "SIMPLE_Notification";
+        notiDict.appId = "bhvtcnotif.NotificationTest";
+    }
+    if (type == "PROGRESS") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "PROGRESS_Notification";
+        notiDict.progressValue = 20;
+    }
+    if (type == "ONGOING") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "ONGOING_Notification";
+    }
+    if (type == "THUMBNAIL") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "THUMBNAIL_Notification";
+        notiDict.thumbnails = [thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4];
+    }
+    try {
+        var noti = new tizen.StatusNotification(type, title, notiDict);
+        tizen.notification.post(noti);
+        alert(type + " Notification Add");
+        setTimeout(update, 3000);
+    } catch (exc) {
+        alert("notification.post failed: " + exc.message);
+    }
+
+    function update() {
+        noti.progressValue = 63;
+        tizen.notification.update(noti);
+    }
+}
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">NotificationTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function notificationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestNotification.wgt",
+                    true,
+                    function() {
+                        console.log("Notification Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "notification.wav")
+            {
+                soundPath = files[i].toURI();
+                soundPath = soundPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti.png")
+            {
+                iconPath = files[i].toURI();
+                iconPath = iconPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti1.png")
+            {
+                thumbnailPath1 = files[i].toURI();
+                thumbnailPath1 = thumbnailPath1.replace("file:///", "/");
+            }
+            if(files[i].name == "noti2.png")
+            {
+                thumbnailPath2 = files[i].toURI();
+                thumbnailPath2 = thumbnailPath2.replace("file:///", "/");
+            }
+            if(files[i].name == "noti3.png")
+            {
+                thumbnailPath3 = files[i].toURI();
+                thumbnailPath3 = thumbnailPath3.replace("file:///", "/");
+            }
+            if(files[i].name == "noti4.png")
+            {
+                thumbnailPath4 = files[i].toURI();
+                thumbnailPath4 = thumbnailPath4.replace("file:///", "/");
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Notification/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
+$(document).bind('pageinit', init);
diff --git a/ivi/tests/Notification/res/TestNotification b/ivi/tests/Notification/res/TestNotification
new file mode 100644 (file)
index 0000000..ddd951f
Binary files /dev/null and b/ivi/tests/Notification/res/TestNotification differ
diff --git a/ivi/tests/Notification/res/noti.png b/ivi/tests/Notification/res/noti.png
new file mode 100644 (file)
index 0000000..0f054f8
Binary files /dev/null and b/ivi/tests/Notification/res/noti.png differ
diff --git a/ivi/tests/Notification/res/noti1.png b/ivi/tests/Notification/res/noti1.png
new file mode 100644 (file)
index 0000000..e31d360
Binary files /dev/null and b/ivi/tests/Notification/res/noti1.png differ
diff --git a/ivi/tests/Notification/res/noti2.png b/ivi/tests/Notification/res/noti2.png
new file mode 100644 (file)
index 0000000..cfcb812
Binary files /dev/null and b/ivi/tests/Notification/res/noti2.png differ
diff --git a/ivi/tests/Notification/res/noti3.png b/ivi/tests/Notification/res/noti3.png
new file mode 100644 (file)
index 0000000..6ee6ba1
Binary files /dev/null and b/ivi/tests/Notification/res/noti3.png differ
diff --git a/ivi/tests/Notification/res/noti4.png b/ivi/tests/Notification/res/noti4.png
new file mode 100644 (file)
index 0000000..0327b7e
Binary files /dev/null and b/ivi/tests/Notification/res/noti4.png differ
diff --git a/ivi/tests/Notification/res/notification.wav b/ivi/tests/Notification/res/notification.wav
new file mode 100644 (file)
index 0000000..6b0cca4
Binary files /dev/null and b/ivi/tests/Notification/res/notification.wav differ
diff --git a/ivi/tests/Package/NOTICE b/ivi/tests/Package/NOTICE
new file mode 100644 (file)
index 0000000..d9be9d0
--- /dev/null
@@ -0,0 +1,13 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPackage1,
+res/TestPackage2 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/Package/index.html b/ivi/tests/Package/index.html
new file mode 100755 (executable)
index 0000000..2e61b8b
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">TestPackage1 Install</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch1">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" style="height:40px; line-height:20px;">TestPackage2 Update</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch2">Launch</div>
+                </li>
+                <li data-role="list-divider">Package UnInstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" style="height:40px; line-height:20px;">TestPackage UnInstall</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch3">Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Package is successfully installed, updated and uninstalled</p><br>
+                <p>1. Install TestPackage1</p>
+                <p>2. Launch TestPackage1</p>
+                <p>3. Check if TestPackage is launched successfully</p>
+                <p>4. Automatically write the text('Package_Test') and click the OK button</p>
+                <p>5. Check the PASS text
+                <p>6. Update TestPackage2</p>
+                <p>7. Launch TestPackage2</p>
+                <p>8. Check if TestPackage is updated and launched successfully</p>
+                <p>9. Automatically read the text('Package_Test') and click the OK button</p>
+                <p>10. Check the PASS text
+                <p>11. Uninstall TestPackage</p>
+                <p>12. Launch TestPackage and check it fails</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Package/js/main.js b/ivi/tests/Package/js/main.js
new file mode 100644 (file)
index 0000000..f8b2ed7
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var installUrl, updateUrl;
+var flag = false;
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+        $("#launch1").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+        $("#launch3").removeClass("ui-disabled");
+        $("#launch2").addClass("ui-disabled");
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+        $("#launch2").removeClass("ui-disabled");
+        $("#launch1").addClass("ui-disabled");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        $("#update").removeClass("ui-disabled");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+            flag = true;
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            flag = false;
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "TestPackage2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                if(type == "install")
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+                if(type == "update")
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">Updating... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(type == "install"){
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">TestPackage1 Install</div>';
+                    $("#install").addClass("ui-disabled");
+                }
+                if(type == "update") {
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">TestPackage2 Update</div>';
+                    $("#update").addClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+    var onUninstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">UnInstalling... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">TestPackage UnInstall</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        if(flag == false)
+            alert("TestPackage is already Uninstalled or not Installed");
+        else
+            tizen.package.uninstall("bhvtcpacka", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpacka.TestPackage", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage2")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPackage2.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "TestPackage1")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPackage1.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Package/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/Package/res/TestPackage1 b/ivi/tests/Package/res/TestPackage1
new file mode 100644 (file)
index 0000000..37283a0
Binary files /dev/null and b/ivi/tests/Package/res/TestPackage1 differ
diff --git a/ivi/tests/Package/res/TestPackage2 b/ivi/tests/Package/res/TestPackage2
new file mode 100644 (file)
index 0000000..f808170
Binary files /dev/null and b/ivi/tests/Package/res/TestPackage2 differ
diff --git a/ivi/tests/PackageManagement/index.html b/ivi/tests/PackageManagement/index.html
new file mode 100644 (file)
index 0000000..451a41b
--- /dev/null
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Xu, Kang <kangx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test PKManagement installation</li>
+                <li id="Sample-widget1">
+                    <a href="javascript:runApp('res/Sample-widget1.html')" data-transition="slide" style="">
+                        <h2>Sample-widget1</h2>
+                    </a>
+                </li>
+                <li id="Sample-widget2">
+                    <a href="javascript:runApp('res/Sample-widget2.html')" data-transition="slide" style="">
+                        <h2>Sample-widget2</h2>
+                    </a>
+                </li>
+                <li id="Sample-widget4">
+                    <a href="javascript:runApp('res/Sample-widget4.html')" data-transition="slide" style="">
+                        <h2>Sample-widget4</h2>
+                    </a>
+                </li>
+                <li id="widget-version-1">
+                    <a href="javascript:runApp('res/widget-version-1.html')" data-transition="slide" style="">
+                        <h2>widget-version-1</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the Installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of installing, updating and uninstalling web applications.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT can manage web applications by installing, updating and uninstalling web applications.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/PackageManagement/js/main.js b/ivi/tests/PackageManagement/js/main.js
new file mode 100644 (file)
index 0000000..1ee3786
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt1wvt006',
+                    'wrt1smt007',
+                    'wrt1smt008',
+                    'wrt1smt010');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
diff --git a/ivi/tests/PackageManagement/js/tests.js b/ivi/tests/PackageManagement/js/tests.js
new file mode 100644 (file)
index 0000000..583aba3
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var update_wgt = new Array('widget-version-1');
+var nolaunch_wgt = new Array('Sample-widget3','Sample-widget4');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install("install");
+    });
+    if(jQuery.inArray(wgt_name, update_wgt) != -1){
+        $("#launch").bind("vclick", function() {
+            packagePre("widget-version-1-1");
+            install("update");
+        });
+    } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(type) {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, update_wgt) != -1 && type == "update"){
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').removeClass("ui-disabled");
+            } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/PackageManagement/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/PackageManagement/res/Sample-widget1.html b/ivi/tests/PackageManagement/res/Sample-widget1.html
new file mode 100644 (file)
index 0000000..41b7a67
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget1"/>
+                <input type="hidden" id="app_id"  value="wrt1smt007.Samplewidget1"/>
+                <input type="hidden" id="package_id" value="wrt1smt007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is a widget named "Sample-widget1" on the device screen after the widget installed.</li>
+              <li>When click the "Launch" button, a "PASS" is displayed.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/PackageManagement/res/Sample-widget1.wgt b/ivi/tests/PackageManagement/res/Sample-widget1.wgt
new file mode 100644 (file)
index 0000000..0c11c84
Binary files /dev/null and b/ivi/tests/PackageManagement/res/Sample-widget1.wgt differ
diff --git a/ivi/tests/PackageManagement/res/Sample-widget2.html b/ivi/tests/PackageManagement/res/Sample-widget2.html
new file mode 100644 (file)
index 0000000..1a1f5b4
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget2"/>
+                <input type="hidden" id="app_id"  value="wrt1smt008.Samplewidget2"/>
+                <input type="hidden" id="package_id" value="wrt1smt008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the "Sample-widget2" app is not installed.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget, during the installing power off and power on the device, and make sure the "Sample-widget2" is not installed.</li>
+              <li>Re-open the "pkmanagement-powerfailure-install" test.</li>
+              <li>Click the "Install" button to install the widget again.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation of "Sample-widget2" app can run correctly.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/PackageManagement/res/Sample-widget2.wgt b/ivi/tests/PackageManagement/res/Sample-widget2.wgt
new file mode 100644 (file)
index 0000000..233d075
Binary files /dev/null and b/ivi/tests/PackageManagement/res/Sample-widget2.wgt differ
diff --git a/ivi/tests/PackageManagement/res/Sample-widget4.html b/ivi/tests/PackageManagement/res/Sample-widget4.html
new file mode 100644 (file)
index 0000000..5cef7a9
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget4">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget4"/>
+                <input type="hidden" id="app_id"  value="wrt1smt010.Samplewidget4"/>
+                <input type="hidden" id="package_id" value="wrt1smt010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Check the widget details information with command: "app_launcher -l" and "pkgcmd -l" in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the command line displays: "Name: Sample-widget4", "Version: 1.0.0", " Package ID: wrt1smt010", "App ID: wrt1smt010.Samplewidget4".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/PackageManagement/res/Sample-widget4.wgt b/ivi/tests/PackageManagement/res/Sample-widget4.wgt
new file mode 100644 (file)
index 0000000..f3552a0
Binary files /dev/null and b/ivi/tests/PackageManagement/res/Sample-widget4.wgt differ
diff --git a/ivi/tests/PackageManagement/res/widget-version-1-1.wgt b/ivi/tests/PackageManagement/res/widget-version-1-1.wgt
new file mode 100644 (file)
index 0000000..0d75904
Binary files /dev/null and b/ivi/tests/PackageManagement/res/widget-version-1-1.wgt differ
diff --git a/ivi/tests/PackageManagement/res/widget-version-1.html b/ivi/tests/PackageManagement/res/widget-version-1.html
new file mode 100644 (file)
index 0000000..9496f73
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="widget-version-1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="widget-version-1"/>
+                <input type="hidden" id="app_id"  value="wrt1wvt006.widgetversion"/>
+                <input type="hidden" id="package_id" value="wrt1wvt006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Update</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Update" button to update the widget, during the updating close the terminal.</li>
+              <li>Re-open this TC, click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is <strong>no error message</strong>.</li>
+              <li>There is <strong>no system crash</strong>.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/PackageManagement/res/widget-version-1.wgt b/ivi/tests/PackageManagement/res/widget-version-1.wgt
new file mode 100644 (file)
index 0000000..6dd3d3a
Binary files /dev/null and b/ivi/tests/PackageManagement/res/widget-version-1.wgt differ
diff --git a/ivi/tests/PageVisibility/index.html b/ivi/tests/PageVisibility/index.html
new file mode 100755 (executable)
index 0000000..f86fc17
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Ma, Yue <yuex.ma@intel.com>
+
+-->
+
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div data-role="collapsible-set" data-inset="false" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-theme="b">
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList1">Screen-lock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="lock"></li>
+                    </ul>
+                </div>
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList2">Screen-unlock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="unlock"></li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device is able to handle pageVisible event when lock and unlock the screen by gesture.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen lock and unlock information displayed correctly on screen.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/PageVisibility/js/main.js b/ivi/tests/PageVisibility/js/main.js
new file mode 100644 (file)
index 0000000..e1eb13f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2013 Intel Corporation.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of works must retain the original copyright notice, this list
+ of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the original copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this work without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Authors:
+   Ma,Yue <yuex.ma@intel.com>
+
+*/
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    document.addEventListener(visibilitychange, notification);
+    DisablePassButton();
+});
+
+function notification() {
+    EnablePassButton();
+    var doc_hidden = document.hidden | document.webkitHidden | document.oHidden | document.mozHidden | document.msHidden;
+    var visibilitystate = document.visibilityState || document.webkitVisibilityState || document.oVisibilityState || document.mozVisibilityState || document.msVisibilityState;
+    var hidden = doc_hidden == 0 ? false : true;
+    var date = new Date().toString().substr(4, 20);
+    if(visibilitystate === "hidden" && hidden) {
+        $("#lock").html(function(i, origText) {return origText  + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    } else if (visibilitystate === "visible" && !hidden) {
+         $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    }else {
+        $("#lock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+        $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+    }
+}
diff --git a/ivi/tests/Power/NOTICE b/ivi/tests/Power/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/Power/index.html b/ivi/tests/Power/index.html
new file mode 100755 (executable)
index 0000000..d039c59
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="list">
+            <li data-role="list-divider">Request Screen</li>
+            <li>
+                <input type="button" value="Request SCREEN_DIM" onclick="request('SCREEN_DIM');" />
+            </li>
+            <li>
+                <input type="button" value="Request SCREEN_NORMAL" onclick="request('SCREEN_NORMAL');" />
+            </li>
+            <li data-role="list-divider">Release Screen</li>
+            <li>
+                <input type="button" value="Release SCREEN" onclick="release();" />
+            </li>
+            <li data-role="list-divider">Turn Off</li>
+            <li>
+                <input type="button" value="Turn SCREEN_OFF" onclick="turnScreenOff();" />
+            </li>
+        </ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the screen status is successfully changed</p>
+            <p>(Note: Response time varies depends on the system setting)</p><br>
+            <p>* Setting -> Display -> Backlight time : 15 Seconds<p>
+            <p>1. Click Request SCREEN_DIM(After 15 second) : Check if the screen is dim. But Screen doesn't turn off</p>
+            <p>2. Click Request SCREEN_NORMAL(After 15 second) : Check if the screen doesn't dim and turn off</p>
+            <p>3. Click Release SCREEN(After 15 second) : Check the screen resource release(Screen is dim and turn off)</p>
+            <p>4. Click Turn SCREEN_OFF and check the screen is off immediately</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Power/js/main.js b/ivi/tests/Power/js/main.js
new file mode 100644 (file)
index 0000000..6494db4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+//request
+function request(screenState){
+    tizen.power.release("SCREEN");
+    try{
+        alert(screenState);
+        tizen.power.request("SCREEN", screenState);
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+// release
+function release(){
+    try{
+        alert("SCREEN_RELEASE");
+        tizen.power.release("SCREEN");
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+//turnScreenOff
+function turnScreenOff(){
+    try{
+        alert("SCREEN_OFF");
+        tizen.power.turnScreenOff();
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
diff --git a/ivi/tests/Push/NOTICE b/ivi/tests/Push/NOTICE
new file mode 100644 (file)
index 0000000..5e09644
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPush :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/ivi/tests/Push/index.html b/ivi/tests/Push/index.html
new file mode 100755 (executable)
index 0000000..360fe0d
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">PushClient(TestPush) Application Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">PushClient Install</div>
+                </li>
+                <li data-role="list-divider">PushClient(TestPush) Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch">PushClient Launch</div>
+                </li>
+                <li data-role="list-divider">Push Message</li>
+                <li>
+                    <input type="text" id="message" value="Behavior_Test_Push"/>
+                </li>
+                <li data-role="list-divider">Send Message</li>
+                <li>
+                    <div data-role="button" id="push">Push</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if PushClient gets messages from the push server</p>
+                <p>A network connection capable of accessing the Internet MUST be established </p><br>
+                <p>1. Install and launch PushClient(TestPush) Application</p>
+                <p>   (Make sure the device is online and the applications shows registration success popup.)
+                <p>2. Press Hide in the PushClient</p>
+                <p>3. Back to this page and fill in a push message and click Push button</p>
+                <p>4. Check PushClient becomes foreground showing PASS text</p>
+                <p>5. Exit PushClient</p>
+                <p>6. Back to this page and fill in another message and click Push button</p>
+                <p>7. Check a notification pops up and PushClient launchs with PASS text when the notification is clicked</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/Push/js/main.js b/ivi/tests/Push/js/main.js
new file mode 100755 (executable)
index 0000000..bb73af7
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var installUrl;
+var reg;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#launch").removeClass("ui-disabled");
+        $("#push").removeClass("ui-disabled");
+        return false;
+    });
+    $("#launch").bind("vclick", function() {
+        launch();
+        return false;
+    });
+    $("#push").bind("vclick", function() {
+        regID();
+        return false;
+    });
+    $("#launch").addClass("ui-disabled");
+    $("#push").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    pushPre();
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">PushClient Install</div>';
+                $("#install").addClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpush0.PushClient", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function regID() {
+    var documentsDir;
+    var flag = false;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "PushRegId.txt")
+            {
+                flag = true;
+                files[i].readAsText(
+                    function(str){
+                        reg = str;
+                        send();
+                        }, function(e){
+                            alert("Error " + e.message);
+                        }, "UTF-8"
+                );
+                break;
+            }
+            else
+                flag = false;
+        }
+        if(flag == false)
+            alert("Not found Registration ID.\nPlease TestPush(PushClient) app install and launch or Check network connection.");
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        "documents",
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkNum(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function send() {
+    var appId = "bhvtcpush0";
+    var msg = $("#message").val();
+    var sec = "27A91C190007B2E7987627A9392C6291";
+    var h = new Date().getHours();
+    var m = new Date().getMinutes();
+    var s = new Date().getSeconds();
+    h = checkNum(h);
+    m = checkNum(m);
+    s = checkNum(s);
+
+    if(msg == "")
+    {
+        alert("Message is empty");
+    }
+    else if(reg == "")
+    {
+        alert("Registration ID is empty")
+    }
+    else
+    {
+        var request = new XMLHttpRequest();
+        var data = {"regID":reg, "requestID":"000001", "message":"action=ALERT&alertMessage="+msg, "appData":msg+"("+h+":"+m+":"+s+")"};
+        var regID = reg.substring(0, 2);
+        switch(regID)
+        {
+        case "00":
+            request.open("POST", "https://useast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "01":
+            request.open("POST", "https://uswest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "02":
+            request.open("POST", "https://apsoutheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "03":
+            request.open("POST", "https://euwest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "04":
+            request.open("POST", "https://apnortheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "05":
+            request.open("POST", "https://apkorea.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "06":
+            request.open("POST", "https://apchina.push.samsungosp.com.cn:8088/spp/pns/api/push", true);
+            break;
+        case "7c":
+            request.open("POST", "https://175.41.248.50:8088/spp/pns/api/push", true);
+        }
+        request.setRequestHeader("Content-Type", "application/json");
+        request.setRequestHeader("appID", appId);
+        request.setRequestHeader("appSecret", sec);
+        request.onreadystatechange = function() {
+            if (request.readyState == 4 && request.status == 200) {
+                console.log(request.responseText);
+                alert("Push Success");
+            }
+        };
+        request.send(JSON.stringify(data));
+    }
+}
+
+function pushPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPush.wgt",
+                    true,
+                    function() {
+                        console.log("TestPush Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Push/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/Push/res/TestPush b/ivi/tests/Push/res/TestPush
new file mode 100644 (file)
index 0000000..220a81e
Binary files /dev/null and b/ivi/tests/Push/res/TestPush differ
diff --git a/ivi/tests/SVGTransformation/index.html b/ivi/tests/SVGTransformation/index.html
new file mode 100644 (file)
index 0000000..112f93c
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <style>
+        /* Test Display Box */
+        .display_box {
+            width: 100%;
+            border: 1px solid #000;
+        }
+    </style>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <svg width="330" height="400" class="display_box">
+        <circle cx="100" cy="50" r="20" fill="blue">
+          <animateTransform attributeName='transform' attributeType='XML' type='rotate' from='180 170 200' to='-360 100 50' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='scale' from='1' to='2' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='skewX' by="30" dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+        </circle>
+      </svg>
+      <p><a href="javascript: document.location.reload();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the blue circle could be transferred to ellipse, and rotate along with elliptical patch at the same time.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and rotate function well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/Security/css/style.css b/ivi/tests/Security/css/style.css
new file mode 100644 (file)
index 0000000..5b93eb0
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+#content ul ul {
+    padding: 5px 15px;
+}
+
+.containing-element .ui-slider-switch { width: 8em }
+
+/*over write*/
+ul .ui-corner-all {
+    -moz-border-radius: 0 /*{global-radii-blocks}*/;
+    -webkit-border-radius: 0 /*{global-radii-blocks}*/;
+    border-radius: 0 /*{global-radii-blocks}*/;
+}
diff --git a/ivi/tests/Security/index.html b/ivi/tests/Security/index.html
new file mode 100644 (file)
index 0000000..556c099
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Shared Media Directory</li>
+                <li><div data-role="button" id="openMediaBtn">Open /home/app/content directory</div></li>
+                <li><div data-role="button" id="createFileBtn">Create file</div></li>
+                <li data-role="list-divider">File List</li>
+                <ul data-role="listview" id="media" data-inset="true" hidden="true"></ul>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies that (1) this applicaton is running by non-root ID and, (2) it is allowed to read and write files in the shared media directory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Get the "USER" info via cmdline "ps aux|awk 'NR==1;/tctbhtests\.TCTBehaviorTests/'" in console.</li>
+              <li>Open shared media directory.</li>
+              <li>Create and remove files in shared media directory.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "USRER" info is NOT root user.</li>
+              <li>There is <strong>no error message</strong> when click buttons under "Shared Media Directory".</li>
+              <li>Only new created files can be removed; opened files in step 2 cannot.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Security/js/main.js b/ivi/tests/Security/js/main.js
new file mode 100644 (file)
index 0000000..9e46abf
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+*/
+
+var SHARED_MEDIA_DIR = "file:///home/app/content",
+    MEDIA_ID = "#media";
+var count = 0, mediaDir;
+var gFiles = [], createdId = [];
+
+$(document).ready(function(){
+    DisablePassButton();
+    $('#createFileBtn').addClass("ui-disabled");
+
+    function onError(err) {
+        alert("Error: " + err.message);
+    }
+
+    function makeFileList(files, selector) {
+        var str = "";
+
+        for (var i = 0; i < files.length; i++) {
+            if (files[i].isDirectory == false) {
+                str += '<li id="'
+                    + files[i].name
+                    + '"><a href="#"><h4>'
+                    + files[i].name
+                    + '</h4></a><a href="'
+                    + 'javascript:deleteFile('
+                    + count
+                    + ')" data-icon="delete" data-theme="c">'
+                    + '</a></li>';
+                gFiles[count++] = files[i];
+            }
+        }
+        if (str) {
+            $(selector).append(str).trigger("create").listview("refresh");
+        }
+
+        $('#createFileBtn').removeClass("ui-disabled");
+        $('#openMediaBtn').addClass("ui-disabled");
+    }
+
+    function openDirectory(str, selector) {
+        try {
+            tizen.filesystem.resolve(str, function(dir) {
+                dir.listFiles(function(files) {
+                    $(MEDIA_ID).show();
+                    makeFileList(files, selector);
+                    mediaDir = dir;
+                    alert("Open Success");
+                }, function(err) {
+                    alert("Open Fail: " + err.message);
+                });
+            }, onError, "rw");
+        } catch (exc) {
+            alert("tizen.filesystem.resolve(" + str + ") exc: " + exc.message);
+        }
+    }
+
+    function createFile(dir, selector) {
+        if (!dir) {
+            alert("Create File Error: The directory can not be opened");
+            return;
+        }
+
+        try {
+            var newFile, str = "";
+            var time = new Date().getTime();
+            newFile = dir.createFile("newFile" + time);
+            str += '<li id="'
+                + newFile.name
+                + '"><a href="#"><h4>'
+                + newFile.name
+                + '</h4></a><a href="'
+                + 'javascript:deleteFile('
+                + count
+                + ')" data-icon="delete" data-theme="c">'
+                + '</a></li>';
+            createdId.push(count);
+            gFiles[count++] = newFile;
+            if (str) {
+                $(selector).append(str).trigger("create").listview("refresh");
+            }
+        } catch (exc) {
+            alert("Create File Error: " + exc.message);
+        }
+    }
+
+    $("#openMediaBtn").on("click",function() {
+        if (!mediaDir) {
+            openDirectory(SHARED_MEDIA_DIR, MEDIA_ID);
+        }
+    });
+    $("#createFileBtn").on("click",function() {
+        createFile(mediaDir, MEDIA_ID);
+        EnablePassButton();
+    });
+});
+
+function deleteFile(id) {
+    var dir, selector, index;
+
+    if (id == null) {
+        return;
+    }
+    //Only delete the file by user created.
+    index = createdId.indexOf(id);
+    if (index == -1) {
+        return;
+    }
+
+    try {
+        dir = mediaDir;
+        selector = MEDIA_ID;
+        dir.deleteFile(gFiles[Number(id)].fullPath, function() {
+            //Delete the id in createdId array.
+            createdId.splice(index, 1);
+            $("#" + gFiles[Number(id)].name).remove();
+            $(selector).trigger("create").listview("refresh");
+        }, function (err) {
+            alert("Error: " + err.message);
+        });
+    } catch (exc) {
+        alert("Delete File Error: " + exc.message);
+    }
+}
+
+//function backAppsHome() {
+//    createdId.forEach(function(id) {
+//        deleteFile(id);
+//    });
+//}
diff --git a/ivi/tests/SystemInfo/NOTICE b/ivi/tests/SystemInfo/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/SystemInfo/index.html b/ivi/tests/SystemInfo/index.html
new file mode 100755 (executable)
index 0000000..3bb477b
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="info-list1"></ul>
+        <ul data-role="listview" id="info-list2"></ul>
+        <ul data-role="listview" id="info-list3"></ul>
+        <ul data-role="listview" id="info-list4"></ul>
+        <ul data-role="listview" id="info-list5"></ul>
+        <ul data-role="listview" id="info-list6"></ul>
+        <ul data-role="listview" id="info-list7"></ul>
+        <ul data-role="listview" id="info-list8"></ul>
+        <ul data-role="listview" id="info-list9"></ul>
+        <ul data-role="listview" id="info-list10"></ul>
+        <ul data-role="listview" id="info-list11"></ul>
+        <ul data-role="listview" id="info-list12"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if a SystemInfo reflects current device status</p><br>
+            <p>1. Check WiFi Network Status if it reflects the current device Wi-Fi status</p>
+            <p>2. Change device WiFi status and Check WiFi Network Status again</p>
+            <p>3. Check Device Orientation Status if it displays correct value that fits the current device position</p>
+            <p>4. Rotate the device per 90 degrees and check Device Orientation shows the correct status</p>
+            <p>5. Check Battery Status</p>
+            <p>6. Check the Brightness if it changes the current device brightness</p>
+            <p>7. Check the Resolution</p>
+            <p>8. Check the Dots per inch</p>
+            <p>9. Check the Physical size</p>
+            <p>10. Check the Storage Status</p>
+            <p>11. Check the CPU Status</p>
+            <p>12. Check the Build Status</p>
+            <p>13. Check the Locale Status</p>
+            <p>14. Check the Network Status</p>
+            <p>15. Check the Cellular Network Status</p>
+            <p>16. Check the Sim Status</p>
+            <p>17. Check the Peripheral Status</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/SystemInfo/js/main.js b/ivi/tests/SystemInfo/js/main.js
new file mode 100755 (executable)
index 0000000..a9dc880
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var gInfo;
+var init = function () {
+    try {
+        tizen.systeminfo.addPropertyValueChangeListener("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BATTERY", onBatterySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("STORAGE", onStorageSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CPU", onCpuSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BUILD", onBuildSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("SIM", onSimSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    getPropertyValue();
+};
+
+function getPropertyValue() {
+    try {
+        tizen.systeminfo.getPropertyValue("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.getPropertyValue("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.getPropertyValue("BATTERY", onBatterySuccess);
+        tizen.systeminfo.getPropertyValue("STORAGE", onStorageSuccess);
+        tizen.systeminfo.getPropertyValue("CPU", onCpuSuccess);
+        tizen.systeminfo.getPropertyValue("BUILD", onBuildSuccess);
+        tizen.systeminfo.getPropertyValue("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.getPropertyValue("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("SIM", onSimSuccess);
+        tizen.systeminfo.getPropertyValue("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function make1lineListItem(value) {
+    return '<li>' + value + '</li>';
+}
+
+function makeDividerListItem(value) {
+    return '<li data-role="list-divider">' + value + '</li>';
+}
+
+function onWifiNetworkSuccess(wifi) {
+    gInfo = makeDividerListItem("WIFI_NETWORK Status")
+            + make1lineListItem("Stauts : " + wifi.status)
+            + make1lineListItem("SSID : " + wifi.ssid)
+            + make1lineListItem("IPAddress : " + wifi.ipAddress)
+            + make1lineListItem("IPv6Address : " + wifi.ipv6Address)
+            + make1lineListItem("SignalStrength : " + wifi.signalStrength);
+    $("#info-list1").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDeviceOrientationSuccess(orientation) {
+    gInfo = makeDividerListItem("DEVICE_ORIENTATION Status")
+            + make1lineListItem("Status : " + orientation.status)
+            + make1lineListItem("AutoRotation : " + (orientation.isAutoRotation == true ? "Yes" : "No"));
+    $("#info-list2").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDisplaySuccess(display) {
+    gInfo = makeDividerListItem("DISPLAY Status")
+            + make1lineListItem("Brightness : " + (display.brightness * 100) + "%")
+            + makeDividerListItem("Resolution")
+            + make1lineListItem("Width : " + display.resolutionWidth)
+            + make1lineListItem("Height : " + display.resolutionHeight)
+            + makeDividerListItem("Dots per inch")
+            + make1lineListItem("Horizontal : " + display.dotsPerInchWidth)
+            + make1lineListItem("Vertical : " + display.dotsPerInchHeight)
+            + makeDividerListItem("Physical size")
+            + make1lineListItem("Width : " + display.physicalWidth)
+            + make1lineListItem("Height : " + display.physicalHeight);
+    $("#info-list4").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBatterySuccess(battery) {
+    gInfo = makeDividerListItem("BATTERY Status")
+            + make1lineListItem("Level : " + (battery.level * 100) + "%")
+            + make1lineListItem("Charging : " + (battery.isCharging == true ? "Yes" : "No"));
+    $("#info-list3").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onStorageSuccess(storages) {
+    gInfo = makeDividerListItem("STORAGE Status")
+          + make1lineListItem("Storage : " + storages.units.length);
+    for (var i = 0; i < storages.units.length; i++) {
+        gInfo += makeDividerListItem("Type : " + storages.units[i].type)
+               + make1lineListItem("Capacity : " + Math.floor(storages.units[i].capacity / 1000000) + " MB")
+               + make1lineListItem("Available capacity : " + Math.floor(storages.units[i].availableCapacity / 1000000) + " MB")
+               + make1lineListItem("Removable : " + (storages.units[i].isRemovable == true ? "Yes" : "No"));
+    }
+    $("#info-list5").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCpuSuccess(cpu) {
+    gInfo = makeDividerListItem("CPU Status")
+            + make1lineListItem("Load : " + cpu.load);
+    $("#info-list6").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBuildSuccess(build) {
+    gInfo = makeDividerListItem("BUILD Status")
+            + make1lineListItem("Model : " + build.model)
+            + make1lineListItem("Manufacturer : " + build.manufacturer)
+            + make1lineListItem("BuildVersion : " + build.buildVersion);
+    $("#info-list7").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onLocaleSuccess(locale) {
+    gInfo = makeDividerListItem("LOCALE Status")
+            + make1lineListItem("Language : " + locale.language)
+            + make1lineListItem("Country : " + locale.country);
+    $("#info-list8").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onNetworkSuccess(network) {
+    gInfo = makeDividerListItem("NETWORK Status")
+            + make1lineListItem("NetworkType : " + network.networkType);
+    $("#info-list9").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCellularNetworkSuccess(cellular) {
+    gInfo = makeDividerListItem("CELLULAR_NETWORK Status")
+            + make1lineListItem("Status : " + cellular.status)
+            + make1lineListItem("Apn : " + cellular.apn)
+            + make1lineListItem("IPAddress : " + cellular.ipAddress)
+            + make1lineListItem("IPv6Address : " + cellular.ipv6Address)
+            + make1lineListItem("Mcc : " + cellular.mcc)
+            + make1lineListItem("Mnc : " + cellular.mnc)
+            + make1lineListItem("CellId : " + cellular.cellId)
+            + make1lineListItem("Lac : " + cellular.lac)
+            + make1lineListItem("IsRoaming : " + cellular.isRoaming)
+            + make1lineListItem("IsFlightMode : " + cellular.isFlightMode)
+            + make1lineListItem("IMEI : " + cellular.imei);
+    $("#info-list10").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onSimSuccess(sim) {
+    gInfo = makeDividerListItem("SIM Status")
+            + make1lineListItem("State : " + sim.state)
+            + make1lineListItem("OperatorName : " + sim.operatorName)
+            + make1lineListItem("Msisdn : " + sim.msisdn)
+            + make1lineListItem("Iccid : " + sim.iccid)
+            + make1lineListItem("Mcc : " + sim.mcc)
+            + make1lineListItem("Mnc : " + sim.mnc)
+            + make1lineListItem("Msin : " + sim.msin)
+            + make1lineListItem("Spn : " + sim.spn);
+    $("#info-list11").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onPeripheralSuccess(peripheral) {
+    gInfo = makeDividerListItem("PERIPHERAL Status")
+            + make1lineListItem("IsVideoOutputOn : " + peripheral.isVideoOutputOn);
+    $("#info-list12").html(gInfo).trigger("create").listview("refresh");
+}
+
+$(document).bind("pageinit", init);
diff --git a/ivi/tests/SystemSettingIncomingCall/NOTICE b/ivi/tests/SystemSettingIncomingCall/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/SystemSettingIncomingCall/index.html b/ivi/tests/SystemSettingIncomingCall/index.html
new file mode 100755 (executable)
index 0000000..75a8b4d
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set Call Ringtone</li>
+            </ul>
+            <ul data-role="listview" id="ringtone"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get Call Ringtone</li>
+                <li><div data-role="button" id="tone">Get Ringtone & Play Sound</div></li>
+            </ul>
+            <audio data-controls="true" style="width:100%;" id="MyAudio"></audio>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the ringtone is successfully changed</p><br>
+                <p>1. Click Set ringtone</p>
+                <p>2. Make a call to the device and check if the ringtone is successfully changed</p>
+                <p>3. Proceed the checking for other ringtones</p>
+                <p>Note. you may want to add more ringtone files in 'ringtones' virtual root</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/SystemSettingIncomingCall/js/main.js b/ivi/tests/SystemSettingIncomingCall/js/main.js
new file mode 100644 (file)
index 0000000..4056ca7
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#ringtone").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("INCOMING_CALL", path, onIncomingCallSetSuccess);
+        return false;
+    });
+    $("#tone").bind("vclick", function() {
+        getSystemProperty("INCOMING_CALL", onIncomingCallGetSuccess);
+        return false;
+    });
+    fileAudio();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onIncomingCallSetSuccess() {
+    alert("Change of INCOMING_CALL ringtone");
+}
+
+function onIncomingCallGetSuccess(value) {
+    alert("Sound(Get) path : " + value);
+    var audio = document.getElementById("MyAudio");
+    audio.src = value;
+    audio.type = "audio/*";
+    audio.play();
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function fileAudio() {
+    var documentsDir, length = 0, str = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                str += '<li data-url="' + Url + '">' + files[i].name + '</li>';
+                length++;
+                if(length >= 9)
+                    break;
+            }
+        }
+        if(length == 0)
+            alert("Not found Sound files\nPlease add sound files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#ringtone").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'ringtones',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/ivi/tests/SystemSettingScreen/NOTICE b/ivi/tests/SystemSettingScreen/NOTICE
new file mode 100644 (file)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/ivi/tests/SystemSettingScreen/index.html b/ivi/tests/SystemSettingScreen/index.html
new file mode 100755 (executable)
index 0000000..5533714
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#imageHS ul, li {list-style:none;}
+#imageLS ul, li {list-style:none;}
+#imageHS img {margin:5px; width:65px; height:70px}
+#imageLS img {margin:5px; width:65px; height:70px}
+</style>
+</head>
+<body>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set HomeScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageHS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Set LockScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageLS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get HomeScreen Image</li>
+                <li><div data-role="button" id="imageHG">HomeScreen Image</div></li>
+                <li data-role="list-divider">Get LockScreen Image</li>
+                <li><div data-role="button" id="imageLG">LockScreen Image</div></li>
+                <li data-role="list-divider">Canvas Image</li>
+            </ul>
+            <canvas id="canvas" style="width:100%; height:200px;"></canvas>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the home/lock screen image is successfully changed</p><br>
+                <p>1. Click Home/LockScreen Image</p>
+                <p>2. Select an image for the home/lock screen background</p>
+                <p>3. Check if your selection is set as a home/lock screen background with the naked eye</p>
+                <p>4. Click HomeScreen Image and LockScreen Image to verify the background images are retrieved.</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/ivi/tests/SystemSettingScreen/js/main.js b/ivi/tests/SystemSettingScreen/js/main.js
new file mode 100644 (file)
index 0000000..f56c268
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#imageHS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("HOME_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageLS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("LOCK_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageHG").bind("vclick", function() {
+        getSystemProperty("HOME_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    $("#imageLG").bind("vclick", function() {
+        getSystemProperty("LOCK_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    fileImage();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onScreenSetSuccess() {
+    alert("Change of SCREEN image");
+}
+
+function onScreenGetSuccess(value) {
+    alert("Image(Get) path : " + value);
+    var canvas = document.getElementById("canvas");
+    var cx = canvas.getContext("2d");
+    var image = new Image();
+    image.src = value;
+    cx.drawImage(image, 0, 0, 350, 200);
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function fileImage() {
+    var documentsDir, length = 0, str = "";
+    var len, last, ext;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                len = files[i].name.length;
+                last = files[i].name.lastIndexOf(".");
+                ext = files[i].name.substring(last, len);
+                if(ext == ".jpg" || ext == ".jpeg" || ext == ".bmp" || ext == ".png" || ext == ".gif")
+                {
+                    var Url = files[i].toURI();
+                    Url = Url.replace("file:///", "/");
+                    str += '<li data-url="' + Url + '"><img src="' + files[i].toURI() + '" alt="" />' + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + files[i].name + '</li>';
+                    length++;
+                    if(length >= 6)
+                        break;
+                }
+            }
+        }
+        if(length == 0)
+            alert("Not found Image files.\nPlease add image files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#imageHS").html(str).trigger("create").listview("refresh");
+        $("#imageLS").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'images',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/ivi/tests/Telephony/index.html b/ivi/tests/Telephony/index.html
new file mode 100644 (file)
index 0000000..17af364
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, yun <yunx.liu@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style>
+        #consolelog {
+           width: 98%;
+           height: 250px;
+           overflow: auto;
+           border: 1px solid;
+           margin: 0px auto;
+        }
+    </style>
+  </head>
+  <body>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div id="consolelog">
+      </div>
+      <div id="contentbutton">
+         <div class="ui-grid-c">
+           <div class="ui-block-a"><a id="add_service_listener_btn" data-role="button">Add Service Listeners</a></div>
+           <div class="ui-block-b"><a id="add_call_listeners_btn" data-role="button">Add Call Listeners</a></div>
+           <div class="ui-block-c"><a id="services_btn" data-role="button">Get Services</a></div>
+           <div class="ui-block-d"><a id="get_dservice_btn" data-role="button">Get Default Service</a></div>
+         </div>
+         <div class="ui-grid-d">
+           <div class="ui-block-a"><a id="active_call_btn" data-role="button">Get Active Call</a></div>
+           <div class="ui-block-b"><a id="get_calls_btn" data-role="button">Get All Calls</a></div>
+           <div class="ui-block-c"><a id="dial_btn" data-role="button">Dial</a></div>
+           <div class="ui-block-d" style="text-align: right; padding-top:20px;">Number: </div>
+           <div class="ui-block-e"><input type="text" id="dial_input"/></div>
+         </div>
+         <div class="ui-grid-d">
+           <div class="ui-block-a"><a id="conf_btn" data-role="button">Create Conference</a></div>
+           <div class="ui-block-b"><a id="conf_parties_btn" data-role="button">Get Conference Participants</a></div>
+           <div class="ui-block-c"><a id="split_btn" data-role="button">Split</a></div>
+           <div class="ui-block-d" style="text-align: right; padding-top:20px;">Call Id: </div>
+           <div class="ui-block-e"><input type="text" id="split_input"/></div>
+         </div>
+         <div class="ui-grid-c">
+           <div class="ui-block-a"><a id="disconnect_btn" data-role="button">Disconnect Active Call</a></div>
+           <div class="ui-block-b"><a id="disconnect_all_btn" data-role="button">Disconnect All Calls</a></div>
+           <div class="ui-block-c"><a id="hold_btn" data-role="button">Hold Active Call</a></div>
+           <div class="ui-block-d"><a id="resume_btn" data-role="button">Resume Held Call</a></div>
+         </div>
+         <div class="ui-grid-c">
+           <div class="ui-block-a"><a id="accept_btn" data-role="button">Accept Incoming/Waiting Call</a></div>
+           <div class="ui-block-b"><a id="deflect_btn" data-role="button">Deflect Incoming/Waiting Call</a></div>
+           <div class="ui-block-c" style="text-align: right; padding-top:20px;">To Number: </div>
+           <div class="ui-block-d"><input type="text" id="deflect_input"/></div>
+         </div>
+         <div class="ui-grid-c">
+           <div class="ui-block-a"><a id="transfer_btn" data-role="button">Transfer Incoming/Waiting call</a></div>
+           <div class="ui-block-b"><a id="emerg_nr_btn" data-role="button">Get Emergency Numbers</a></div>
+           <div class="ui-block-c"><a id="remove_call_listeners_btn" data-role="button">Remove Call Listeners</a></div>
+           <div class="ui-block-d"><a id="remove_service_listeners_btn" data-role="button">Remove Service Listeners</a></div>
+         </div>
+         <div class="ui-grid-d">
+           <div class="ui-block-a"><a id="sendtones_btn" data-role="button">Send Tones</a></div>
+           <div class="ui-block-b" style="text-align: right; padding-top:20px;">[0..9, A..F, p]: </div>
+           <div class="ui-block-c"><input type="text" id="tones_input"/></div>
+           <div class="ui-block-d"><a id="starttone_btn" data-role="button">Start Tone</a></div>
+           <div class="ui-block-e"><a id="endtone_btn" data-role="button">End Tone</a></div>
+         </div>
+         <div class="ui-grid-c">
+           <div class="ui-block-a" style="text-align: right; padding-top:20px;">Service Id: </div>
+           <div class="ui-block-b"><input type="text" id="service_id_input"/></div>
+           <div class="ui-block-c"><a id="get_service_btn" data-role="button">Show</a></div>
+           <div class="ui-block-d"><a id="set_dservice_btn" data-role="button">Set As Default</a></div>
+         </div>
+         <div class="ui-grid-b">
+           <div class="ui-block-a"><a id="enable_service_btn" data-role="button">Enable Service</a></div>
+           <div class="ui-block-b"><a id="disable_service_btn" data-role="button">Disable Service</a></div>
+           <div class="ui-block-c"><a id="clearconsole_btn" data-role="button">Clear Console Output</a></div>
+         </div>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies the telephony is supported and valid</p>
+        <p>Test Steps: </p>
+        <ol>
+          <li>Click the "Add Service Listeners"</li>
+          <li>Click the "Add Call Listeners"</li>
+          <li>Click the "Get Services"</li>
+          <li>Click the "Get Default Service"</li>
+          <li>Click the "Get Active Call"</li>
+          <li>Click the "Get All Calls"</li>
+          <li>Click the "Dial"</li>
+          <li>Click the "Create Conference"</li>
+          <li>Click the "Get Conference Participants"</li>
+          <li>Click the "Split"</li>
+          <li>Click the "Disconnect Active Call"</li>
+          <li>Click the "Disconnect All Calls\'</li>
+          <li>Click the "Hold Active Call"</li>
+          <li>Click the "Resume Held Call"</li>
+          <li>Click the "Accept Incoming/Waiting Call"</li>
+          <li>Click the "Deflect Incoming/Waiting Call"</li>
+          <li>Click the "Transfer Incoming/Waiting call"</li>
+          <li>Click the "Get Emergency Numbers"</li>
+          <li>Click the "Remove Call Listeners"</li>
+          <li>Click the "Remove Service Listeners"</li>
+          <li>Click the "Send Tones"</li>
+          <li>Click the "Start Tone"</li>
+          <li>Click the "End Tone"</li>
+          <li>Click the "Show"</li>
+          <li>Click the "Set As Default"</li>
+          <li>Click the "Enable Service"</li>
+          <li>Click the "Disable Service"</li>
+        </ol>
+        <p>Expected Result: </p>
+        <p>Test passes if get telephony services and operate telephony successfully</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/Telephony/js/main.js b/ivi/tests/Telephony/js/main.js
new file mode 100644 (file)
index 0000000..930131f
--- /dev/null
@@ -0,0 +1,545 @@
+/*
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, yun <yunx.liu@intel.com>
+
+*/
+
+var telephony = tizen.telephony;
+var output = document.getElementById("consolelog");
+
+function onError(error, text) {
+  var t, en, em;
+  if (error) {
+    en = ':' + error.name;
+    em = ';' + error.message;
+  } else {
+    em = en = '';
+  }
+  if (text)
+    t = '[' + text + ']';
+  else
+    t = null;
+  print('Error' + t + en + em);
+  return null;
+}
+
+function print(message) {
+  $("#consolelog").html("<p>" + message + "</p>" + $("#consolelog").html());
+}
+
+function printVal(thing, depth) {
+  var out, key;
+  if (thing instanceof Function) {
+    out += '{}';
+  } else if (thing instanceof Array) {
+    out = '[ ';
+  for (key in thing)
+    out += printVal(thing[key], depth + 1) + ', ';
+    out += ']';
+  } else if (thing instanceof Object) {
+    var tabs = '';
+    for (var i = 0; i < depth; i++)
+      tabs += '\t';
+    out = '\n' + tabs + '{';
+    for (key in thing) {
+      if (!(thing[key] instanceof Function))
+        out += '\n' + tabs + '\t' + key + ': ' +
+      printVal(thing[key], depth + 1);
+    }
+    out += '\n' + tabs + '}';
+  } else {
+    out = thing;
+  }
+  return out;
+}
+
+function displayEntryList(array) {
+  $("#consolelog").html("<p>List count = " + array.length + "; " + printVal(array, 0) + "</p>" + $("#consolelog").html());
+}
+
+function readStringField(name) {
+  var input = document.getElementById(name);
+  if (input)
+    return input.value || null;
+  return onError(null, "Invalid " + name + ": " + id);
+}
+
+function getServiceIds() {
+  print("Getting telephony service id's...");
+  tizen.telephony.getServiceIds().then(
+  function(list) {
+    displayEntryList(list);
+  },
+  function(err) {
+    onError(err, 'getServiceIds');
+  });
+}
+
+function readService() {
+  var id = readStringField('service_id_input');
+  var s = tizen.telephony.getService(id);
+  if (!s)
+    return onError(null, "No service for id: " + id);
+  return s;
+}
+
+function setDefaultService() {
+  var id = readStringField('service_id_input');
+  tizen.telephony.setDefaultServiceId(id).then(
+  function() {
+    print('Default telephony service id set to ' + id);
+  },
+  function(err) {
+    onError(err, 'setDefaultService');
+  });
+}
+
+function getDefaultService() {
+  print("Default service id: " + tizen.telephony.defaultServiceId);
+}
+
+function getService() {
+  var service = readService();
+  if (service)
+    print('service[' + id + ']: ' + printVal(service));
+}
+
+function enableService() {
+  var service = readService();
+  if (service) {
+    service.setEnabled(true).then(
+    function() {
+      print('Enabled service id ' + service.serviceId);
+    },
+    function(err) {
+      onError(err, 'enableService');
+    });
+  }
+}
+
+function disableService() {
+  var service = readService();
+  if (service) {
+    service.setEnabled(false).then(
+    function() {
+      print('Disabled service id ' + service.serviceId);
+    },
+    function(err) {
+      onError(err, 'disableService');
+    });
+  }
+}
+
+function onServiceAdded(evt) {
+  print("onServiceAdded: " + printVal(evt.service));
+}
+
+function onServiceRemoved(evt) {
+  print("onServiceRemoved: " + printVal(evt.service));
+}
+
+function onDefaultServiceChanged(evt) {
+  print("onDefaultServiceChanged: " + printVal(evt.service));
+}
+
+function onCallAdded(evt) {
+  print("onCallAdded: " + printVal(evt.call));
+}
+
+function onCallRemoved(evt) {
+  print("onCallRemoved: " + printVal(evt.call));
+}
+
+function onActiveCallChanged(evt) {
+  print("onActiveCallChanged to: " + evt.call ? evt.call.callId : "null");
+}
+
+function onCallStateChanged(evt) {
+  print("onCallStateChanged: " + printVal(evt.call));
+}
+
+function addServiceListeners() {
+  if (!telephony) {
+    return onError(null, "telephony not supported");
+  }
+  tizen.telephony.addEventListener('serviceadded', onServiceAdded, false);
+  tizen.telephony.addEventListener('serviceremoved', onServiceRemoved, false);
+  tizen.telephony.addEventListener('defaultservicechanged', onDefaultServiceChanged, false);
+  print("Event listeners added for 'serviceadded', 'serviceremoved', 'defaultservicechanged'.");
+}
+
+function removeServiceListeners() {
+  if (!telephony) {
+    return onError(null, "telephony not supported");
+  }
+  tizen.telephony.removeEventListener('serviceadded', onServiceAdded, false);
+  tizen.telephony.removeEventListener('serviceremoved', onServiceRemoved, false);
+  tizen.telephony.removeEventListener('defaultservicechanged', onDefaultServiceChanged, false);
+  print("Event listeners removed for 'serviceadded', 'serviceremoved', 'defaultservicechanged'.");
+}
+
+function addCallListeners() {
+  if (!telephony) {
+    return onError(null, "telephony not supported");
+  }
+  tizen.telephony.addEventListener('calladded', onCallAdded, false);
+  tizen.telephony.addEventListener('callremoved', onCallRemoved, false);
+  tizen.telephony.addEventListener('activecallchanged', onActiveCallChanged, false);
+  tizen.telephony.addEventListener('callstatechanged', onCallStateChanged, false);
+  print("Event listeners added for 'calladded', 'callremoved', 'activecallchanged', 'callstatechanged'.");
+}
+
+function removeCallListeners() {
+  if (!telephony) {
+    return onError(null, "telephony not supported");
+  }
+  tizen.telephony.removeEventListener('calladded', onCallAdded, false);
+  tizen.telephony.removeEventListener('callremoved', onCallRemoved, false);
+  tizen.telephony.removeEventListener('activecallchanged', onActiveCallChanged, false);
+  tizen.telephony.removeEventListener('callstatechanged', onCallStateChanged, false);
+  print("Event listeners added for 'calladded', 'callremoved', 'activecallchanged', 'callstatechanged'.");
+}
+
+function getActiveCall() {
+  var ac = tizen.telephony.activeCall;
+  if (!ac)
+    print("No active call");
+  else
+    print("Active call: " + printVal(ac));
+}
+
+function getCalls() {
+  print('Getting telephony calls...');
+  tizen.telephony.getCalls().then(
+  function(list) {
+    displayEntryList(list);
+  },
+  function(err) {
+    onError(err, 'getCalls');
+  });
+}
+
+function hangupAllCalls() {
+  print("Disconnecting all calls...");
+  tizen.telephony.getCalls().then(
+  function(list) {
+    var found = false;
+    list.forEach(function(call) {
+      if (call.state == 'held' || call.state == 'active') {
+        found = true;
+        call.disconnect().then(
+        function(){
+          print("Call " + call.callId + " disconnected.");
+        },
+        function(err) {
+          onError(err, 'disconnect');
+        });
+      }
+    });
+    if (!found)
+      print('No calls.');
+  },
+  function(err) {
+    onError(err, 'getCalls');
+  });
+}
+
+function createConference() {
+  print("Creating conference call...");
+  if (!tizen.telephony.activeCall) {
+    print("No active call.");
+    return;
+  }
+  tizen.telephony.createConference().then(
+  function(confCall) {
+    print('Conference call created: ' + printVal(confCall));
+  },
+  function(err) {
+    onError(err, 'createConference');
+  });
+}
+
+function getParticipants() {
+  print("Getting participants of active conference call...");
+  var ac = tizen.telephony.activeCall;
+  if (!ac) {
+    print("No active call.");
+  } else if (!ac.conferenceId) {
+    print("Active call not a conference. Remote party: " + ac.remoteParty);
+    return;
+  }
+  tizen.telephony.getParticipants(id).then(
+  function(list) {
+    print('Conference participant calls: ');
+    displayEntryList(list);
+  },
+  function(err) {
+    onError(err, 'getParticipants');
+  });
+}
+
+function split() {
+  var id = readStringField('split_input');
+  print("Splitting call id " + id + ' from its conference call');
+  tizen.telephony.split(id).then(
+  function() {
+    print('Call id ' + id + ' split from conference and activated');
+  },
+  function(err) {
+    onError(err, 'split');
+  });
+}
+
+function dial() {
+  var number = readStringField('dial_input');
+  if (number) {
+    print('Dialing ' + number);
+    tizen.telephony.dial(number).then(
+    function() {
+      print('Dialing ' + number + ' successful.');
+    },
+    function(err) {
+      onError(err, 'dial');
+    });
+  }
+}
+
+function accept() {
+  print("Accepting incoming/waiting call...");
+  tizen.telephony.getCalls().then(
+  function(list) {
+    var found = false;
+    list.forEach(function(call) {
+      if (call.state == 'incoming' || call.state == 'waiting') {
+        var state = call.state;
+        found = true;
+        call.accept().then(
+        function(){
+          print("Accepted " + state + " call: ");
+          print(call);
+        },
+        function(err) {
+          onError(err, 'accept');
+        });
+      }
+    });
+    if (!found)
+      print("No incoming or waiting calls")
+  },
+  function(err) {
+    onError(err, 'getCalls');
+  });
+}
+
+function disconnect() {
+  print("Disconnecting active call...");
+  if (!tizen.telephony.activeCall) {
+    print("No active calls");
+    return;
+  }
+  var id = tizen.telephony.activeCall.callId;
+  tizen.telephony.activeCall.disconnect().then(
+  function() {
+    print('Disconnected call id ' + id);
+  },
+  function(err) {
+    onError(err, 'disconnect');
+  });
+}
+
+function hold() {
+  print("Holding active call...");
+  if (!tizen.telephony.activeCall) {
+    print("No active calls");
+    return;
+  }
+  var call = tizen.telephony.activeCall;
+  call.hold().then(
+  function() {
+    print('Held call id ' + call.callId);
+  },
+  function(err) {
+    onError(err, 'hold');
+  });
+}
+
+function resume() {
+  print("Resuming held call...");
+  tizen.telephony.getCalls().then(
+  function(list) {
+    var found = false;
+    list.forEach(function(call) {
+      if (call.state == 'held') {
+        found = true;
+        call.resume().then(
+        function(){
+          print("Resumed call: " + call.callId);
+        },
+        function(err) {
+          onError(err, 'resume');
+        });
+      }
+    });
+    if (!found)
+      print("No held calls")
+  },
+  function(err) {
+    onError(err, 'getCalls');
+  });
+}
+
+function deflect() {
+  print("Deflecting incoming/waiting call...");
+  var number = readStringField('deflect_input');
+  if (!number)
+    return;
+  tizen.telephony.getCalls().then(
+  function(list) {
+    var found = false;
+    list.forEach(function(call) {
+      if (call.state == 'incoming' || call.state == 'waiting') {
+        var state = call.state;
+        found = true;
+        call.deflect(number).then(
+        function(){
+          print("Deflected " + state + " call: " + call.callId);
+        },
+        function(err) {
+          onError(err, 'deflect');
+        });
+      }
+    });
+    if (!found)
+      print("No incoming or waiting calls")
+  },
+  function(err) {
+    onError(err, 'getCalls');
+  });
+}
+
+function transfer() {
+  print("Transfer: joining the active and held calls, then disconnect...");
+  if (!tizen.telephony.activeCall) {
+    print("No active call");
+    return;
+  }
+  // not checking the held calls now, the system will signal error anyway
+  tizen.telephony.transfer().then(
+  function(){
+    print("Transferred " + state + " call: " + call.callId);
+  },
+  function(err) {
+    onError(err, 'transfer');
+  });
+}
+
+function sendTones() {
+  var tones = readStringField('tones_input');
+  if (!tones)
+    return;
+  tizen.telephony.sendTones(tones).then(
+  function() {
+    print('Tones sent: ' + tones);
+  },
+  function(err) {
+    onError(err, 'sendTones');
+  });
+}
+
+function startTone() {
+  var tones = readStringField('tones_input');
+  if (!tones)
+    return;
+  tizen.telephony.startTone(tones).then(
+  function() {
+    print('Tone started: ' + tones);
+  },
+  function(err) {
+    onError(err, 'startTone');
+  });
+}
+
+function stopTone() {
+  var tones = readStringField('tones_input');
+  if (!tones)
+    return;
+  tizen.telephony.stopTone(tones).then(
+  function() {
+    print('Tone stopped: ' + tones);
+  },
+  function(err) {
+    onError(err, 'stopTone');
+  });
+}
+
+function getEmergencyNumbers() {
+  tizen.telephony.getEmergencyNumbers().then(
+  function(list) {
+    print('Emergency number list: ');
+    displayEntryList(list);
+  },
+  function(err) {
+    onError(err, 'getEmergencyNumbers');
+  });
+}
+
+function clearConsole() {
+  $("#consolelog").html("");
+}
+
+$(document).ready(function() {
+  $("#consolelog").html("");
+  $("#add_service_listener_btn").click(addServiceListeners);
+  $("#add_call_listeners_btn").click(addCallListeners);
+  $("#services_btn").click(getServiceIds);
+  $("#get_dservice_btn").click(getDefaultService);
+  $("#active_call_btn").click(getActiveCall);
+  $("#get_calls_btn").click(getCalls);
+  $("#dial_btn").click(dial);
+  $("#conf_btn").click(createConference);
+  $("#conf_parties_btn").click(getParticipants);
+  $("#split_btn").click(split);
+  $("#disconnect_btn").click(disconnect);
+  $("#disconnect_all_btn").click(hangupAllCalls);
+  $("#hold_btn").click(hold);
+  $("#resume_btn").click(resume);
+  $("#accept_btn").click(accept);
+  $("#deflect_btn").click(deflect);
+  $("#transfer_btn").click(transfer);
+  $("#emerg_nr_btn").click(getEmergencyNumbers);
+  $("#remove_call_listeners_btn").click(removeCallListeners);
+  $("#remove_service_listeners_btn").click(removeServiceListeners);
+  $("#sendtones_btn").click(sendTones);
+  $("#starttone_btn").click(startTone);
+  $("#endtone_btn").click(stopTone);
+  $("#get_service_btn").click(getService);
+  $("#set_dservice_btn").click(setDefaultService);
+  $("#enable_service_btn").click(enableService);
+  $("#disable_service_btn").click(disableService);
+  $("#clearconsole_btn").click(clearConsole);
+});
diff --git a/ivi/tests/Template/index.html b/ivi/tests/Template/index.html
new file mode 100644 (file)
index 0000000..9fce2ef
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+    </head>
+
+    <body>
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <div id="content">
+        Hello World !
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+            <p>Test Info</p>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Touch/css/style.css b/ivi/tests/Touch/css/style.css
new file mode 100644 (file)
index 0000000..d6e0f4c
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+.scroll_eare {
+    background: #eee;
+    border: 1px solid #ccc;
+    height: 230px;
+    font-weight: bold;
+    text-shadow: 0 1px 0 #fff;
+    margin-bottom: 10px;
+    background-image: -webkit-gradient(linear,left top,left bottom,from( #fff ),to( #f1f1f1 ));
+    background-image: -webkit-linear-gradient( #fff,#f1f1f1 );
+    background-image: -moz-linear-gradient( #fff,#f1f1f1 );
+    background-image: -ms-linear-gradient( #fff,#f1f1f1 );
+    background-image: -o-linear-gradient( #fff,#f1f1f1 );
+    background-image: linear-gradient( #fff,#f1f1f1 );
+}
diff --git a/ivi/tests/Touch/img/btn_down.png b/ivi/tests/Touch/img/btn_down.png
new file mode 100644 (file)
index 0000000..e3b5fc8
Binary files /dev/null and b/ivi/tests/Touch/img/btn_down.png differ
diff --git a/ivi/tests/Touch/img/btn_up.png b/ivi/tests/Touch/img/btn_up.png
new file mode 100644 (file)
index 0000000..cf7c098
Binary files /dev/null and b/ivi/tests/Touch/img/btn_up.png differ
diff --git a/ivi/tests/Touch/img/scroll.png b/ivi/tests/Touch/img/scroll.png
new file mode 100644 (file)
index 0000000..b3896e5
Binary files /dev/null and b/ivi/tests/Touch/img/scroll.png differ
diff --git a/ivi/tests/Touch/index.html b/ivi/tests/Touch/index.html
new file mode 100644 (file)
index 0000000..bb098ad
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .target {
+                left: 145px;
+                top:300px;
+                position: absolute;
+            }
+        </style>
+    </head>
+    <body>
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <table id="tabletouch" cellpadding="5">
+                <tr>
+                    <td><img id="image1" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image2" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image3" src="img/btn_up.png" height="100" width="100" /></td>
+                </tr>
+            </table>
+            <p id="testresult">Touch info: no button touched</p>
+            <div id="scrollEare" class="scroll_eare">
+              <div id="scrollTarget" class="target"><img id="imageScroll" src="img/scroll.png" height="80" width="80" /></div>
+            </div>
+            <p class="ui-li-desc">* Drag this red button in above eare.</p>
+            <p id="errormessage"></p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device supports single touch, two fingers touch and three fingers touch by clicking the blue buttons, and supports move touch by dragging the red button.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all the tips "one button touched, two buttons touched at one time, three buttons touched at one time" show and the red button can be dragged.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Touch/js/main.js b/ivi/tests/Touch/js/main.js
new file mode 100644 (file)
index 0000000..b737a8a
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+jQuery(document).ready(function() {
+    try {
+        DisablePassButton();
+        var scrollTarget = $("#scrollTarget")[0];
+        var step1 = false; var step2 = false; var step3 = false;
+        //touchstart event
+        document.getElementById("tabletouch").addEventListener('touchstart',  function (event){
+            var images = new Array("image1","image2","image3");
+            var touches = event.touches;
+            var resultMessage =["one button touched", "two buttons touched at one time", "three buttons touched at one time"];
+            if(touches.length ==1){
+                step1 = true;
+            }
+            if(touches.length ==2){
+                step2 = true;
+            }
+            if(touches.length ==3){
+                step3 = true;
+            }
+            $("#testresult").html("Touch info: " + resultMessage[touches.length-1]);
+            for(var k=0;k<touches.length;k++){
+                var touch = touches.item(k);
+                for(var i=0;i<images.length;i++){
+                    image = $("#"+images[i])[0];
+                    if(touch.clientX > getLeft(image) && touch.clientX <getLeft(image)+100 && touch.clientY > getTop(image) & touch.clientY <getTop(image)+100){
+                        image.src = "img/btn_down.png";
+                    }
+                }
+            }
+        }, false);
+
+        //touchmove event
+        document.getElementById("scrollTarget").addEventListener('touchmove',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/btn_down.png";
+            var changedTouches = event.changedTouches;
+            if(changedTouches.item(0).clientX <= getLeft($("#scrollEare")[0])+40){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+"px";
+            }else if(changedTouches.item(0).clientX >= getLeft($("#scrollEare")[0])+250){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+250 +"px";
+            }else{
+                scrollTarget.style.left = changedTouches.item(0).clientX-40 +"px";
+            }
+            if(changedTouches.item(0).clientY <= getTop($("#scrollEare")[0])+40){
+                scrollTarget.style.top =getTop($("#scrollEare")[0]) +"px";
+            } else if(changedTouches.item(0).clientY >= getTop($("#scrollEare")[0])+150){
+                scrollTarget.style.top =getTop($("#scrollEare")[0])+150 +"px";
+            } else{
+                scrollTarget.style.top = changedTouches.item(0).clientY-40 +"px";
+            }
+        }, false);
+
+        //touchend event
+        document.getElementById("scrollTarget").addEventListener('touchcancel',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/scroll.png";
+        }, false);
+
+        document.getElementById("scrollTarget").addEventListener('touchend',  function (event){
+            var image = $("#imageScroll")[0];
+            if(image.src.toString().indexOf("scroll.png") == -1){
+              $("#errormessage").html("touchcancel event can not be fired");
+            }
+        }, false);
+
+        //touchend event
+        document.getElementById("tabletouch").addEventListener('touchend',  function (event){
+            if(step1 && step2 && step3){
+                EnablePassButton();
+            }
+            var images = new Array("image1","image2","image3");
+            for(var i=0;i<images.length;i++){
+                image = $("#"+images[i])[0];
+                image.src = "img/btn_up.png";
+            }
+        }, false);
+    } catch (err) {
+        jQuery("#testresult").html("Html Console:" + err.message);
+    }
+
+    function getTop(e){
+        var offset=e.offsetTop;
+        if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
+        return offset;
+    }
+
+    function getLeft(e){
+        var offset=e.offsetLeft;
+        if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
+        return offset;
+    }
+});
diff --git a/ivi/tests/UserAgentString/index.html b/ivi/tests/UserAgentString/index.html
new file mode 100644 (file)
index 0000000..a145458
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script>
+            $(document).ready(function(){
+                jQuery("#user-agent-string").text(navigator.userAgent);
+                var agent_string = navigator.userAgent;
+                var tizen_platform_ver = agent_string.substring(agent_string.indexOf("(")+1, agent_string.indexOf(")"));
+                var khtml = agent_string.substring(agent_string.lastIndexOf("(")+1, agent_string.lastIndexOf(")"));
+                agent_string = agent_string.replace("("+tizen_platform_ver+")","");
+                agent_string = agent_string.replace("("+khtml+")","");
+                agent_string = agent_string.replace("  ", " ");
+                agent_string = agent_string.replace("  ", " ");
+                var platform_ver_array = tizen_platform_ver.split(";");
+
+                if(platform_ver_array.length == 3){ // tizen
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text(platform_ver_array[2]);
+                } else if(platform_ver_array.length == 2){ // chrome
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text("N/A");
+                } else if(platform_ver_array.length == 4){ //firefox
+                    jQuery("#user-platform-ver").text(platform_ver_array[2]);
+                    jQuery("#user-model-string").text("N/A");
+                }
+
+                var agent_string_array = agent_string.split(" ");
+                if(agent_string_array.length == 6){ //chrome
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[4].substring(0, agent_string_array[4].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[4].substr(agent_string_array[4].indexOf("\/")+1));
+                } else if(agent_string_array.length == 5){ //tizen
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[2].substring(0, agent_string_array[2].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[2].substr(agent_string_array[2].indexOf("\/")+1));
+                }
+            });
+        </script>
+        <style type="text/css">
+            .d{
+                border: 1px solid #000;
+                width:100%;
+                height:280px;
+            }
+            .d li{
+                margin: 10px 5px;
+
+            }
+            #user-agent-string {
+               list-style : none;
+            }
+            .tips{
+                color: red;
+            }
+        </style>
+    </head>
+    <body>
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="d">
+            <ul>
+              <li>User-Agent:</li>
+              <li id="user-agent-string"><span class="tips">Failed to get user agent string</span></li>
+              <li>PLATFORM_VER: <span id="user-platform-ver"></span></li>
+              <li>MODEL: <span id="user-model-string"></span></li>
+              <li>APPLE_WEBKIT_VER: <span id="user-apple-webkit-ver"></span></li>
+              <li>APP_NAME: <span id="user-app-name"></span></li>
+              <li>APP_VER: <span id="user-app-ver"></span></li>
+            </ul>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the user agent string follow correct format.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the user agent string reported by the Web View follow this format:</p>
+            <p>Mozilla/5.0 (Linux; Tizen PLATFORM_VER; MODEL) AppleWebKit/APPLE_WEBKIT_VER (KHTML, like Gecko) APP_NAME/APP_VER Mobile Safari/APPLE_WEBKIT_VER</p>
+            <ul>
+              <li>The value of the PLATFORM_VER string MUST be the platform version of the device.</li>
+              <li>The value of the MODEL string SHOULD be the same as the name of the device.</li>
+              <li>The value of the APPLE_WEBKIT_VER string MUST be "537.3".</li>
+              <li>The value of the APP_NAME string SHOULD be the same as the name of the application.</li>
+              <li>The value of the APP_VER string SHOULD be the same as the version of the application.</li>
+              <li>Device implementations MAY omit the word “Mobile” from the user agent string.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Vibration/css/style.css b/ivi/tests/Vibration/css/style.css
new file mode 100644 (file)
index 0000000..a4fdc9d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 10px 0px;
+   width: 100%;
+}
+
+.containing-element {
+    padding-top: 20px;
+}
+
+.containing-element .ui-slider-switch { width: 100% }
+
+.containing-element .ui-controlgroup-controls { width: 100% }
+
+.ui-radio { width: 50% }
diff --git a/ivi/tests/Vibration/index.html b/ivi/tests/Vibration/index.html
new file mode 100644 (file)
index 0000000..4a1c345
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/jquery/slider.tooltip.js"></script>
+        <style>
+            .vibration {
+                text-align: left
+            }
+            .opt {
+                text-align: left
+            }
+        </style>
+    </head>
+    <body>
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="containing-element">
+            <label for="slider-1" class="vibration">Vibration Time(s)</label>
+            <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="0.50" max="3" step="0.10" value="1" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Periods(s)</label>
+            <input type="range" name="slider-2" id="slider-2" data-highlight="true" min="0.10" max="2" step="0.10" value="0.50" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Number</label>
+            <input type="range" name="slider-3" id="slider-3" data-highlight="true" min="1" max="20" value="2" data-show-value="true" class="hideButton">
+            <p><a href="javascript:startVibration()" id="start" data-role="button" class="opt">Start Vibration</a></p>
+            <a href="javascript:stopVibration()" id="stop" data-role="button" class="opt">Stop Vibration</a>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the vibration is able to adjust vibration time from 500ms to 3000ms, vibration period from 100ms to 2000ms, and vibration number from 1 to 20. E.g, if vibration time is 1000ms, vibration period is 2000ms and vibration number is 3, then the test device vibrates 3 times in 6 seconds, and vibrates 1 second a time.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the vibration functions work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/ivi/tests/Vibration/js/jquery/COPYING b/ivi/tests/Vibration/js/jquery/COPYING
new file mode 100644 (file)
index 0000000..45c0b34
--- /dev/null
@@ -0,0 +1,10 @@
+Copyright (c) 2013 Intel Corporation.
+Except as noted, this software is licensed under BSD-3-Clause License.
+Please, see the LICENSE.BSD-3 file for the BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+slider.tooltip.js:
+The above file is licensed under jQuery MIT License:
+From https://github.com/jquery/jquery-mobile
+Please see the LICENSE.MIT for the MIT terms and conditions.
diff --git a/ivi/tests/Vibration/js/jquery/slider.tooltip.js b/ivi/tests/Vibration/js/jquery/slider.tooltip.js
new file mode 100644 (file)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/ivi/tests/Vibration/js/main.js b/ivi/tests/Vibration/js/main.js
new file mode 100644 (file)
index 0000000..5fa753a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var vibration_time, vibration_periods, vibration_number;
+
+jQuery(document).ready(function() {
+    DisablePassButton();
+    // style setting
+    $(':jqmData(role=content)').css("text-align", "center");
+    $(':jqmData(role=content)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 30px');
+
+    vibration_time = Number($("#slider-1").val())*1000;
+    vibration_periods = Number($("#slider-2").val())*1000;
+    vibration_number = $("#slider-3").val();
+});
+
+function startVibration() {
+    $("#start").addClass("ui-disabled");
+    var time_value=(Number(vibration_time)+Number(vibration_periods)) * Number(vibration_number);
+    setTimeout(function(){
+        $("#start").removeClass("ui-disabled");}, time_value);
+    var pattern = [];
+    for(var i=0; i<2*vibration_number ;i++){
+       if(i%2==0){
+           pattern.push(vibration_time-0);
+       } else {
+           pattern.push(vibration_periods-0);
+       }
+    }
+    navigator.vibrate(pattern);
+    EnablePassButton();
+}
+
+function stopVibration() {
+    navigator.vibrate(0);
+    $("#start").removeClass("ui-disabled");
+}
diff --git a/ivi/tests/Viewport/ViewportTest/config.xml b/ivi/tests/Viewport/ViewportTest/config.xml
new file mode 100644 (file)
index 0000000..94ba6ff
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://tizen.org/test/ViewportTest" version="0.1" viewmodes="">
+  <icon src="icon.png" height="117" width="117"/>
+  <name>ViewportTest</name>
+  <tizen:application id="sanitytest.ViewportTest" package="sanitytest" required_version="2.2"/>
+  <tizen:setting screen-orientation="landscape"/>
+</widget>
diff --git a/ivi/tests/Viewport/ViewportTest/icon.png b/ivi/tests/Viewport/ViewportTest/icon.png
new file mode 100644 (file)
index 0000000..f5578b3
Binary files /dev/null and b/ivi/tests/Viewport/ViewportTest/icon.png differ
diff --git a/ivi/tests/Viewport/ViewportTest/index.html b/ivi/tests/Viewport/ViewportTest/index.html
new file mode 100644 (file)
index 0000000..d14eeb8
--- /dev/null
@@ -0,0 +1,50 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <title>Viewport</title>
+    <link rel="stylesheet" type="text/css" href="style.css" />
+    <script src="support.js"></script>
+  </head>
+  <body onload="run()">
+    <div id="test">The initial page is no viewport, and maybe same with the viewport setting device-width and device-height, but scalable to smaller if device support the scale</div>
+    <div id="contorl">
+      <button id="btn2">width=device-width, height=device-height</button>
+      <button id="btn3">initial-scale=2.0, user-scalable=no</button>
+      <button id="btn4">minimum-scale=1.0, maximum-scale=3.0, user-scalable=yes</button>
+      <button id="back">Complete Test</button>
+    </div>
+  </body>
+</html>
+
diff --git a/ivi/tests/Viewport/ViewportTest/manifest.json b/ivi/tests/Viewport/ViewportTest/manifest.json
new file mode 100644 (file)
index 0000000..aa9a2ad
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "version": "0.0.1",
+    "name": "ViewportTest",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "ViewportTest",
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    },
+    "icons": {
+        "128": "icon.png"
+    }
+}
diff --git a/ivi/tests/Viewport/ViewportTest/style.css b/ivi/tests/Viewport/ViewportTest/style.css
new file mode 100644 (file)
index 0000000..e84acbb
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+Li, Hao <haox.li@intel.com>
+
+*/
+
+body {
+  margin: 0px;
+  padding: 0px;
+}
+
+#test {
+  border: 1px solid black;
+  height: 100px;
+  padding: 5px;
+  margin: 5px;
+  width: 290px;
+}
+
+#contorl {
+  margin: 5px;
+  width: 300px;
+}
+
+#contorl button {
+  background: #eee;
+  border: 1px solid #ccc;
+  border-radius: 3px;
+  font-weight: bold;
+  font-size: 15px;
+  padding: 5px;
+  margin: 5px 0px;
+  width: 100%;
+}
+
diff --git a/ivi/tests/Viewport/ViewportTest/support.js b/ivi/tests/Viewport/ViewportTest/support.js
new file mode 100644 (file)
index 0000000..728d04c
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+Li, Hao <haox.li@intel.com>
+
+*/
+
+function addViewport(content) {
+  var viewport = document.querySelector("meta[name=viewport]");
+  if(!viewport) {
+    viewport = document.createElement("meta");
+    viewport.setAttribute("name", "viewport");
+    document.querySelector("head").insertBefore(viewport);
+  }
+
+  if(content != "") {
+    viewport.setAttribute("content", content);
+  }
+}
+
+function result(expected) {
+  document.getElementById("test").innerText = expected;
+}
+
+function run() {
+  document.getElementById("btn2").onclick = function () {
+    addViewport(this.innerText);
+    result("The width and height of page should be same as the device, and not scale more smaller");
+  }
+  document.getElementById("btn3").onclick = function () {
+    addViewport(this.innerText);
+    result("The page will be scaled to bigger than the initial page, and not scalable");
+  }
+  document.getElementById("btn4").onclick = function () {
+    addViewport(this.innerText);
+    result("The page is scalable for 1~3 times if device support the scale");
+  }
+  document.getElementById("back").onclick = function () {
+    window.close();
+  }
+}
+
diff --git a/ivi/tests/Viewport/index.html b/ivi/tests/Viewport/index.html
new file mode 100644 (file)
index 0000000..c44eaf5
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="../../js/tests.js"></script>
+    <style>
+      ol ul li {
+        margin: 5px 0px;
+      }
+    </style>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ol>
+        <li>Launch sub app "ViewportTest"</li>
+          <ul>
+            <li>On IVI:</li>
+              <ol>
+                 <li>Swith to "app" user: su app</li>
+                 <li>Get "ViewportTest" app id: app-launcher -l</li>
+                 <li>Launch "ViewportTest": app-launcher -s &lt;app-id&gt;</li>
+              </ol>
+          </ul> 
+        <li>Click the button in "ViewportTest" to test Viewport</li>
+      </ol>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionalities of viewport. Tests the functionality of setting device height and width, scale, enabling or disabling user scalable to allow or disallow zoom in/out screen, sliding the screen by figure.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/ivi/tests/WOFF/css/style.css b/ivi/tests/WOFF/css/style.css
new file mode 100644 (file)
index 0000000..eaf6032
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xie,Yunxiao <yunxiaox.xie@intel.com>
+
+*/
+
+.text{
+    width: 100%;
+    height: 200px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+.text .text-div{
+    margin: 35px;
+    width: 330px;
+    height: 150px;
+    font-size: 4em;
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    src: url(../../../res/font/webkit/Ahem.woff) format("woff");
+}
+.text-font {
+    font-family: TestFont;
+}
+
diff --git a/ivi/tests/WOFF/index.html b/ivi/tests/WOFF/index.html
new file mode 100644 (file)
index 0000000..55845c2
--- /dev/null
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xie,Yunxiao <yunxiaox.xie@intel.com>
+
+-->
+
+<meta charset="utf-8">
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css">
+<link rel="stylesheet" type="text/css" href="../../css/main.css">
+<link rel="stylesheet" type="text/css" href="css/style.css">
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<div data-role="header">
+  <h1 id="main_page_title"></h1>
+</div>
+<div data-role="content" class="content">
+  <div class="text">
+    <div class="text-div">
+      <div class="text-font">Failure</div>
+    </div>
+  </div>
+</div>
+<div data-role="footer" data-position="fixed">
+</div>
+<div data-role="popup" id="popup_info">
+  <font class="fontSize">
+    <p>Test Purpose: </p>
+    <p>Verifies WOFF font works well.</p>
+    <p>Expected Result:</p>
+    <p>Test passes if the text above should be a series of black boxes.</p>
+  </font>
+</div>
+
diff --git a/ivi/tests/WRTSupport/index.html b/ivi/tests/WRTSupport/index.html
new file mode 100644 (file)
index 0000000..f3cb9e8
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Xu, Kang <kangx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test localization</li>
+                <li id="other-localization">
+                    <a href="javascript:runApp('res/other-localization.html')" data-transition="slide" style="">
+                        <h2>other-localization</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test unload event</li>
+                <li id="lifecycle-unload-event">
+                    <a href="javascript:runApp('res/lifecycle-unload-event.html')" data-transition="slide" style="">
+                        <h2>lifecycle-unload-event</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access policy</li>
+                <li id="other-widget-access-policy">
+                    <a href="javascript:runApp('res/other-widget-access-policy.html')" data-transition="slide" style="">
+                        <h2>other-widget-access-policy</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test uri schemes</li>
+                <li id="other-uri-schemes">
+                    <a href="javascript:runApp('res/other-uri-schemes.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto">
+                    <a href="javascript:runApp('res/other-uri-schemes-mailto.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access multiple</li>
+                <li id="url-access-multi">
+                    <a href="javascript:runApp('res/url-access-multi.html')" data-transition="slide" style="">
+                        <h2>url-access-multi</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-all">
+                    <a href="javascript:runApp('res/url-access-multi-all.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-all</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-subdomains">
+                    <a href="javascript:runApp('res/url-access-multi-subdomains.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-subdomains</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test security permission and encryption</li>
+                <li id="security-policy">
+                    <a href="javascript:runApp('res/security-policy.html')" data-transition="slide" style="">
+                        <h2>security-policy</h2>
+                    </a>
+                </li>
+                <li id="protection-encryption-check">
+                    <a href="javascript:runApp('res/protection-encryption-check.html')" data-transition="slide" style="">
+                        <h2>protection-encryption-check</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of uri scheme support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support at least the following URI schemes: "sms://", "mmsto://", "mailto://", "&lt;mailto:&gt;" and support localization funxtionality.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/js/main.js b/ivi/tests/WRTSupport/js/main.js
new file mode 100644 (file)
index 0000000..48a3ff0
--- /dev/null
@@ -0,0 +1,278 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt3lue021',
+                    'wrt3olo022',
+                    'wrt3ous027',
+                    'wrt3ous125',
+                    'wrt3owa028',
+                    'wrt3uam046',
+                    'wrt3uam047',
+                    'wrt3uam048',
+                    'wrt5pec002',
+                    'wrt5pec119');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.wrts.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/ivi/tests/WRTSupport/js/tests.js b/ivi/tests/WRTSupport/js/tests.js
new file mode 100644 (file)
index 0000000..ca99599
--- /dev/null
@@ -0,0 +1,223 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('debug-web-inspector-windows7','debug-web-inspector-ubuntu');
+
+$(document).ready(function(){
+    updateFooterButton();
+
+    wgt_name = $("#wgt_name").val();
+    if(jQuery.inArray(wgt_name, install_wgt) == -1) {
+        DisablePassButton();
+
+        app_id = $("#app_id").val();
+        package_id = $("#package_id").val();
+
+        $("#install").bind("vclick", function() {
+            install();
+        });
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+        $("#uninstall").bind("vclick", function() {
+            uninstall(package_id);
+        });
+        try {
+            tizen.package.setPackageInfoEventListener(packageEventCallback);
+        } catch (e) {
+            alert("Exception: " + e.message);
+        }
+
+        packagePre(wgt_name);
+        $('#uninstall').addClass("ui-disabled");
+        $('#launch').addClass("ui-disabled");
+
+        if(checkInstalledPkg(package_id)) {
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/WRTSupport/res/lifecycle-unload-event.html b/ivi/tests/WRTSupport/res/lifecycle-unload-event.html
new file mode 100644 (file)
index 0000000..a470920
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-unload-event">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-unload-event"/>
+                <input type="hidden" id="app_id"  value="wrt3lue021.LifecycleUnloadEvent"/>
+                <input type="hidden" id="package_id" value="wrt3lue021"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>est passes if there is a text "unload event called" display.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/lifecycle-unload-event.wgt b/ivi/tests/WRTSupport/res/lifecycle-unload-event.wgt
new file mode 100644 (file)
index 0000000..2d5168f
Binary files /dev/null and b/ivi/tests/WRTSupport/res/lifecycle-unload-event.wgt differ
diff --git a/ivi/tests/WRTSupport/res/other-localization.html b/ivi/tests/WRTSupport/res/other-localization.html
new file mode 100644 (file)
index 0000000..bd16fe2
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-localization">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-localization"/>
+                <input type="hidden" id="app_id"  value="wrt3olo022.OtherLocalization"/>
+                <input type="hidden" id="package_id" value="wrt3olo022"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the local language is English (check the installed widget's name on the device screen, it should be "english-ol").</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a dialog with "default description." popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/other-localization.wgt b/ivi/tests/WRTSupport/res/other-localization.wgt
new file mode 100644 (file)
index 0000000..37d1ebb
Binary files /dev/null and b/ivi/tests/WRTSupport/res/other-localization.wgt differ
diff --git a/ivi/tests/WRTSupport/res/other-uri-schemes-mailto.html b/ivi/tests/WRTSupport/res/other-uri-schemes-mailto.html
new file mode 100644 (file)
index 0000000..8e4c77e
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto"/>
+                <input type="hidden" id="app_id"  value="wrt3ous125.OtherUriSchemesMailto"/>
+                <input type="hidden" id="package_id" value="wrt3ous125"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with your wrote contents(cc account, bcc account, body content, groups account, subject content) are displayed on the screen when click the "send email" button.</li>
+              <li>The telephone call is displayed on the screen when click the "call" button.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/other-uri-schemes-mailto.wgt b/ivi/tests/WRTSupport/res/other-uri-schemes-mailto.wgt
new file mode 100644 (file)
index 0000000..4b8f484
Binary files /dev/null and b/ivi/tests/WRTSupport/res/other-uri-schemes-mailto.wgt differ
diff --git a/ivi/tests/WRTSupport/res/other-uri-schemes.html b/ivi/tests/WRTSupport/res/other-uri-schemes.html
new file mode 100644 (file)
index 0000000..2e437bb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes"/>
+                <input type="hidden" id="app_id"  value="wrt3ous027.otherurischemes"/>
+                <input type="hidden" id="package_id" value="wrt3ous027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the sms module, mms module and email module of the device are requested when click the links "sms", "mmsto" and "mailto".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/other-uri-schemes.wgt b/ivi/tests/WRTSupport/res/other-uri-schemes.wgt
new file mode 100644 (file)
index 0000000..764703f
Binary files /dev/null and b/ivi/tests/WRTSupport/res/other-uri-schemes.wgt differ
diff --git a/ivi/tests/WRTSupport/res/other-widget-access-policy.html b/ivi/tests/WRTSupport/res/other-widget-access-policy.html
new file mode 100644 (file)
index 0000000..1c65544
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-widget-access-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-widget-access-policy"/>
+                <input type="hidden" id="app_id"  value="wrt3owa028.otherwidgetaccesspolicy"/>
+                <input type="hidden" id="package_id" value="wrt3owa028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link of "www.baidu.com", it opens the home page of "www.baidu.com".</li>
+              <li>Close the widget and launch again, it cannot open the home page of "www.163.com".</li>
+              <li>Click the link of "www.163.com", it opens the home page of "www.163.com" in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/other-widget-access-policy.wgt b/ivi/tests/WRTSupport/res/other-widget-access-policy.wgt
new file mode 100644 (file)
index 0000000..aa18a34
Binary files /dev/null and b/ivi/tests/WRTSupport/res/other-widget-access-policy.wgt differ
diff --git a/ivi/tests/WRTSupport/res/protection-encryption-check.html b/ivi/tests/WRTSupport/res/protection-encryption-check.html
new file mode 100644 (file)
index 0000000..a4419e9
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="protection-encryption-check">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="protection-encryption-check"/>
+                <input type="hidden" id="app_id"  value="wrt5pec002.protectionencryptioncheck"/>
+                <input type="hidden" id="package_id" value="wrt5pec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.The resources(js, CSS, HTML files) of protection-encryption-check application is encrypted.For example: </p>
+            <li>Use the command: "app_launcher -l" in "app" user to get the app id of protection-encryption-check.</li>
+            <p>use the command: "vi /home/app/.config/xwalk-service/applications/'app-id'/index.html" to show the content of "index.html" in terminal, the content of "index.html" is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if "js code ok" and a image which same as this widget icon are displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/protection-encryption-check.wgt b/ivi/tests/WRTSupport/res/protection-encryption-check.wgt
new file mode 100644 (file)
index 0000000..49222b7
Binary files /dev/null and b/ivi/tests/WRTSupport/res/protection-encryption-check.wgt differ
diff --git a/ivi/tests/WRTSupport/res/security-policy.html b/ivi/tests/WRTSupport/res/security-policy.html
new file mode 100644 (file)
index 0000000..93c90e5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-policy"/>
+                <input type="hidden" id="app_id"  value="wrt5pec119.securitypolicy"/>
+                <input type="hidden" id="package_id" value="wrt5pec119"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/security-policy.wgt b/ivi/tests/WRTSupport/res/security-policy.wgt
new file mode 100644 (file)
index 0000000..3f65cc2
Binary files /dev/null and b/ivi/tests/WRTSupport/res/security-policy.wgt differ
diff --git a/ivi/tests/WRTSupport/res/url-access-multi-all.html b/ivi/tests/WRTSupport/res/url-access-multi-all.html
new file mode 100644 (file)
index 0000000..1ef1e73
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all"/>
+                <input type="hidden" id="app_id"  value="wrt3uam047.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrt3uam047"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/url-access-multi-all.wgt b/ivi/tests/WRTSupport/res/url-access-multi-all.wgt
new file mode 100644 (file)
index 0000000..03552ef
Binary files /dev/null and b/ivi/tests/WRTSupport/res/url-access-multi-all.wgt differ
diff --git a/ivi/tests/WRTSupport/res/url-access-multi-subdomains.html b/ivi/tests/WRTSupport/res/url-access-multi-subdomains.html
new file mode 100644 (file)
index 0000000..6e9f55c
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrt3uam048.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrt3uam048"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.baidu.com/gaoji/preferences.html". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com/cn". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/url-access-multi-subdomains.wgt b/ivi/tests/WRTSupport/res/url-access-multi-subdomains.wgt
new file mode 100644 (file)
index 0000000..0379194
Binary files /dev/null and b/ivi/tests/WRTSupport/res/url-access-multi-subdomains.wgt differ
diff --git a/ivi/tests/WRTSupport/res/url-access-multi.html b/ivi/tests/WRTSupport/res/url-access-multi.html
new file mode 100644 (file)
index 0000000..36c321a
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi"/>
+                <input type="hidden" id="app_id"  value="wrt3uam046.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrt3uam046"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It doesn't open in the widget, it opens in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTSupport/res/url-access-multi.wgt b/ivi/tests/WRTSupport/res/url-access-multi.wgt
new file mode 100644 (file)
index 0000000..123869b
Binary files /dev/null and b/ivi/tests/WRTSupport/res/url-access-multi.wgt differ
diff --git a/ivi/tests/WRTUI/index.html b/ivi/tests/WRTUI/index.html
new file mode 100644 (file)
index 0000000..0ed1637
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Xu, Kang <kangx.xu@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="../../js/main.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body>
+    <input type="hidden" id="sub_test"/>
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test multiple browsing</li>
+                <li id="multiple-browsing-context">
+                    <a href="javascript:runApp('res/multiple-browsing-context.html')" data-transition="slide" style="">
+                        <h2>multiple-browsing-context</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test rotation</li>
+                <li id="view-mode-maximized-rotation">
+                    <a href="javascript:runApp('res/view-mode-maximized-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-maximized-rotation</h2>
+                    </a>
+                </li>
+                <li id="view-mode-fullscreen-rotation">
+                    <a href="javascript:runApp('res/view-mode-fullscreen-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-fullscreen-rotation</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of view mode and multiple browsing context support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support two view modes: “maximized” and “fullscreen” of W3C 'view-mode' Media Feature.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+    <div data-role="page" id="test_ui">
+        <iframe id="test_frame" width="100%" frameborder="no" border="0" src=""></iframe>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTUI/js/main.js b/ivi/tests/WRTUI/js/main.js
new file mode 100644 (file)
index 0000000..a8798ec
--- /dev/null
@@ -0,0 +1,272 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt4ars001',
+                    'wrt4vmm015',
+                    'wrt4mbc004',
+                    'wrt4vmf013');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTUI";
+var RESULT_FILE_NAME = "tct-behavior-child.wrtui.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/ivi/tests/WRTUI/js/tests.js b/ivi/tests/WRTUI/js/tests.js
new file mode 100644 (file)
index 0000000..2cde486
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#uninstall').addClass("ui-disabled");
+            $('#launch').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTUI/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/ivi/tests/WRTUI/res/multiple-browsing-context.html b/ivi/tests/WRTUI/res/multiple-browsing-context.html
new file mode 100644 (file)
index 0000000..7f488d5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="multiple-browsing-context">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="multiple-browsing-context"/>
+                <input type="hidden" id="app_id"  value="wrt4mbc004.multiplebrowsingcontext"/>
+                <input type="hidden" id="package_id" value="wrt4mbc004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a new page with "index2.html" can be opened when click the "open window" button on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTUI/res/multiple-browsing-context.wgt b/ivi/tests/WRTUI/res/multiple-browsing-context.wgt
new file mode 100644 (file)
index 0000000..9cf41ee
Binary files /dev/null and b/ivi/tests/WRTUI/res/multiple-browsing-context.wgt differ
diff --git a/ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.html b/ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.html
new file mode 100644 (file)
index 0000000..9f22049
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-fullscreen-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-fullscreen-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmf013.viewmodefullscreenrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmf013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and fullscreen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt b/ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt
new file mode 100644 (file)
index 0000000..2e024e7
Binary files /dev/null and b/ivi/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt differ
diff --git a/ivi/tests/WRTUI/res/view-mode-maximized-rotation.html b/ivi/tests/WRTUI/res/view-mode-maximized-rotation.html
new file mode 100644 (file)
index 0000000..59c4b76
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-maximized-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-maximized-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmm015.viewmodemaximizedrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmm015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and maximized.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/ivi/tests/WRTUI/res/view-mode-maximized-rotation.wgt b/ivi/tests/WRTUI/res/view-mode-maximized-rotation.wgt
new file mode 100644 (file)
index 0000000..9e7f814
Binary files /dev/null and b/ivi/tests/WRTUI/res/view-mode-maximized-rotation.wgt differ
diff --git a/mobile/tct-behavior-tests/LICENSE.Apache-2.0 b/mobile/tct-behavior-tests/LICENSE.Apache-2.0
new file mode 100755 (executable)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/mobile/tct-behavior-tests/LICENSE.BSD-3 b/mobile/tct-behavior-tests/LICENSE.BSD-3
new file mode 100755 (executable)
index 0000000..624f664
--- /dev/null
@@ -0,0 +1,28 @@
+This software is licensed under following license.
+
+****************************************************************************
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+****************************************************************************
diff --git a/mobile/tct-behavior-tests/LICENSE.CC-BY-3.0 b/mobile/tct-behavior-tests/LICENSE.CC-BY-3.0
new file mode 100755 (executable)
index 0000000..67323bd
--- /dev/null
@@ -0,0 +1,295 @@
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES.
+DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP.
+CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS
+MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+DAMAGES RESULTING FROM ITS USE.
+
+License
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS
+PUBLIC LICENSE("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR
+OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE
+OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND
+BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED
+TO BE A CONTRACT,
+THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR
+ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+a."Adaptation" means a work based upon the Work, or upon the Work and
+other pre-existing works, such as a translation, adaptation, derivative work,
+arrangement of music or other alterations of a literary or artistic work,
+or phonogram or performance and includes cinematographic adaptations
+or any other form in which the Work may be recast,
+transformed, or adapted including in any form recognizably derived from
+the original,
+except that a work that constitutes a Collection will not be considered
+an Adaptation for the purpose of this License.
+For the avoidance of doubt, where the Work is a musical work, performance
+or phonogram, the synchronization of the Work in timed-relation with a moving
+image ("synching") will be considered an Adaptation for the purpose of this License.
+b."Collection" means a collection of literary or artistic works,
+such as encyclopedias and anthologies, or performances,
+phonograms or broadcasts, or other works or subject matter other than
+works listed in Section 1(f) below, which, by reason of the selection
+and arrangement of their contents, constitute intellectual creations,
+in which the Work is included in its entirety in unmodified form
+along with one or more other contributions, each constituting separate
+and independent works in themselves, which together are assembled into
+a collective whole.
+A work that constitutes a Collection will not be considered an Adaptation
+(as defined above) for the purposes of this License.
+c."Distribute" means to make available to the public the original and
+copies of the Work or Adaptation, as appropriate, through sale or
+other transfer of ownership.
+d."Licensor" means the individual, individuals, entity or entities that offer(s)
+the Work under the terms of this License.
+e."Original Author" means, in the case of a literary or artistic work,
+the individual, individuals,
+entity or entities who created the Work or if no individual or entity can be identified,
+the publisher; and in addition
+(i) in the case of a performance the actors, singers, musicians, dancers,
+and other persons who act, sing, deliver, declaim, play in, interpret or
+otherwise perform literary or artistic works or expressions of folklore;
+(ii) in the case of a phonogram the producer being the person or legal entity
+who first fixes the sounds of a performance or other sounds; and,
+(iii) in the case of broadcasts, the organization that transmits the broadcast.
+f."Work" means the literary and/or artistic work offered under the terms
+of this License including without limitation any production in the literary,
+scientific and artistic domain, whatever may be the mode or form of its expression
+including digital form, such as a book, pamphlet and other writing; a lecture,
+address, sermon or other work of the same nature; a dramatic or dramatico-musical work;
+a choreographic work or entertainment in dumb show;
+a musical composition with or without words; a cinematographic work to which
+are assimilated works expressed by a process analogous to cinematography;
+a work of drawing, painting, architecture, sculpture, engraving or lithography;
+a photographic work to which are assimilated works expressed by a process analogous
+to photography; a work of applied art; an illustration, map, plan, sketch or
+three-dimensional work relative to geography, topography, architecture or science;
+a performance; a broadcast; a phonogram; a compilation of data to the extent it
+is protected as a copyrightable work; or a work performed by a variety or
+circus performer to the extent it is not otherwise considered a literary or artistic work.
+g."You" means an individual or entity exercising rights under this License
+who has not previously violated the terms of this License with respect to the Work,
+or who has received express permission from the Licensor to exercise rights
+under this License despite a previous violation.
+h."Publicly Perform" means to perform public recitations of the Work and to
+communicate to the public those public recitations, by any means or process,
+including by wire or wireless means or public digital performances;
+to make available to the public Works in such a way that members of the public
+may access these Works from a place and at a place individually chosen by them;
+to perform the Work to the public by any means or process and the communication
+to the public of the performances of the Work, including by public digital performance;
+to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+i."Reproduce" means to make copies of the Work by any means including without
+limitation by sound or visual recordings and the right of fixation and
+reproducing fixations of the Work, including storage of a protected performance
+or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
+or restrict any uses free from copyright or rights arising from limitations or
+exceptions that are provided for in connection with the copyright protection
+under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License,
+Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual
+(for the duration of the applicable copyright) license to exercise the rights
+in the Work as stated below:
+
+a.to Reproduce the Work, to incorporate the Work into one or more Collections,
+and to Reproduce the Work as incorporated in the Collections;
+b.to create and Reproduce Adaptations provided that any such Adaptation,
+including any translation in any medium, takes reasonable steps to clearly label,
+demarcate or otherwise identify that changes were made to the original Work.
+For example, a translation could be marked "The original work was translated
+from English to Spanish," or a modification could indicate
+"The original work has been modified.";
+c.to Distribute and Publicly Perform the Work including as incorporated
+in Collections; and,
+d.to Distribute and Publicly Perform Adaptations.
+e.For the avoidance of doubt:
+
+i.Non-waivable Compulsory License Schemes. In those jurisdictions in which
+the right to collect royalties through any statutory or compulsory licensing
+scheme cannot be waived, the Licensor reserves the exclusive right to collect
+such royalties for any exercise by You of the rights granted under this License;
+ii.Waivable Compulsory License Schemes. In those jurisdictions in which the right
+to collect royalties through any statutory or compulsory licensing scheme can be waived,
+the Licensor waives the exclusive right to collect such royalties for any exercise
+by You of the rights granted under this License; and,
+iii.Voluntary License Schemes. The Licensor waives the right to collect royalties,
+whether individually or, in the event that the Licensor is a member of a collecting
+society that administers voluntary licensing schemes, via that society,
+from any exercise by You of the rights granted under this License.
+The above rights may be exercised in all media and formats whether now known
+or hereafter devised. The above rights include the right to make such modifications
+as are technically necessary to exercise the rights in other media and formats.
+Subject to Section 8(f), all rights not expressly granted by Licensor
+are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made
+subject to and limited by the following restrictions:
+
+a.You may Distribute or Publicly Perform the Work only under the terms of
+this License. You must include a copy of, or the Uniform Resource Identifier (URI)
+for, this License with every copy of the Work You Distribute or Publicly Perform.
+You may not offer or impose any terms on the Work that restrict the terms of
+this License or the ability of the recipient of the Work to exercise
+the rights granted to that recipient under the terms of the License.
+You may not sublicense the Work. You must keep intact all notices that refer
+to this License and to the disclaimer of warranties with every copy of
+the Work You Distribute or Publicly Perform.
+When You Distribute or Publicly Perform the Work,
+You may not impose any effective technological measures on the Work
+that restrict the ability of a recipient of the Work from You to exercise
+the rights granted to that recipient under the terms of the License.
+This Section 4(a) applies to the Work as incorporated in a Collection,
+but this does not require the Collection apart from the Work itself
+to be made subject to the terms of this License.
+If You create a Collection, upon notice from any Licensor You must,
+to the extent practicable, remove from the Collection any credit
+as required by Section 4(b), as requested. If You create an Adaptation,
+upon notice from any Licensor You must, to the extent practicable,
+remove from the Adaptation any credit as required by Section 4(b),
+as requested. b.If You Distribute, or Publicly Perform the Work or
+any Adaptations or Collections, You must, unless a request has been made
+pursuant to Section 4(a), keep intact all copyright notices for the Work
+and provide, reasonable to the medium or means You are utilizing:
+(i) the name of the Original Author (or pseudonym, if applicable)
+if supplied, and/or if the Original Author and/or Licensor designate
+another party or parties (e.g., a sponsor institute, publishing entity, journal)
+for attribution ("Attribution Parties") in Licensor's copyright notice,
+terms of service or by other reasonable means,
+the name of such party or parties; (ii) the title of the Work if supplied;
+(iii) to the extent reasonably practicable, the URI, if any,
+that Licensor specifies to be associated with the Work,
+unless such URI does not refer to the copyright notice or licensing information
+for the Work; and (iv) , consistent with Section 3(b),
+in the case of an Adaptation,
+a credit identifying the use of the Work in the Adaptation
+(e.g., "French translation of the Work by Original Author," or
+"Screenplay based on original Work by Original Author").
+The credit required by this Section 4(b) may be implemented
+in any reasonable manner; provided, however, that in the case of
+a Adaptation or Collection, at a minimum such credit will appear,
+if a credit for all contributing authors of the Adaptation or Collection appears,
+then as part of these credits and in a manner at least as prominent
+as the credits for the other contributing authors.
+For the avoidance of doubt, You may only use the credit required by this Section
+for the purpose of attribution in the manner set out above and,
+by exercising Your rights under this License, You may not implicitly
+or explicitly assert or imply any connection with, sponsorship or
+endorsement by the Original Author, Licensor and/or Attribution Parties,
+as appropriate, of You or Your use of the Work, without the separate,
+express prior written permission of the Original Author,
+Licensor and/or Attribution Parties.
+c.Except as otherwise agreed in writing by the Licensor or as may be otherwise
+permitted by applicable law, if You Reproduce, Distribute or Publicly Perform
+the Work either by itself or as part of any Adaptations or Collections,
+You must not distort, mutilate, modify or take other derogatory action
+in relation to the Work which would be prejudicial to the Original Author's honor
+or reputation. Licensor agrees that in those jurisdictions (e.g. Japan),
+in which any exercise of the right granted in Section 3(b) of this License
+(the right to make Adaptations) would be deemed to be a distortion,
+mutilation, modification or other derogatory action prejudicial to
+the Original Author's honor and reputation, the Licensor will waive or
+not assert, as appropriate, this Section, to the fullest extent permitted
+by the applicable national law, to enable You to reasonably exercise
+Your right under Section 3(b) of this License (right to make Adaptations)
+but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
+LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES
+OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
+OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+WHETHER OR NOT DISCOVERABLE.
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES,
+SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
+IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY
+FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
+EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+a.This License and the rights granted hereunder will terminate automatically
+upon any breach by You of the terms of this License.
+Individuals or entities who have received Adaptations or Collections
+from You under this License, however,
+will not have their licenses terminated provided such individuals or entities
+remain in full compliance with those licenses.
+Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+b.Subject to the above terms and conditions, the license granted here is
+perpetual (for the duration of the applicable copyright in the Work).
+Notwithstanding the above, Licensor reserves the right to release the Work
+under different license terms or to stop distributing the Work at any time;
+provided, however that any such election will not serve to withdraw
+this License (or any other license that has been, or is required to be,
+granted under the terms of this License),
+and this License will continue in full force and effect unless terminated
+as stated above.
+
+8. Miscellaneous
+
+a.Each time You Distribute or Publicly Perform the Work or a Collection,
+the Licensor offers to the recipient a license to the Work on the same terms
+and conditions as the license granted to You under this License.
+b.Each time You Distribute or Publicly Perform an Adaptation,
+Licensor offers to the recipient a license to the original Work on the same terms
+and conditions as the license granted to You under this License.
+c.If any provision of this License is invalid or unenforceable
+under applicable law, it shall not affect the validity or enforceability
+of the remainder of the terms of this License, and without further action
+by the parties to this agreement, such provision shall be reformed
+to the minimum extent necessary to make such provision valid and enforceable.
+d.No term or provision of this License shall be deemed waived and
+no breach consented to unless such waiver or consent shall be in writing
+and signed by the party to be charged with such waiver or consent.
+e.This License constitutes the entire agreement between the parties
+with respect to the Work licensed here. There are no understandings,
+agreements or representations with respect to the Work not specified here.
+Licensor shall not be bound by any additional provisions that may appear
+in any communication from You. This License may not be modified
+without the mutual written agreement of the Licensor and You.
+f.The rights granted under, and the subject matter referenced,
+in this License were drafted utilizing the terminology of the Berne Convention
+for the Protection of Literary and Artistic Works (as amended on September 28, 1979),
+the Rome Convention of 1961, the WIPO Copyright Treaty of 1996,
+the WIPO Performances and Phonograms Treaty of 1996
+and the Universal Copyright Convention (as revised on July 24, 1971).
+These rights and subject matter take effect in the relevant jurisdiction
+in which the License terms are sought to be enforced according to
+the corresponding provisions of the implementation of those treaty provisions
+in the applicable national law. If the standard suite of rights granted
+under applicable copyright law includes additional rights not granted
+under this License, such additional rights are deemed to be included in the License;
+this License is not intended to restrict the license of any rights under applicable law.
+Creative Commons Notice
+Creative Commons is not a party to this License, and makes no warranty
+whatsoever in connection with the Work. Creative Commons will not be liable to
+You or any party on any legal theory for any damages whatsoever,
+including without limitation any general, special, incidental
+or consequential damages arising in connection to this license.
+Notwithstanding the foregoing two (2) sentences,
+if Creative Commons has expressly identified itself as the Licensor hereunder,
+it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public
+that the Work is licensed under the CCPL, Creative Commons does not authorize
+the use by either party of the trademark "Creative Commons" or any related trademark
+or logo of Creative Commons without the prior written consent of Creative Commons.
+Any permitted use will be in compliance with Creative Commons'
+then-current trademark usage guidelines, as may be published on its website
+or otherwise made available upon request from time to time.
+For the avoidance of doubt, this trademark restriction does not form part
+of this License.
+
+Creative Commons may be contacted at http://creativecommons.org/.
diff --git a/mobile/tct-behavior-tests/README b/mobile/tct-behavior-tests/README
new file mode 100755 (executable)
index 0000000..251058c
--- /dev/null
@@ -0,0 +1,14 @@
+1. How to build from source
+
+1.1. Package installation
+    Check that the following packages are installed on the target platform. 
+     (Install them if they are not installed yet.)
+     zip
+
+1.2. Get signing tool to sign WGT.
+    Get signing tool and put it under tools/ folder
+     # cp -ar /path/to/signing /path/to/behavior/tools/
+
+1.3. Package test suite using pack.sh.
+     # ./pack.py -t wgt
+     Then tct-behavior-tests zip packages will be generated under current folder.
diff --git a/mobile/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf b/mobile/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..64b5e41
Binary files /dev/null and b/mobile/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf differ
diff --git a/mobile/tct-behavior-tests/askpolicy.sh b/mobile/tct-behavior-tests/askpolicy.sh
new file mode 100755 (executable)
index 0000000..1c39bdd
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+for i in `grep -r "0xA" /var/cynara/db/_ | grep $1`
+do
+    CLIENT=`echo $i | cut -d ";" -f1`
+    USER=`echo $i | cut -d ";" -f2`
+    PRIVILEGE=`echo $i | cut -d ";" -f3`
+    #echo "cyad --erase=\"\" -r=no -c $CLIENT -u $USER -p $PRIVILEGE"
+    cyad --erase="" -r=no -c $CLIENT -u $USER -p $PRIVILEGE
+done
diff --git a/mobile/tct-behavior-tests/config.xml b/mobile/tct-behavior-tests/config.xml
new file mode 100755 (executable)
index 0000000..50bb984
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://tizen.org/test/tct-behavior-tests" version="3.0" viewmodes="">
+    <access origin="*"/>
+    <tizen:application id="tctbhtests.TCTBehaviorTests" package="tctbhtests" required_version="2.4"/>
+    <icon src="icon.png" height="117" width="117"/>
+    <name>tct-behavior-tests</name>
+    <tizen:privilege name="http://tizen.org/privilege/location"/>
+    <tizen:privilege name="http://tizen.org/privilege/mediacapture"/>
+    <tizen:privilege name="http://tizen.org/privilege/alarm"/>
+    <tizen:privilege name="http://tizen.org/privilege/application.launch"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetooth"/>
+    <tizen:privilege name="http://tizen.org/privilege/calendar.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/calendar.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/callhistory.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/callhistory.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/contact.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/contact.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/download"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/messaging.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/messaging.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.admin"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.cardemulation"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.common"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.p2p"/>
+    <tizen:privilege name="http://tizen.org/privilege/nfc.tag"/>
+    <tizen:privilege name="http://tizen.org/privilege/notification"/>
+    <tizen:privilege name="http://tizen.org/privilege/power"/>
+    <tizen:privilege name="http://tizen.org/privilege/system"/>
+    
+    <tizen:privilege name="http://tizen.org/privilege/datasync"/>
+    <tizen:privilege name="http://tizen.org/privilege/package.info"/>
+    <tizen:privilege name="http://tizen.org/privilege/packagemanager.install"/>
+    <tizen:privilege name="http://tizen.org/privilege/setting"/>
+    <tizen:privilege name="http://tizen.org/privilege/bluetoothmanager"/>
+    <tizen:privilege name="http://tizen.org/privilege/push"/>
+    <tizen:privilege name="http://tizen.org/privilege/telephony"/>
+    <tizen:privilege name="http://tizen.org/privilege/internet"/>
+    <tizen:setting context-menu="disable" background-support="disable" encryption="disable" install-location="auto"/>
+</widget>
diff --git a/mobile/tct-behavior-tests/css/images/COPYING b/mobile/tct-behavior-tests/css/images/COPYING
new file mode 100755 (executable)
index 0000000..ae807ae
--- /dev/null
@@ -0,0 +1,18 @@
+------------------------------------------------------------------------------------------
+ajax-loader.gif
+icons-18-black.png
+icons-18-white.png
+icons-36-black.png
+icons-36-white.png
+
+These files come from
+https://github.com/jquery/jquery-mobile/tree/1.2-stable/css/themes/default/images
+without any modification.
+
+They are licensed under the jQuery Mobile (https://jquery.org/license/) [MIT license]
+
+------------------------------------------------------------------------------------------
+fail.png
+pass.png
+
+These files are created by Intel test developers under 3-Clause BSD License.
diff --git a/mobile/tct-behavior-tests/css/images/ajax-loader.gif b/mobile/tct-behavior-tests/css/images/ajax-loader.gif
new file mode 100755 (executable)
index 0000000..fd1a189
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/ajax-loader.gif differ
diff --git a/mobile/tct-behavior-tests/css/images/fail.png b/mobile/tct-behavior-tests/css/images/fail.png
new file mode 100755 (executable)
index 0000000..fa6a888
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/fail.png differ
diff --git a/mobile/tct-behavior-tests/css/images/icons-18-black.png b/mobile/tct-behavior-tests/css/images/icons-18-black.png
new file mode 100755 (executable)
index 0000000..ce1b758
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/icons-18-black.png differ
diff --git a/mobile/tct-behavior-tests/css/images/icons-18-white.png b/mobile/tct-behavior-tests/css/images/icons-18-white.png
new file mode 100755 (executable)
index 0000000..1ab0127
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/icons-18-white.png differ
diff --git a/mobile/tct-behavior-tests/css/images/icons-36-black.png b/mobile/tct-behavior-tests/css/images/icons-36-black.png
new file mode 100755 (executable)
index 0000000..1a59d7c
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/icons-36-black.png differ
diff --git a/mobile/tct-behavior-tests/css/images/icons-36-white.png b/mobile/tct-behavior-tests/css/images/icons-36-white.png
new file mode 100755 (executable)
index 0000000..5647bdc
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/icons-36-white.png differ
diff --git a/mobile/tct-behavior-tests/css/images/pass.png b/mobile/tct-behavior-tests/css/images/pass.png
new file mode 100755 (executable)
index 0000000..e215f83
Binary files /dev/null and b/mobile/tct-behavior-tests/css/images/pass.png differ
diff --git a/mobile/tct-behavior-tests/css/jquery.mobile.css b/mobile/tct-behavior-tests/css/jquery.mobile.css
new file mode 100755 (executable)
index 0000000..3773a21
--- /dev/null
@@ -0,0 +1,2609 @@
+/*
+* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Released under the MIT license.
+* http://jquery.org/license
+*
+*/
+
+
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+       border: 1px solid               #333 /*{a-bar-border}*/;
+       background:                     #111 /*{a-bar-background-color}*/;
+       color:                                  #fff /*{a-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+       color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a a.ui-link {
+       color: #7cc4e7 /*{a-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-a a.ui-link:visited {
+    color: #2489ce /*{a-bar-link-visited}*/;
+}
+.ui-bar-a a.ui-link:hover {
+       color: #2489ce /*{a-bar-link-hover}*/;
+}
+.ui-bar-a a.ui-link:active {
+       color: #2489ce /*{a-bar-link-active}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+       border: 1px solid               #444 /*{a-body-border}*/;
+       background:                     #222 /*{a-body-background-color}*/;
+       color:                                  #fff /*{a-body-color}*/;
+       text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);       
+}
+.ui-overlay-a {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+       color:  #fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+       color: #2489ce /*{a-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-a .ui-link:visited {
+    color: #2489ce /*{a-body-link-visited}*/;
+}
+.ui-body-a .ui-link:hover {
+       color: #2489ce /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+       color: #2489ce /*{a-body-link-active}*/;
+}
+.ui-btn-up-a {
+       border: 1px solid               #111 /*{a-bup-border}*/;
+       background:                     #333 /*{a-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bup-color}*/;
+       text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a:visited,
+.ui-btn-up-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+       border: 1px solid               #000 /*{a-bhover-border}*/;
+       background:                     #444 /*{a-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bhover-color}*/;
+       text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+       border: 1px solid               #000 /*{a-bdown-border}*/;
+       background:                     #222 /*{a-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bdown-color}*/;
+       text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a:visited,
+.ui-btn-down-a:hover,
+.ui-btn-down-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+       border: 1px solid               #456f9a /*{b-bar-border}*/;
+       background:                     #5e87b0 /*{b-bar-background-color}*/;
+       color:                                  #fff /*{b-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+       color:  #fff /*{b-bar-color}*/;
+}
+.ui-bar-b a.ui-link {
+       color: #ddf0f8 /*{b-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-b a.ui-link:visited {
+    color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-bar-b a.ui-link:hover {
+       color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b a.ui-link:active {
+       color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+       border: 1px solid               #999 /*{b-body-border}*/;
+       background:                     #f3f3f3 /*{b-body-background-color}*/;
+       color:                                  #222 /*{b-body-color}*/;
+       text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+       color:  #333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+       color: #2489ce /*{b-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-b .ui-link:visited {
+    color: #2489ce /*{b-body-link-visited}*/;
+}
+.ui-body-b .ui-link:hover {
+       color: #2489ce /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+       color: #2489ce /*{b-body-link-active}*/;
+}
+.ui-btn-up-b {
+       border: 1px solid               #044062 /*{b-bup-border}*/;
+       background:                     #396b9e /*{b-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bup-color}*/;
+       text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b:visited,
+.ui-btn-up-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+       border: 1px solid               #00415e /*{b-bhover-border}*/;
+       background:                     #4b88b6 /*{b-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bhover-color}*/;
+       text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b:visited,
+.ui-btn-hover-b:hover,
+.ui-btn-hover-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+       border: 1px solid               #225377 /*{b-bdown-border}*/;
+       background:                     #4e89c5 /*{b-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bdown-color}*/;
+       text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b:visited,
+.ui-btn-down-b:hover,
+.ui-btn-down-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+       border: 1px solid               #b3b3b3 /*{c-bar-border}*/;
+       background:                     #eee /*{c-bar-background-color}*/;
+       color:                                  #3e3e3e /*{c-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/      #fff /*{c-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+       color:  #3e3e3e /*{c-bar-color}*/;
+}
+.ui-bar-c a.ui-link {
+       color: #7cc4e7 /*{c-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-c a.ui-link:visited {
+    color: #2489ce /*{c-bar-link-visited}*/;
+}
+.ui-bar-c a.ui-link:hover {
+       color: #2489ce /*{c-bar-link-hover}*/;
+}
+.ui-bar-c a.ui-link:active {
+       color: #2489ce /*{c-bar-link-active}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+       border: 1px solid               #aaa /*{c-body-border}*/;
+       color:                                  #333 /*{c-body-color}*/;
+       text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+       background:                     #f9f9f9 /*{c-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+       color:  #333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+       color: #2489ce /*{c-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-c .ui-link:visited {
+    color: #2489ce /*{c-body-link-visited}*/;
+}
+.ui-body-c .ui-link:hover {
+       color: #2489ce /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+       color: #2489ce /*{c-body-link-active}*/;
+}
+.ui-btn-up-c {
+       border: 1px solid               #ccc /*{c-bup-border}*/;
+       background:                     #eee /*{c-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bup-color}*/;
+       text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c:visited,
+.ui-btn-up-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+       border: 1px solid               #bbb /*{c-bhover-border}*/;
+       background:                     #dfdfdf /*{c-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bhover-color}*/;
+       text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c:visited,
+.ui-btn-hover-c:hover,
+.ui-btn-hover-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+       border: 1px solid               #bbb /*{c-bdown-border}*/;
+       background:                     #d6d6d6 /*{c-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bdown-color}*/;
+       text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c:visited,
+.ui-btn-down-c:hover,
+.ui-btn-down-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+       border: 1px solid               #bbb /*{d-bar-border}*/;
+       background:                     #bbb /*{d-bar-background-color}*/;
+       color:                                  #333 /*{d-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+       color:  #333 /*{d-bar-color}*/;
+}
+.ui-bar-d a.ui-link {
+       color: #2489ce /*{d-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-d a.ui-link:visited {
+    color: #2489ce /*{d-bar-link-visited}*/;
+}
+.ui-bar-d a.ui-link:hover {
+       color: #2489ce /*{d-bar-link-hover}*/;
+}
+.ui-bar-d a.ui-link:active {
+       color: #2489ce /*{d-bar-link-active}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+       border: 1px solid               #bbb /*{d-body-border}*/;
+       color:                                  #333 /*{d-body-color}*/;
+       text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/     #fff /*{d-body-shadow-color}*/;
+       background:                     #fff /*{d-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+       color:  #333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+       color: #2489ce /*{d-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-d .ui-link:visited {
+    color: #2489ce /*{d-body-link-visited}*/;
+}
+.ui-body-d .ui-link:hover {
+       color: #2489ce /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+       color: #2489ce /*{d-body-link-active}*/;
+}
+.ui-btn-up-d {
+       border: 1px solid               #bbb /*{d-bup-border}*/;
+       background:                     #fff /*{d-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bup-color}*/;
+       text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d:visited,
+.ui-btn-up-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+       border: 1px solid               #aaa /*{d-bhover-border}*/;
+       background:                     #eee /*{d-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bhover-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/       #fff /*{d-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d:visited,
+.ui-btn-hover-d:hover,
+.ui-btn-hover-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+       border: 1px solid               #aaa /*{d-bdown-border}*/;
+       background:                     #eee /*{d-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bdown-color}*/;
+       text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/  #fff /*{d-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d:visited,
+.ui-btn-down-d:hover,
+.ui-btn-down-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-e a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-e a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-e a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-e a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-e .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-e .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-e {
+       border: 1px solid               #f4c63f /*{e-bup-border}*/;
+       background:                     #fadb4e /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e:visited,
+.ui-btn-up-e a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+       border: 1px solid               #f2c43d /*{e-bhover-border}*/;
+       background:                     #fbe26f /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e:visited,
+.ui-btn-hover-e:hover,
+.ui-btn-hover-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+       border: 1px solid               #f2c43d /*{e-bdown-border}*/;
+       background:                     #fceda7 /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e:visited,
+.ui-btn-down-e:hover,
+.ui-btn-down-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* r
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-r {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-r,
+.ui-bar-r input,
+.ui-bar-r select,
+.ui-bar-r textarea,
+.ui-bar-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-r .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-r a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-r a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-r a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-r a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-r,
+.ui-overlay-r {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-r {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-r,
+.ui-body-r input,
+.ui-body-r select,
+.ui-body-r textarea,
+.ui-body-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-r .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-r .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-r .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-r .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-r .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bup-border}*/;
+       background:                     rgb(241, 163, 150) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bup-background-start}*/), rgb(241, 163, 150) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-r:visited,
+.ui-btn-up-r a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bhover-border}*/;
+       background:                     rgb(245, 219, 196) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bhover-background-start}*/), to( rgb(241, 163, 150) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-r:visited,
+.ui-btn-hover-r:hover,
+.ui-btn-hover-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-r {
+       border: 1px solid               rgb(250, 230, 220) /*{e-bdown-border}*/;
+       background:                     rgb(250, 230, 220) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(250, 230, 220) /*{e-bdown-background-start}*/), to( rgb(241, 163, 150) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-r:visited,
+.ui-btn-down-r:hover,
+.ui-btn-down-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-r,
+.ui-btn-hover-r,
+.ui-btn-down-r {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* g
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-g {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-g,
+.ui-bar-g input,
+.ui-bar-g select,
+.ui-bar-g textarea,
+.ui-bar-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-g .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-g a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-g a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-g a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-g a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-g,
+.ui-overlay-g {
+        border: 1px solid               #f7c942 /*{e-body-border}*/;
+        color:                                  #222 /*{e-body-color}*/;
+        text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+        background:                     #fff9df /*{e-body-background-color}*/;
+        background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+        background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+        background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+        background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+        background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+        background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+       //background-image:         linear-gradient( rgb(253, 102, 127) /*{e-body-background-start}*/, rgb(189, 215, 175) /*{e-body-background-end}*/);
+}
+.ui-overlay-g {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-g,
+.ui-body-g input,
+.ui-body-g select,
+.ui-body-g textarea,
+.ui-body-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-g .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-g .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-g .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-g .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-g .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bup-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bup-background-start}*/), to( rgb(99, 220, 179) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-g:visited,
+.ui-btn-up-g a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bhover-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bhover-background-start}*/), to( rgb(99, 220, 179) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-g:visited,
+.ui-btn-hover-g:hover,
+.ui-btn-hover-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-g {
+       border: 1px solid               rgb(220, 250, 250) /*{e-bdown-border}*/;
+       background:                     rgb(220, 250, 250) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 250) /*{e-bdown-background-start}*/), to( rgb(99, 220, 179) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-g:visited,
+.ui-btn-down-g:hover,
+.ui-btn-down-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-g,
+.ui-btn-hover-g,
+.ui-btn-down-g {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* Structure */
+/* links within "buttons" 
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+       text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+       border: 1px solid               #2373a5 /*{global-active-border}*/;
+       background:                     #5393c5 /*{global-active-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{global-active-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+       text-decoration: none;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active:visited,
+.ui-btn-active:hover,
+.ui-btn-active a.ui-link-inherit {
+       color:                                  #fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+       border-top: 1px solid   #fff;
+       border-color:                   rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+       }
+.ui-corner-right {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+       -moz-border-radius:                             .6em /*{global-radii-blocks}*/;
+       -webkit-border-radius:                          .6em /*{global-radii-blocks}*/;
+       border-radius:                                          .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+       -moz-border-radius:                                0;
+       -webkit-border-radius:                             0;
+       border-radius:                                             0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+       border-bottom: rgb(130,130,130);
+       border-bottom: rgba(130,130,130,.3);
+       border-bottom-width: 1px;
+       border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+       filter: Alpha(Opacity=30);
+       opacity: .3;
+       zoom: 1;
+}
+.ui-disabled,
+.ui-disabled a {
+       cursor: default !important;
+       pointer-events: none;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+       background:                                             #666 /*{global-icon-color}*/;
+       background:                                             rgba(0,0,0,.4) /*{global-icon-disc}*/;
+       background-image: url(images/icons-18-white.png) /*{global-icon-set}*/;
+       background-repeat: no-repeat;
+       -moz-border-radius:                             9px;
+       -webkit-border-radius:                          9px;
+       border-radius:                                          9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+       background:                                             #fff;
+       background:                                             rgba(255,255,255,.3);
+       background-image: url(images/icons-18-black.png);
+       background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+       only screen and (min--moz-device-pixel-ratio: 1.5),
+       only screen and (min-resolution: 240dpi) {
+       
+       .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+       .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+       .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+       .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 
+       .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+               background-image: url(images/icons-36-white.png);
+               -moz-background-size: 776px 18px;
+               -o-background-size: 776px 18px;
+               -webkit-background-size: 776px 18px;
+               background-size: 776px 18px;
+       }
+       .ui-icon-alt {
+               background-image: url(images/icons-36-black.png);
+       }
+}
+/* plus minus */
+.ui-icon-plus {
+       background-position:    -0 50%;
+}
+.ui-icon-minus {
+       background-position:    -36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+       background-position:    -72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+       background-position:    -108px 50%;
+}
+.ui-icon-arrow-l {
+       background-position:    -144px 50%;
+}
+.ui-icon-arrow-u {
+       background-position:    -180px 50%;
+}
+.ui-icon-arrow-d {
+       background-position:    -216px 50%;
+}
+/* misc */
+.ui-icon-check {
+       background-position:    -252px 50%;
+}
+.ui-icon-gear {
+       background-position:    -288px 50%;
+}
+.ui-icon-refresh {
+       background-position:    -324px 50%;
+}
+.ui-icon-forward {
+       background-position:    -360px 50%;
+}
+.ui-icon-back {
+       background-position:    -396px 50%;
+}
+.ui-icon-grid {
+       background-position:    -432px 50%;
+}
+.ui-icon-star {
+       background-position:    -468px 50%;
+}
+.ui-icon-alert {
+       background-position:    -504px 50%;
+}
+.ui-icon-info {
+       background-position:    -540px 50%;
+}
+.ui-icon-home {
+       background-position:    -576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+       background-position:    -612px 50%;
+}
+.ui-icon-checkbox-off {
+       background-position:    -684px 50%;
+}
+.ui-icon-checkbox-on {
+       background-position:    -648px 50%;
+}
+.ui-icon-radio-off {
+       background-position:    -756px 50%;
+}
+.ui-icon-radio-on {
+       background-position:    -720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon,
+.ui-selectmenu-list .ui-icon {
+       -moz-border-radius: 3px;
+       -webkit-border-radius: 3px;
+       border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+       background-color: transparent;  
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+       background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+       background: url(images/ajax-loader.gif);
+       background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+        -moz-border-radius-topright:           1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+       -moz-border-radius:                             1em /*{global-radii-buttons}*/;
+       -webkit-border-radius:                          1em /*{global-radii-buttons}*/;
+       border-radius:                                          1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+       background: #666;
+       filter: Alpha(Opacity=50);
+       opacity: .5;
+       position: absolute;
+       width: 100%;
+       height: 100%;
+}
+.ui-overlay-shadow {
+       -moz-box-shadow: 0px 0px 12px                   rgba(0,0,0,.6);
+       -webkit-box-shadow: 0px 0px 12px                rgba(0,0,0,.6);
+       box-shadow: 0px 0px 12px                                rgba(0,0,0,.6);
+}
+.ui-shadow {
+       -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                       rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow  {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.3);
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.3);
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+       -moz-box-shadow: inset 0px 1px 4px              rgba(0,0,0,.2);
+       -webkit-box-shadow: inset 0px 1px 4px   rgba(0,0,0,.2);
+       box-shadow: inset 0px 1px 4px                   rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus, .ui-link-inherit:focus {
+       outline: 0;
+}
+.ui-btn.ui-focus {
+       z-index: 1;
+}
+.ui-focus,
+.ui-btn:focus {
+       -moz-box-shadow: inset 0px 0px 3px              #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: inset 0px 0px 3px   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       box-shadow: inset 0px 0px 3px                   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+}
+.ui-input-text.ui-focus,
+.ui-input-search.ui-focus {
+       -moz-box-shadow: 0px 0px 12px                   #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: 0px 0px 12px                #387bbe /*{global-active-background-color}*/;
+       box-shadow: 0px 0px 12px                                        #387bbe /*{global-active-background-color}*/;   
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+       -moz-box-shadow: none !important;
+       -webkit-box-shadow: none !important;
+       box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus,
+.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
+       outline-width: 1px;
+       outline-style: auto;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
+.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+       width: 100%;
+       height: 100%;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+}
+.ui-page-pre-in {
+       opacity: 0;
+}
+.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.out {
+       -webkit-animation-timing-function: ease-in;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-timing-function: ease-in;
+       -moz-animation-duration: 225ms;
+}
+@-webkit-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+.fade.out {
+       opacity: 0;
+       -webkit-animation-duration: 125ms;
+       -webkit-animation-name: fadeout;
+       -moz-animation-duration: 125ms;
+       -moz-animation-name: fadeout;
+}
+.fade.in {
+       opacity: 1;
+       -webkit-animation-duration: 225ms;
+       -webkit-animation-name: fadein;
+       -moz-animation-duration: 225ms;
+       -moz-animation-name: fadein;
+}
+.pop {
+       -webkit-transform-origin: 50% 50%;
+       -moz-transform-origin: 50% 50%;
+}
+.pop.in {
+       -webkit-transform: scale(1);
+       -moz-transform: scale(1);
+    opacity: 1;
+       -webkit-animation-name: popin;
+       -moz-animation-name: popin;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-duration: 350ms;
+}
+.pop.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       opacity: 0;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+}
+.pop.out.reverse {
+       -webkit-transform: scale(.8);
+       -moz-transform: scale(.8);
+       -webkit-animation-name: popout;
+       -moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+    from {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-moz-keyframes popin {
+    from {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-webkit-keyframes popout {
+    from {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+}
+@-moz-keyframes popout {
+    from {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+    from { -webkit-transform: translateX(100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+    from { -moz-transform: translateX(100%); }
+    to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+    from { -webkit-transform: translateX(-100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+    from { -moz-transform: translateX(-100%); }
+    to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.slide.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+}
+.slide.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromright;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromleft;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-duration: 225ms;
+}
+.slidefade.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slidedown.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfromtop;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfromtop;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+       -webkit-transform: translateY(-100%);
+       -moz-transform: translateY(-100%);
+       -webkit-animation-name: slideouttotop;
+       -moz-animation-name: slideouttotop;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+    from { -webkit-transform: translateY(-100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+    from { -moz-transform: translateY(-100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slideup.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfrombottom;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfrombottom;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+       -webkit-transform: translateY(100%);
+       -moz-transform: translateY(100%);
+       -webkit-animation-name: slideouttobottom;
+       -moz-animation-name: slideouttobottom;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+    from { -webkit-transform: translateY(100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+    from { -moz-transform: translateY(100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.flip {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0);
+}
+.flip.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -webkit-animation-duration: 175ms;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -moz-animation-duration: 175ms;
+}
+.flip.in {
+       -webkit-animation-name: flipintoright;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-name: flipintoright;
+       -moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.turn {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -webkit-transform-origin: 0;
+       
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-transform-origin: 0;
+}
+.turn.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -webkit-animation-duration: 125ms;
+       -moz-animation-duration: 125ms;
+}
+.turn.in {
+       -webkit-animation-name: flipintoright;
+       -moz-animation-name: flipintoright;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+       
+}
+.turn.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+       -webkit-transform-origin: 50% 30%;
+       -moz-transform-origin: 50% 30%; 
+       -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+       -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+       -webkit-transform-origin: none;
+       -moz-transform-origin: none;    
+       -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+}
+.flow.out {
+       -webkit-transform: translateX(-100%) scale(.7);
+       -webkit-animation-name: flowouttoleft;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(-100%) scale(.7);
+       -moz-animation-name: flowouttoleft;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.in {
+       -webkit-transform: translateX(0) scale(1);
+       -webkit-animation-name: flowinfromright;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(0) scale(1);
+       -moz-animation-name: flowinfromright;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: flowouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+       -webkit-animation-name: flowinfromleft;
+       -moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform:  translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+    0% { -webkit-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+    0% { -moz-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+    0% { -webkit-transform: translateX(100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+    0% { -moz-transform: translateX(100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { display: block; float: none; }
+/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
+.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
+.ui-grid-a .ui-block-a { clear: left; }
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
+.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
+.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
+.ui-grid-d > :nth-child(n) { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+       left: 0;
+       right: 0;
+       width: 100%;
+       position: fixed;
+       z-index: 1000;
+}
+.ui-header-fixed {
+       top: 0;
+}
+.ui-footer-fixed {
+       bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+       filter: Alpha(Opacity=90);
+       opacity: .9;
+}
+.ui-page-header-fixed {
+       padding-top: 2.6875em;
+}
+.ui-page-footer-fixed {
+       padding-bottom: 2.6875em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+       padding: 0;
+}
+.ui-fixed-hidden {
+       position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+       left: -9999px;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn { 
+       z-index: 10;
+}
+.ui-navbar { max-width: 100%; }
+.ui-navbar.ui-mini { margin: 0; }
+.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; }
+.ui-navbar ul:after { clear: both; }
+.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; }
+.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
+.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
+/* add border if not in header/footer (full width) */
+.ui-navbar li:last-child .ui-btn,
+.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
+.ui-header .ui-navbar li:last-child .ui-btn,
+.ui-footer .ui-navbar li:last-child .ui-btn,
+.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
+.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
+.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
+.ui-header .ui-navbar li .ui-btn,
+.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+/* fixing gaps caused by subpixel problem */
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
+.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
+.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
+.ui-mini { margin-top: .25em; margin-bottom: .25em; }
+.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
+.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; }
+.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; }
+.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right { margin: 0; } /* .ui-mobile to increase specificity level */
+.ui-btn-block { display: block; }
+.ui-header > .ui-btn,
+.ui-footer > .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-block,
+.ui-footer .ui-btn-block { display: block; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-fullsize .ui-btn-inner,
+.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini.ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini.ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-mini.ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; }
+/* Fixes IE/WP filter alpha opacity bugs */
+.ui-disabled .ui-btn-hidden { display: none; }
+.ui-disabled { z-index: 1; }
+.ui-field-contain .ui-btn.ui-submit { margin: 0; }
+label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+       .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
+}
+.ui-collapsible-inset { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
+.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
+.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
+.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; }
+.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+       display: block;
+       margin: 0 -15px;        
+       padding: 10px 15px;
+       border-left-width: 0;
+       border-right-width: 0;
+       border-top: none;      /* Overrides ui-body-* */
+       background-image: none; /* Overrides ui-body-* */
+}
+.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-collapsible-set .ui-collapsible:first-child { margin-top: 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
+.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
+.ui-bar .ui-controlgroup { margin: 0 5px; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px }
+.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; }
+.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,
+.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,
+.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
+.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-select .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn { float: none; margin: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last, .ui-controlgroup-horizontal .ui-select:last-child,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+@media all and (min-width: 450px){
+       .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; }
+       .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
+       .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+       .ui-hide-label .ui-controlgroup-controls { width: 100%; }
+}      
+.ui-dialog {
+        background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain {
+       width: 92.5%;
+       max-width: 500px;
+       margin: 10% auto 15px auto;
+       padding: 0;
+       position: relative;
+       top: -15px;
+}
+.ui-dialog-contain > .ui-header, 
+.ui-dialog-contain > .ui-content, 
+.ui-dialog-contain > .ui-footer { 
+       display: block;
+       position: relative; 
+       width: auto;
+       margin: 0;
+}
+.ui-dialog-contain > .ui-header {
+       border: none;
+       overflow: hidden;
+       z-index: 10; 
+       padding: 0;
+}
+.ui-dialog-contain > .ui-content { 
+       padding: 15px; 
+}
+.ui-dialog-contain > .ui-footer {
+       z-index: 10; 
+       padding: 0 15px; 
+}
+.ui-popup-open .ui-header-fixed,
+.ui-popup-open .ui-footer-fixed {
+       position: absolute !important;  /* See line #553 of popup.js */
+}
+.ui-popup-screen {
+       background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */
+       top: 0px;
+       left: 0px;
+       right: 0px;
+       bottom: 1px;
+       position: absolute;
+       filter: Alpha(Opacity=0);
+       opacity: 0;
+       z-index: 1099;
+}
+.ui-popup-screen.in {
+       opacity: 0.5;
+       filter: Alpha(Opacity=50);
+}
+.ui-popup-screen.out {
+       opacity: 0;
+       filter: Alpha(Opacity=0);
+}
+.ui-popup-container {
+       z-index: 1100;
+       display: inline-block;
+       position: absolute;
+       padding: 0;
+       outline: 0;
+}
+.ui-popup {
+       position: relative;
+}
+.ui-popup.ui-content,
+.ui-popup .ui-content {
+       overflow: visible;
+}
+.ui-popup > p,
+.ui-popup > h1,
+.ui-popup > h2,
+.ui-popup > h3,
+.ui-popup > h4,
+.ui-popup > h5,
+.ui-popup > h6 {
+       margin: .5em 7px;
+}
+.ui-popup > span {
+       display: block;
+       margin: .5em 7px;
+}
+.ui-popup .ui-title {
+       font-size: 16px;
+       font-weight: bold;
+       margin-top: .5em;
+       margin-bottom: .5em;
+}
+.ui-popup-container .ui-content > p,
+.ui-popup-container .ui-content > h1,
+.ui-popup-container .ui-content > h2,
+.ui-popup-container .ui-content > h3,
+.ui-popup-container .ui-content > h4,
+.ui-popup-container .ui-content > h5,
+.ui-popup-container .ui-content > h6 {
+       margin: .5em 0;
+}
+.ui-popup-container .ui-content > span {
+       margin: 0;
+}
+.ui-popup-container .ui-content > p:first-child,
+.ui-popup-container .ui-content > h1:first-child,
+.ui-popup-container .ui-content > h2:first-child,
+.ui-popup-container .ui-content > h3:first-child,
+.ui-popup-container .ui-content > h4:first-child,
+.ui-popup-container .ui-content > h5:first-child,
+.ui-popup-container .ui-content > h6:first-child {
+       margin-top: 0;
+}
+.ui-popup-container .ui-content > p:last-child,
+.ui-popup-container .ui-content > h1:last-child,
+.ui-popup-container .ui-content > h2:last-child,
+.ui-popup-container .ui-content > h3:last-child,
+.ui-popup-container .ui-content > h4:last-child,
+.ui-popup-container .ui-content > h5:last-child,
+.ui-popup-container .ui-content > h6:last-child {
+       margin-bottom: 0;
+}
+.ui-popup > img {
+       width: auto;
+       height: auto;
+       max-width: 100%;
+       max-height: 100%;
+       vertical-align: middle;
+}
+.ui-popup iframe {
+       vertical-align: middle;
+}
+@media all and (min-width: 450px){
+       .ui-popup .ui-field-contain label.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-label,
+       .ui-popup .ui-field-contain label.ui-select,
+       .ui-popup .ui-field-contain label.ui-input-text {
+               font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em;
+       }
+       .ui-popup .ui-field-contain .ui-btn.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-controls,
+       .ui-popup .ui-field-contain .ui-select,
+       .ui-popup .ui-field-contain input.ui-input-text,
+       .ui-popup .ui-field-contain textarea.ui-input-text,
+       .ui-popup .ui-field-contain .ui-input-search {
+               width: 100%; display: block;
+       }
+}
+.ui-popup > .ui-btn-left,
+.ui-popup > .ui-btn-right {
+       position: absolute; 
+       top: -9px;
+       margin: 0;
+       z-index: 1101;
+}
+.ui-popup > .ui-btn-left { left: -9px; }
+.ui-popup > .ui-btn-right { right: -9px; }
+.ui-popup.ui-corner-all > .ui-header,
+.ui-popup.ui-corner-all ~ .ui-content,
+.ui-popup.ui-corner-all > .ui-content:first-child {
+       -webkit-border-top-left-radius:  inherit;
+       border-top-left-radius:          inherit;
+       -webkit-border-top-right-radius: inherit;
+       border-top-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content,
+.ui-popup.ui-corner-all > .ui-footer,
+.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child {
+       -webkit-border-bottom-left-radius:  inherit;
+       border-bottom-left-radius:          inherit;
+       -webkit-border-bottom-right-radius: inherit;
+       border-bottom-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-child(2),
+.ui-popup.ui-corner-all > .ui-header:nth-child(2) {
+       -webkit-border-top-left-radius:  0;
+       border-top-left-radius:          0;
+       -webkit-border-top-right-radius: 0;
+       border-top-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2),
+.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2) {
+       -webkit-border-bottom-left-radius:  0;
+       border-bottom-left-radius:          0;
+       -webkit-border-bottom-right-radius: 0;
+       border-bottom-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-header:only-child,
+.ui-popup.ui-corner-all > .ui-footer:only-child {
+       -webkit-border-radius: inherit;
+       border-radius:         inherit;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin-top: .5em; margin-bottom: .5em; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; }
+.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:last-child { border-bottom-width: 0; }
+.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
+@media all and (min-width: 450px){
+       .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; }
+.ui-field-contain .ui-select .ui-btn { margin: 0; }
+/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+/* Display none because of issues with IE/WP's filter alpha opacity */
+.ui-select .ui-disabled select { display: none; }
+@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; }
+.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; }
+.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { padding: 6px; min-width: 160px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -99999px; left: -9999px; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header { margin: 0; padding: 0; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-select { width: 78%; display: inline-block; }
+       .ui-hide-label .ui-select { width: 100%; } 
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; display: block; width: 100%; outline: 0; }
+input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; }
+.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; }
+input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; }
+.ui-input-search.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-input-search { margin: 0; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-input-text  { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+       .ui-field-contain input.ui-input-text, 
+       .ui-field-contain textarea.ui-input-text, 
+       .ui-field-contain .ui-input-search { width: 78%; display: inline-block; } 
+       .ui-hide-label input.ui-input-text, 
+       .ui-hide-label textarea.ui-input-text, 
+       .ui-hide-label .ui-input-search { width: 100%; }
+       .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; }
+ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-collapsible-content > .ui-listview { margin: -10px -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-collapsible-content .ui-listview-inset { margin: .5em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li.ui-btn { margin: 0; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-static { background-image: none; }
+.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li-last, .ui-li.ui-field-contain.ui-li-last { border-bottom-width: 1px; }
+.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last { border-bottom-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child { border-top-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last { -webkit-border-bottom-left-radius: inherit; -webkit-border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt { -webkit-border-bottom-right-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+        .ui-li-aside { width: 45%; }
+}       
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
+.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
+.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
+.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
+.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; }
+.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; }
+.ui-listview-filter-inset { margin: -15px -5px; background: transparent; }
+.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-li.ui-screen-hidden{ display:none; }
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+    .ui-li .ui-btn-text { overflow:  visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; }
+input.ui-slider-input.ui-mini,
+.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; }
+.ui-field-contain input.ui-slider-input { margin: 0; }
+input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; }
+/* Fixes input fields being to small on Safari/Mac because of the up and down arrows. */
+.ui-slider-input::-webkit-outer-spin-button { margin: 0; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-btn.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin: -15px 0 0 -15px; outline: 0; }
+a.ui-btn.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain div.ui-slider { width: 43%; }
+       .ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}      
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle { margin: 1px 0 0 -15px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }
diff --git a/mobile/tct-behavior-tests/css/main.css b/mobile/tct-behavior-tests/css/main.css
new file mode 100755 (executable)
index 0000000..c9ea8a0
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+.ui-page .ui-content .ui-listview img {
+    position:absolute;
+    top:0;
+    bottom:0;
+    margin:auto;
+}
+
+.ui-page .ui-content .ui-listview h1 {
+    line-height : 45px;
+    vertical-align : middle;
+    white-space : normal;
+}
+
+.ui-li-count {
+    min-width: 30px;
+    text-align: center;
+}
+
+#overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: #000;
+    opacity: 0.6;
+    filter: alpha(opacity=60);
+    z-index:50;
+}
+
+.wgtButton {
+    height:40px;
+    line-height:20px;
+}
+
+.hideButton {
+    display:none;
+}
+
+.fontSize {
+    font-size:85%
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/icon.png b/mobile/tct-behavior-tests/icon.png
new file mode 100755 (executable)
index 0000000..f5578b3
Binary files /dev/null and b/mobile/tct-behavior-tests/icon.png differ
diff --git a/mobile/tct-behavior-tests/index.html b/mobile/tct-behavior-tests/index.html
new file mode 100755 (executable)
index 0000000..720b3d7
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+-->
+<html>
+<head>
+    <title>TCT Behavior Test Tool</title>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="css/main.css" />
+    <script src="js/thirdparty/jquery.js"></script>
+    <script src="js/thirdparty/jquery.mobile.js"></script>
+    <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="page" id="home_ui">
+    <div id="tool_title" data-role="header" data-position="fixed"></div>
+    <div id="app_selector" data-role="content">
+        <ul data-role="listview" id="mylist" data-divider-theme="b" data-inset="true"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+        <div data-role="controlgroup" data-type="horizontal">
+            <a href="javascript:exportResult();" data-role="button" data-icon="gear">Export</a>
+            <a href="javascript:resetResult();" data-role="button" data-icon="refresh">Reset</a>
+            <a href="#popup_exit" data-rel="popup" data-position-to="window" data-role="button" data-inline="true" data-transition="pop" data-icon="back">Exit</a>
+        </div>
+    </div>
+    <div data-role="popup" id="popup_exit" data-overlay-theme="a" data-theme="c" data-dismissible="false" style="max-width:400px;" class="ui-corner-all">
+        <div data-role="header" data-theme="a" class="ui-corner-top">
+            <h1>Reminder</h1>
+        </div>
+        <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
+            <h3 class="ui-title">Do you want to save test result before exit?</h3>
+            <a href="javascript:SaveAndExit();" data-role="button" data-theme="c">Yes</a>
+            <a href="javascript:exitTest();" data-role="button" data-theme="e">No, thanks</a>
+        </div>
+    </div>
+</div>
+<script>
+    updateToolTitle();
+</script>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/inst.apk.py b/mobile/tct-behavior-tests/inst.apk.py
new file mode 100755 (executable)
index 0000000..56e4343
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PARAMETERS = None
+ADB_CMD = "adb"
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip('\n')
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s uninstall org.xwalk.%s" % (
+                    ADB_CMD, PARAMETERS.device, os.path.basename(os.path.splitext(file)[0]))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s install %s" % (ADB_CMD,
+                                               PARAMETERS.device, os.path.join(root, file))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.device:
+        (return_code, output) = doCMD("adb devices")
+        for line in output:
+            if str.find(line, "\tdevice") != -1:
+                PARAMETERS.device = line.split("\t")[0]
+                break
+
+    if not PARAMETERS.device:
+        print "No device found"
+        sys.exit(1)
+
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/mobile/tct-behavior-tests/inst.wgt.py b/mobile/tct-behavior-tests/inst.wgt.py
new file mode 100755 (executable)
index 0000000..16446ab
--- /dev/null
@@ -0,0 +1,269 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+ADMIN_USER_30 = tct_parser.get('DEVICE', 'DEVICE_ADMIN_USER_30')
+
+def userCheck():
+    global GLOVAL_OPT
+    if ADMIN_USER_30 == EXECUTION_MODE_30:
+        GLOVAL_OPT="--global"
+    else:
+        GLOVAL_OPT=""
+
+
+def getInternalStorage():
+    global INTERNAL_STORAGE
+    try: 
+        shell_mgr = ShellManager()
+        shell_mgr.open_shellpipe(PARAMETERS.device.strip())
+        #shell_mgr.open_shellpipe('0000d8dd00006200')
+        shell_mgr.write_cmd('export `tzplatform-get --user ' +PARAMETERS.user+' TZ_USER_CONTENT`', '', None)
+        INTERNAL_STORAGE=shell_mgr.write_cmd('echo $TZ_USER_CONTENT','', None)
+        INTERNAL_STORAGE=str(INTERNAL_STORAGE[len(INTERNAL_STORAGE)-1])
+        print str(INTERNAL_STORAGE)
+        
+    except Exception as ex:
+        print ex
+    finally:
+        shell_mgr.close_shellpipe()
+
+def askpolicyremoving():
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+   
+    print pkg_id
+    print (os.getcwd())
+    print (os.path.dirname(os.path.realpath(__file__)) )
+    if not doRemoteCopy("%s/askpolicy.sh" % SCRIPT_DIR, "%s" % (SRC_DIR)):
+        action_status = False
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell .%s/askpolicy.sh %s" % (PARAMETERS.device, 
+        SRC_DIR, pkg_id)
+    return doCMD(cmd)
+       
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -q -u -n %s" % (GLOVAL_OPT, pkg_id))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -i -t wgt -q -p %s/%s" % (GLOVAL_OPT, SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".wgt"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = EXECUTION_MODE_30
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    userCheck()
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            #askpolicyremoving()
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/mobile/tct-behavior-tests/inst.xpk.py b/mobile/tct-behavior-tests/inst.xpk.py
new file mode 100755 (executable)
index 0000000..1c47cca
--- /dev/null
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -u -t xpk -q -n %s" % pkg_id)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -i -t xpk -q -p %s/%s" % (SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".xpk"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "owner"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/mobile/tct-behavior-tests/js/main.js b/mobile/tct-behavior-tests/js/main.js
new file mode 100755 (executable)
index 0000000..7301192
--- /dev/null
@@ -0,0 +1,777 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+var _appURL;
+var _resultXML;
+var Tests;
+var newDir;
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+//var accMarks = {}; //Re-enter popup
+var noSupport = {};
+var resultFile = "tct-behavior-tests_" + getCurrentTime() + ".result.xml";
+var tmpResultFile = "tct-behavior-tests.tmpresult.xml";
+var isLaunching = false;
+
+function checkTizen(){
+    if (typeof(tizen) == 'undefined')
+        return false;
+    else
+        return true;
+}
+
+function updateToolTitle() {
+    var version = '';
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "config.xml",
+        dataType : "xml",
+        success : function(xml){
+            $(xml).find("widget").each(
+                function(){
+                    if ($(this).attr('version'))
+                        version = $(this).attr('version');
+                }
+            );
+        }
+    });
+
+    $("#tool_title").empty().append("<h1 style=\"width:75%; margin-left:auto; margin-right:auto;\">TCT Behavior Test Tool</h1><a class=\"ui-btn-right\">" + version + "</a>");
+}
+
+function launchApp() {
+    window.open(_appURL);
+    $.mobile.hidePageLoadingMsg();
+    $('#overlay').remove();
+}
+
+function runApp(url) {
+    if (isLaunching){
+        setTimeout(function(){isLaunching = false;}, 200);
+        return;
+    }
+/*  Re-enter popup
+    if (accMarks[url] == 1)
+        url += "?reenter";
+    else
+        accMarks[url] = 1;
+*/
+    isLaunching = true;
+    _appURL = url;
+    $.mobile.showPageLoadingMsg();
+    $('<div></div>').prependTo('body').attr('id', 'overlay');
+    _timer = setTimeout(launchApp, 200);
+}
+
+function updateAppDecorationStyle() {
+    $(".ui-content").css("padding", '6px');
+    $("a.ui-link-inherit").css("padding", '0px 85px 0px 10px');
+    $(".ui-li-has-thumb a.ui-link-inherit").css("padding-left", '40px');
+    $(".ui-li-heading").css("font-size", '14px');
+}
+
+function updateAppDecoration() {
+    $("#mylist").empty();
+    $(_resultXML).find("set").each(
+        function(){
+            $("#mylist").append("<li data-role=\"list-divider\" role=\"heading\">"+$(this).attr("name")+"</li>");
+            $(this).find("testcase").each(
+                function(){
+                     var url = "tests/" + $(this).attr("id") + "/index.html?test_name="+$(this).attr("purpose");
+                     var appLine = "<li id=\"" + $(this).attr("id") + "\" class=\"test_app\">" +
+                           "<a href=\"javascript:runApp('" + url + "')\">" +
+                           "<h1>" + $(this).attr("purpose") + "</h1></a></li>";
+                     $("#mylist").append(appLine);
+                     if($(this).attr("result") == "PASS"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/pass.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:green;'>" +
+                             "PASS" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'g');
+                     } else if($(this).attr("result") == "FAIL"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/fail.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:red;'>" +
+                             "FAIL" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'r');
+                     }
+                     if (noSupport[$(this).attr("id")]) {
+                        $("#mylist > li :last").find("a").attr('href', '');
+                        $("#mylist > li :last").attr('data-theme', 'a');
+                        $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:black;'>" +
+                             "UNSUPPORTED" + "</span>");
+                     }
+                }
+            );
+        }
+    );
+    $("#mylist").listview( "refresh" );
+    updateAppDecorationStyle();
+}
+
+function exportResult() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function exportTmpResult() {
+    writeFile(tmpResultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function resetResult() {
+    _resetResult();
+    updateAppDecoration();
+    isLaunching = false;
+}
+
+function _resetResult() {
+    Tests.each(
+        function() {
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if (isCappresent2 === false) {
+                noSupport[testAppname] = true;
+                $(this).attr("result", "UNSUPPORTED");
+            } else {
+                $(this).attr("result", "N/A");
+            }
+
+        }
+    );
+}
+
+function exitTest(){
+    try {
+        var app = tizen.application.getCurrentApplication();
+        app.exit();
+    } catch(err) {
+        closeWindow();
+    }
+}
+
+function closeWindow() {
+    window.open('', '_self', '');
+    window.close();
+}
+
+function getCurrentTime() {
+    var d = new Date();
+        d = d.toISOString();
+    return d.replace(/:/gi,'-');
+}
+
+function removeUnsupportedFeature(content) {
+    var xml = content;
+    var pos, before, after, posBefore, posAfter;
+
+    pos = xml.indexOf('result="UNSUPPORTED"');
+    while (pos != -1)
+    {
+        before = xml.substring(0, pos);
+        after = xml.substring(pos);
+        posBefore = before.lastIndexOf("<testcase");
+        posAfter = after.indexOf("<testcase");
+        if (posAfter == -1) {
+            posAfter = after.indexOf("</set>");
+        }
+        xml = before.substring(0, posBefore) + after.substring(posAfter);
+        pos = xml.indexOf('result="UNSUPPORTED"');
+    }
+
+    return xml;
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(removeUnsupportedFeature(content.replace("testcase.xsl", "testresult.xsl")));
+        fs.close();
+
+        if (filename == resultFile)
+            alert("Export result to " + resultFile + " successfully.");
+
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        if(!newDir){
+        newDir = dir.createDirectory("tct-behavior-result");
+        }
+
+        dir.deleteFile(dir.fullPath + "/tct-behavior-result/" + filename);
+
+        file = dir.createFile("tct-behavior-result/" + filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function SaveAndExit() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), true);
+}
+
+function updateBar() {
+    $(':jqmData(role=header)').removeClass("slidedown");
+    $(':jqmData(role=footer)').removeClass("slideup");
+    $(':jqmData(role=footer)').attr("align", "center");
+    $(':jqmData(role=footer)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 20px 15px 40px');
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "./tests.xml",
+        dataType : "xml",
+        success : function(xml){
+            _resultXML = xml;
+            Tests = $(xml).find("testcase");
+            getSummary();
+            getCapPresent();
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++)
+            if (files[i].name == tmpResultFile) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("testcase"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        _resetResult();
+        updateAppDecoration();
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents/tct-behavior-result', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    Tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order, tmpItem) {
+                    if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                        $(item).attr("result", $(tmpItem).attr("result"));
+                        return false;
+                    }
+                }
+            );
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if(isCappresent2 === false){
+                noSupport[testAppname] = true;
+            }
+        }
+    );
+}
+
+function recordResultToXML(test_name, result){
+    Tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result)
+            }
+        }
+    );
+}
+
+function initTests() {
+    updateBar();
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result == ""){
+                isLaunching = false;
+            } else {
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function getSummary() {
+
+    if (!checkTizen())
+        return;
+
+    var summaryXML = "";
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+    if (tizen.systeminfo == 'undefined') {
+        return;
+    } else {
+        summaryXML += "<capabilities>";
+       // var caps = tizen.systeminfo.getCapabilities();
+        for (var i = 0; i < caps.length; i++) {
+               try {
+                   var cap = tizen.systeminfo.getCapability(caps[i]);
+                   console.log(caps[i] + " : " + cap);
+                   if(cap === true || cap ===false) {
+                       summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"boolean\"/>\r\n";
+                   } else {
+                       if (/^\d+$/.test(cap))
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"Integer\">\r\n";
+                       else
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"String\">\r\n";
+                       //summaryXML += "        <value>" + cap + "</value>\r\n";
+                       summaryXML += "    </capability>\r\n";
+                   }
+               } catch(error) {
+                       console.log("error - "+error.name +", message = "+error.message);
+               }
+        }
+        summaryXML += "</capabilities>";
+    }
+    var summaryDoc = $.parseXML(summaryXML);
+    var testDef = $(_resultXML).find("test_definition");
+    $(testDef[0]).prepend(summaryDoc.documentElement);
+}
+
+function getCapPresent() {
+    try {
+      var caps2 = tizen.systeminfo.getCapability(caps[0]);
+    } catch (err){
+        alert("Exception: " + err.message);
+    }
+}
+
+function isCapPresent(name) {
+    var cap3 = tizen.systeminfo.getCapability(name)
+    if (cap3 != undefined) {
+        if (typeof(cap3) == "boolean")
+            return cap3;
+        else
+            return true;
+    }
+    else
+        return false;
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/js/tests.js b/mobile/tct-behavior-tests/js/tests.js
new file mode 100755 (executable)
index 0000000..004678f
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Li, Hao <haox.li@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+function EnablePassButton(){
+    $('#pass_button').removeClass("ui-disabled");
+}
+
+function DisablePassButton(){
+    $('#pass_button').addClass("ui-disabled");
+}
+
+function getAppName() {
+    var lpath = window.location.pathname;
+    var from = lpath.lastIndexOf("tests/") + 6;
+    var to = lpath.lastIndexOf("/");
+    return lpath.substring(from, to);
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+function testLaunching(){
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+}
+
+function updateFooterButton(){
+    var footbar = $(':jqmData(role=footer)');
+    footbar.empty();
+    footbar.attr("align", "center");
+    footbar.append("<div data-role=\"controlgroup\" data-type=\"horizontal\">" +
+        "<a href=\"javascript:reportResult('PASS');\" id=\"pass_button\" data-role=\"button\" data-icon=\"check\" style=\"color: green\">Pass</a>" +
+        "<a href=\"javascript:reportResult('FAIL');\" id=\"fail_button\" data-role=\"button\" data-icon=\"delete\" style=\"color: red\">Fail</a>" +
+        "<a href=\"#popup_info\" data-role=\"button\" data-icon=\"info\" data-rel=\"popup\" data-transition=\"pop\">Info</a>" +
+        "<a href=\"javascript:backAppsHome();\" data-role=\"button\" data-icon=\"home\">Back</a></div>");
+
+    footbar.trigger("create");
+    footbar.find(':jqmData(role=button) > span:first-child').css('padding', '15px 10px 15px 30px');
+    $("#popup_info").popup( "option", "theme", "a");
+//    var maxHeight = $(window).height() - 100 + "px";
+    var maxHeight = $(document).height - 100 + "px";
+    $("#popup_info").css("max-height", maxHeight);
+    $("#popup_info").css("margin-bottom", "30px");
+    $("#popup_info").css("overflow-y", "auto");
+}
+
+$(document).bind('pagecreate', updateFooterButton);
+
+function Parm(data, name) {
+    var p;
+    ts = $(data).find(name);
+    if (ts) {
+        t = $(ts).get(0);
+        if (t)
+            p = $(t).text().trim();
+    }
+
+    if (p) {
+        var rawVal = decodeURI(p);
+        if (rawVal.indexOf(',') < 0)
+            p = rawVal;
+        else
+            p = rawVal.split(',');
+    }
+
+    return p;
+}
+
+function getParms() {
+    var parms = new Array();
+    var str = location.search.substring(1);
+    var items = str.split('&');
+    for ( var i = 0; i < items.length; i++) {
+        var pos = items[i].indexOf('=');
+        if (pos > 0) {
+            var key = items[i].substring(0, pos);
+            var val = items[i].substring(pos + 1);
+            if (!parms[key]) {
+                var rawVal = decodeURI(val);
+                if (rawVal.indexOf(',') < 0)
+                    parms[key] = rawVal;
+                else
+                    parms[key] = rawVal.split(',');
+            }
+        }
+    }
+
+    return parms["test_name"];
+}
+
+$(document).ready(function(){
+    testLaunching();
+    var testname = getParms();
+    document.title = testname
+    $("#main_page_title").text(testname);
+    window.history.pushState("","",window.location.href);
+//    var qstr = location.search.substring(1);
+//    if (!qstr || qstr.indexOf("reenter") < 0)
+//        $("[href='#popup_info']").click();
+});
+
+function checkInstalledPkg(pkgId) {
+    var packageInfo = null;
+    try {
+        if(pkgId && (typeof(tizen) != 'undefined')) {
+            packageInfo = tizen.package.getPackageInfo(pkgId);
+        }
+    } catch (e) {}
+
+    return packageInfo === null ? false : true;
+}
diff --git a/mobile/tct-behavior-tests/js/thirdparty/jquery.js b/mobile/tct-behavior-tests/js/thirdparty/jquery.js
new file mode 100755 (executable)
index 0000000..f65cf1d
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */\r
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/js/thirdparty/jquery.mobile.js b/mobile/tct-behavior-tests/js/thirdparty/jquery.mobile.js
new file mode 100755 (executable)
index 0000000..e0d02a9
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery Mobile vGit Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 jquerymobile.com | jquery.org/license !*/
+(function(a,b,c){typeof define=="function"&&define.amd?define(["jquery"],function(d){return c(d,a,b),d.mobile}):c(a.jQuery,a,b)})(this,document,function(a,b,c,d){(function(a,b,d){var e={};a.mobile=a.extend({},{version:"1.2.0",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:!0,hashListeningEnabled:!0,linkBindingEnabled:!0,defaultPageTransition:"fade",maxTransitionWidth:!1,minScrollBack:250,touchOverflowEnabled:!1,defaultDialogTransition:"pop",pageLoadErrorMessage:"Error Loading Page",pageLoadErrorMessageTheme:"e",phonegapNavigationEnabled:!1,autoInitializePage:!0,pushStateEnabled:!0,ignoreContentEnabled:!1,orientationChangeEnabled:!0,buttonMarkup:{hoverDelay:200},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91},silentScroll:function(d){a.type(d)!=="number"&&(d=a.mobile.defaultHomeScroll),a.event.special.scrollstart.enabled=!1,setTimeout(function(){b.scrollTo(0,d),a(c).trigger("silentscroll",{x:0,y:d})},20),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},nsNormalizeDict:e,nsNormalize:function(b){if(!b)return;return e[b]||(e[b]=a.camelCase(a.mobile.ns+b))},getInheritedTheme:function(a,b){var c=a[0],d="",e=/ui-(bar|body|overlay)-([a-z])\b/,f,g;while(c){f=c.className||"";if(f&&(g=e.exec(f))&&(d=g[2]))break;c=c.parentNode}return d||b||"a"},closestPageData:function(a){return a.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("page")},enhanceable:function(a){return this.haveParents(a,"enhance")},hijackable:function(a){return this.haveParents(a,"ajax")},haveParents:function(b,c){if(!a.mobile.ignoreContentEnabled)return b;var d=b.length,e=a(),f,g,h;for(var i=0;i<d;i++){g=b.eq(i),h=!1,f=b[i];while(f){var j=f.getAttribute?f.getAttribute("data-"+a.mobile.ns+c):"";if(j==="false"){h=!0;break}f=f.parentNode}h||(e=e.add(g))}return e},getScreenHeight:function(){return b.innerHeight||a(b).height()}},a.mobile),a.fn.jqmData=function(b,c){var e;return typeof b!="undefined"&&(b&&(b=a.mobile.nsNormalize(b)),arguments.length<2||c===d?e=this.data(b):e=this.data(b,c)),e},a.jqmData=function(b,c,d){var e;return typeof c!="undefined"&&(e=a.data(b,c?a.mobile.nsNormalize(c):c,d)),e},a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))},a.jqmRemoveData=function(b,c){return a.removeData(b,a.mobile.nsNormalize(c))},a.fn.removeWithDependents=function(){a.removeWithDependents(this)},a.removeWithDependents=function(b){var c=a(b);(c.jqmData("dependents")||a()).remove(),c.remove()},a.fn.addDependents=function(b){a.addDependents(a(this),b)},a.addDependents=function(b,c){var d=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(d,c))},a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()},a.fn.jqmEnhanceable=function(){return a.mobile.enhanceable(this)},a.fn.jqmHijackable=function(){return a.mobile.hijackable(this)};var f=a.find,g=/:jqmData\(([^)]*)\)/g;a.find=function(b,c,d,e){return b=b.replace(g,"[data-"+(a.mobile.ns||"")+"$1]"),f.call(this,b,c,d,e)},a.extend(a.find,f),a.find.matches=function(b,c){return a.find(b,null,null,c)},a.find.matchesSelector=function(b,c){return a.find(c,null,null,[b]).length>0}})(a,this),function(a,b){var c=0,d=Array.prototype.slice,e=a.cleanData;a.cleanData=function(b){for(var c=0,d;(d=b[c])!=null;c++)try{a(d).triggerHandler("remove")}catch(f){}e(b)},a.widget=function(b,c,d){var e,f,g,h,i=b.split(".")[0];b=b.split(".")[1],e=i+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][e]=function(b){return!!a.data(b,e)},a[i]=a[i]||{},f=a[i][b],g=a[i][b]=function(a,b){if(!this._createWidget)return new g(a,b);arguments.length&&this._createWidget(a,b)},a.extend(g,f,{version:d.version,_proto:a.extend({},d),_childConstructors:[]}),h=new c,h.options=a.widget.extend({},h.options),a.each(d,function(b,e){a.isFunction(e)&&(d[b]=function(){var a=function(){return c.prototype[b].apply(this,arguments)},d=function(a){return c.prototype[b].apply(this,a)};return function(){var b=this._super,c=this._superApply,f;return this._super=a,this._superApply=d,f=e.apply(this,arguments),this._super=b,this._superApply=c,f}}())}),g.prototype=a.widget.extend(h,{widgetEventPrefix:b},d,{constructor:g,namespace:i,widgetName:b,widgetBaseClass:e,widgetFullName:e}),f?(a.each(f._childConstructors,function(b,c){var d=c.prototype;a.widget(d.namespace+"."+d.widgetName,g,c._proto)}),delete f._childConstructors):c._childConstructors.push(g),a.widget.bridge(b,g)},a.widget.extend=function(c){var e=d.call(arguments,1),f=0,g=e.length,h,i;for(;f<g;f++)for(h in e[f])i=e[f][h],e[f].hasOwnProperty(h)&&i!==b&&(c[h]=a.isPlainObject(i)?a.widget.extend({},c[h],i):i);return c},a.widget.bridge=function(c,e){var f=e.prototype.widgetFullName;a.fn[c]=function(g){var h=typeof g=="string",i=d.call(arguments,1),j=this;return g=!h&&i.length?a.widget.extend.apply(null,[g].concat(i)):g,h?this.each(function(){var d,e=a.data(this,f);if(!e)return a.error("cannot call methods on "+c+" prior to initialization; "+"attempted to call method '"+g+"'");if(!a.isFunction(e[g])||g.charAt(0)==="_")return a.error("no such method '"+g+"' for "+c+" widget instance");d=e[g].apply(e,i);if(d!==e&&d!==b)return j=d&&d.jquery?j.pushStack(d.get()):d,!1}):this.each(function(){var b=a.data(this,f);b?b.option(g||{})._init():new e(g,this)}),j}},a.Widget=function(a,b){},a.Widget._childConstructors=[],a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(b,d){d=a(d||this.defaultElement||this)[0],this.element=a(d),this.uuid=c++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=a.widget.extend({},this.options,this._getCreateOptions(),b),this.bindings=a(),this.hoverable=a(),this.focusable=a(),d!==this&&(a.data(d,this.widgetName,this),a.data(d,this.widgetFullName,this),this._on({remove:"destroy"}),this.document=a(d.style?d.ownerDocument:d.document||d),this.window=a(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:a.noop,_getCreateEventData:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(c,d){var e=c,f,g,h;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof c=="string"){e={},f=c.split("."),c=f.shift();if(f.length){g=e[c]=a.widget.extend({},this.options[c]);for(h=0;h<f.length-1;h++)g[f[h]]=g[f[h]]||{},g=g[f[h]];c=f.pop();if(d===b)return g[c]===b?null:g[c];g[c]=d}else{if(d===b)return this.options[c]===b?null:this.options[c];e[c]=d}}return this._setOptions(e),this},_setOptions:function(a){var b;for(b in a)this._setOption(b,a[b]);return this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!b).attr("aria-disabled",b),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(b,c){c?(b=a(b),this.bindings=this.bindings.add(b)):(c=b,b=this.element);var d=this;a.each(c,function(c,e){function f(){if(d.options.disabled===!0||a(this).hasClass("ui-state-disabled"))return;return(typeof e=="string"?d[e]:e).apply(d,arguments)}typeof e!="string"&&(f.guid=e.guid=e.guid||f.guid||a.guid++);var g=c.match(/^(\w+)\s*(.*)$/),h=g[1]+d.eventNamespace,i=g[2];i?d.widget().delegate(i,h,f):b.bind(h,f)})},_off:function(a,b){b=(b||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,a.unbind(b).undelegate(b)},_delay:function(a,b){function c(){return(typeof a=="string"?d[a]:a).apply(d,arguments)}var d=this;return setTimeout(c,b||0)},_hoverable:function(b){this.hoverable=this.hoverable.add(b),this._on(b,{mouseenter:function(b){a(b.currentTarget).addClass("ui-state-hover")},mouseleave:function(b){a(b.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(b){this.focusable=this.focusable.add(b),this._on(b,{focusin:function(b){a(b.currentTarget).addClass("ui-state-focus")},focusout:function(b){a(b.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.apply(this.element[0],[c].concat(d))===!1||c.isDefaultPrevented())}},a.each({show:"fadeIn",hide:"fadeOut"},function(b,c){a.Widget.prototype["_"+b]=function(d,e,f){typeof e=="string"&&(e={effect:e});var g,h=e?e===!0||typeof e=="number"?c:e.effect||c:b;e=e||{},typeof e=="number"&&(e={duration:e}),g=!a.isEmptyObject(e),e.complete=f,e.delay&&d.delay(e.delay),g&&a.effects&&(a.effects.effect[h]||a.uiBackCompat!==!1&&a.effects[h])?d[b](e):h!==b&&d[h]?d[h](e.duration,e.easing,f):d.queue(function(c){a(this)[b](),f&&f.call(d[0]),c()})}}),a.uiBackCompat!==!1&&(a.Widget.prototype._getCreateOptions=function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]})}(a),function(a,b){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments),this._trigger("init")},_getCreateOptions:function(){var c=this.element,d={};return a.each(this.options,function(a){var e=c.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));e!==b&&(d[a]=e)}),d},enhanceWithin:function(b,c){this.enhance(a(this.options.initSelector,a(b)),c)},enhance:function(b,c){var d,e,f=a(b),g=this;f=a.mobile.enhanceable(f),c&&f.length&&(d=a.mobile.closestPageData(f),e=d&&d.keepNativeSelector()||"",f=f.not(e)),f[this.widgetName]()},raise:function(a){throw"Widget ["+this.widgetName+"]: "+a}})}(a),function(a,b){a.extend(a.mobile,{loadingMessageTextVisible:d,loadingMessageTheme:d,loadingMessage:d,showPageLoadingMsg:function(b,c,d){a.mobile.loading("show",b,c,d)},hidePageLoadingMsg:function(){a.mobile.loading("hide")},loading:function(){this.loaderWidget.loader.apply(this.loaderWidget,arguments)}});var c="ui-loader",e=a("html"),f=a(b);a.widget("mobile.loader",{options:{theme:"a",textVisible:!1,html:"",text:"loading"},defaultHtml:"<div class='"+c+"'>"+"<span class='ui-icon ui-icon-loading'></span>"+"<h1></h1>"+"</div>",fakeFixLoader:function(){var b=a("."+a.mobile.activeBtnClass).first();this.element.css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})},checkLoaderPosition:function(){var b=this.element.offset(),c=f.scrollTop(),d=a.mobile.getScreenHeight();if(b.top<c||b.top-c>d)this.element.addClass("ui-loader-fakefix"),this.fakeFixLoader(),f.unbind("scroll",this.checkLoaderPosition).bind("scroll",this.fakeFixLoader)},resetHtml:function(){this.element.html(a(this.defaultHtml).html())},show:function(b,g,h){var i,j,k,l;this.resetHtml(),a.type(b)==="object"?(l=a.extend({},this.options,b),b=l.theme||a.mobile.loadingMessageTheme):(l=this.options,b=b||a.mobile.loadingMessageTheme||l.theme),j=g||a.mobile.loadingMessage||l.text,e.addClass("ui-loading");if(a.mobile.loadingMessage!==!1||l.html)a.mobile.loadingMessageTextVisible!==d?i=a.mobile.loadingMessageTextVisible:i=l.textVisible,this.element.attr("class",c+" ui-corner-all ui-body-"+b+" ui-loader-"+(i||g||b.text?"verbose":"default")+(l.textonly||h?" ui-loader-textonly":"")),l.html?this.element.html(l.html):this.element.find("h1").text(j),this.element.appendTo(a.mobile.pageContainer),this.checkLoaderPosition(),f.bind("scroll",a.proxy(this.checkLoaderPosition,this))},hide:function(){e.removeClass("ui-loading"),a.mobile.loadingMessage&&this.element.removeClass("ui-loader-fakefix"),a(b).unbind("scroll",a.proxy(this.fakeFixLoader,this)),a(b).unbind("scroll",a.proxy(this.checkLoaderPosition,this))}}),f.bind("pagecontainercreate",function(){a.mobile.loaderWidget=a.mobile.loaderWidget||a(a.mobile.loader.prototype.defaultHtml).loader()})}(a,this),function(a,b,c,d){function x(a){while(a&&typeof a.originalEvent!="undefined")a=a.originalEvent;return a}function y(b,c){var e=b.type,f,g,i,k,l,m,n,o,p;b=a.Event(b),b.type=c,f=b.originalEvent,g=a.event.props,e.search(/^(mouse|click)/)>-1&&(g=j);if(f)for(n=g.length,k;n;)k=g[--n],b[k]=f[k];e.search(/mouse(down|up)|click/)>-1&&!b.which&&(b.which=1);if(e.search(/^touch/)!==-1){i=x(f),e=i.touches,l=i.changedTouches,m=e&&e.length?e[0]:l&&l.length?l[0]:d;if(m)for(o=0,p=h.length;o<p;o++)k=h[o],b[k]=m[k]}return b}function z(b){var c={},d,f;while(b){d=a.data(b,e);for(f in d)d[f]&&(c[f]=c.hasVirtualBinding=!0);b=b.parentNode}return c}function A(b,c){var d;while(b){d=a.data(b,e);if(d&&(!c||d[c]))return b;b=b.parentNode}return null}function B(){r=!1}function C(){r=!0}function D(){v=0,p.length=0,q=!1,C()}function E(){B()}function F(){G(),l=setTimeout(function(){l=0,D()},a.vmouse.resetTimerDuration)}function G(){l&&(clearTimeout(l),l=0)}function H(b,c,d){var e;if(d&&d[b]||!d&&A(c.target,b))e=y(c,b),a(c.target).trigger(e);return e}function I(b){var c=a.data(b.target,f);if(!q&&(!v||v!==c)){var d=H("v"+b.type,b);d&&(d.isDefaultPrevented()&&b.preventDefault(),d.isPropagationStopped()&&b.stopPropagation(),d.isImmediatePropagationStopped()&&b.stopImmediatePropagation())}}function J(b){var c=x(b).touches,d,e;if(c&&c.length===1){d=b.target,e=z(d);if(e.hasVirtualBinding){v=u++,a.data(d,f,v),G(),E(),o=!1;var g=x(b).touches[0];m=g.pageX,n=g.pageY,H("vmouseover",b,e),H("vmousedown",b,e)}}}function K(a){if(r)return;o||H("vmousecancel",a,z(a.target)),o=!0,F()}function L(b){if(r)return;var c=x(b).touches[0],d=o,e=a.vmouse.moveDistanceThreshold,f=z(b.target);o=o||Math.abs(c.pageX-m)>e||Math.abs(c.pageY-n)>e,o&&!d&&H("vmousecancel",b,f),H("vmousemove",b,f),F()}function M(a){if(r)return;C();var b=z(a.target),c;H("vmouseup",a,b);if(!o){var d=H("vclick",a,b);d&&d.isDefaultPrevented()&&(c=x(a).changedTouches[0],p.push({touchID:v,x:c.clientX,y:c.clientY}),q=!0)}H("vmouseout",a,b),o=!1,F()}function N(b){var c=a.data(b,e),d;if(c)for(d in c)if(c[d])return!0;return!1}function O(){}function P(b){var c=b.substr(1);return{setup:function(d,f){N(this)||a.data(this,e,{});var g=a.data(this,e);g[b]=!0,k[b]=(k[b]||0)+1,k[b]===1&&t.bind(c,I),a(this).bind(c,O),s&&(k.touchstart=(k.touchstart||0)+1,k.touchstart===1&&t.bind("touchstart",J).bind("touchend",M).bind("touchmove",L).bind("scroll",K))},teardown:function(d,f){--k[b],k[b]||t.unbind(c,I),s&&(--k.touchstart,k.touchstart||t.unbind("touchstart",J).unbind("touchmove",L).unbind("touchend",M).unbind("scroll",K));var g=a(this),h=a.data(this,e);h&&(h[b]=!1),g.unbind(c,O),N(this)||g.removeData(e)}}}var e="virtualMouseBindings",f="virtualTouchID",g="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),h="clientX clientY pageX pageY screenX screenY".split(" "),i=a.event.mouseHooks?a.event.mouseHooks.props:[],j=a.event.props.concat(i),k={},l=0,m=0,n=0,o=!1,p=[],q=!1,r=!1,s="addEventListener"in c,t=a(c),u=1,v=0,w;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var Q=0;Q<g.length;Q++)a.event.special[g[Q]]=P(g[Q]);s&&c.addEventListener("click",function(b){var c=p.length,d=b.target,e,g,h,i,j,k;if(c){e=b.clientX,g=b.clientY,w=a.vmouse.clickDistanceThreshold,h=d;while(h){for(i=0;i<c;i++){j=p[i],k=0;if(h===d&&Math.abs(j.x-e)<w&&Math.abs(j.y-g)<w||a.data(h,f)===j.touchID){b.preventDefault(),b.stopPropagation();return}}h=h.parentNode}}},!0)}(a,b,c),function(a,b){var d={touch:"ontouchend"in c};a.mobile=a.mobile||{},a.mobile.support=a.mobile.support||{},a.extend(a.support,d),a.extend(a.mobile.support,d)}(a),function(a,b,d){function j(b,c,d){var e=d.type;d.type=c,a.event.handle.call(b,d),d.type=e}a.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)},a.attrFn&&(a.attrFn[c]=!0)});var e=a.mobile.support.touch,f="touchmove scroll",g=e?"touchstart":"mousedown",h=e?"touchend":"mouseup",i=e?"touchmove":"mousemove";a.event.special.scrollstart={enabled:!0,setup:function(){function g(a,c){d=c,j(b,d?"scrollstart":"scrollstop",a)}var b=this,c=a(b),d,e;c.bind(f,function(b){if(!a.event.special.scrollstart.enabled)return;d||g(b,!0),clearTimeout(e),e=setTimeout(function(){g(b,!1)},50)})}},a.event.special.tap={tapholdThreshold:750,setup:function(){var b=this,d=a(b);d.bind("vmousedown",function(e){function i(){clearTimeout(h)}function k(){i(),d.unbind("vclick",l).unbind("vmouseup",i),a(c).unbind("vmousecancel",k)}function l(a){k(),f===a.target&&j(b,"tap",a)}if(e.which&&e.which!==1)return!1;var f=e.target,g=e.originalEvent,h;d.bind("vmouseup",i).bind("vclick",l),a(c).bind("vmousecancel",k),h=setTimeout(function(){j(b,"taphold",a.Event("taphold",{target:f}))},a.event.special.tap.tapholdThreshold)})}},a.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var b=this,c=a(b);c.bind(g,function(b){function j(b){if(!f)return;var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;g={time:(new Date).getTime(),coords:[c.pageX,c.pageY]},Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&b.preventDefault()}var e=b.originalEvent.touches?b.originalEvent.touches[0]:b,f={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(b.target)},g;c.bind(i,j).one(h,function(b){c.unbind(i,j),f&&g&&g.time-f.time<a.event.special.swipe.durationThreshold&&Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(f.coords[1]-g.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&f.origin.trigger("swipe").trigger(f.coords[0]>g.coords[0]?"swipeleft":"swiperight"),f=g=d})})}},a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})}(a,this),function(a,c){a.extend(a.support,{orientation:"orientation"in b&&"onorientationchange"in b})}(a),function(a){a.event.special.throttledresize={setup:function(){a(this).bind("resize",c)},teardown:function(){a(this).unbind("resize",c)}};var b=250,c=function(){f=(new Date).getTime(),g=f-d,g>=b?(d=f,a(this).trigger("throttledresize")):(e&&clearTimeout(e),e=setTimeout(c,b-g))},d=0,e,f,g}(a),function(a,b){function o(){var a=g();a!==h&&(h=a,d.trigger(e))}var d=a(b),e="orientationchange",f,g,h,i,j,k={0:!0,180:!0};if(a.support.orientation){var l=b.innerWidth||a(b).width(),m=b.innerHeight||a(b).height(),n=50;i=l>m&&l-m>n,j=k[b.orientation];if(i&&j||!i&&!j)k={"-90":!0,90:!0}}a.event.special.orientationchange=a.extend({},a.event.special.orientationchange,{setup:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;h=g(),d.bind("throttledresize",o)},teardown:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;d.unbind("throttledresize",o)},add:function(a){var b=a.handler;a.handler=function(a){return a.orientation=g(),b.apply(this,arguments)}}}),a.event.special.orientationchange.orientation=g=function(){var d=!0,e=c.documentElement;return a.support.orientation?d=k[b.orientation]:d=e&&e.clientWidth/e.clientHeight<1.1,d?"portrait":"landscape"},a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.attrFn&&(a.attrFn[e]=!0)}(a,this),function(a,d){var e=a(b),f=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'></div>"),e=a("<body>").append(d);return function(a){if(!(a in b)){var g=c.createElement("style"),h="@media "+a+" { #jquery-mediatest { position:absolute; } }";g.type="text/css",g.styleSheet?g.styleSheet.cssText=h:g.appendChild(c.createTextNode(h)),f.prepend(e).prepend(g),b[a]=d.css("position")==="absolute",e.add(g).remove()}return b[a]}}()}(a),function(a,d){function e(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+" "+h.join(b+" ")+b).split(" ");for(var e in c)if(g[c[e]]!==d)return!0}function m(a,b,d){var e=c.createElement("div"),f=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},g=function(a){return"-"+a.charAt(0).toLowerCase()+a.substr(1)+"-"},i=function(c){var d=g(c)+a+": "+b+";",h=f(c),i=h+f(a);e.setAttribute("style",d),!e.style[i]||(k=!0)},j=d?[d]:h,k;for(var l=0;l<j.length;l++)i(j[l]);return!!k}function n(){var b="transform-3d";return m("perspective","10px","moz")||a.mobile.media("(-"+h.join("-"+b+"),(-")+"-"+b+"),("+b+")")}function o(){var b=location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),d=null,e="",g,h;return c.length?e=c.attr("href"):c=d=a("<base>",{href:b}).appendTo("head"),g=a("<a href='testurl' />").prependTo(f),h=g[0].href,c[0].href=e||location.pathname,d&&d.remove(),h.indexOf(b)===0}function p(){var a=c.createElement("x"),d=c.documentElement,e=b.getComputedStyle,f;return"pointerEvents"in a.style?(a.style.pointerEvents="auto",a.style.pointerEvents="x",d.appendChild(a),f=e&&e(a,"").pointerEvents==="auto",d.removeChild(a),!!f):!1}function q(){var a=c.createElement("div");return typeof a.getBoundingClientRect!="undefined"}var f=a("<body>").prependTo("html"),g=f[0].style,h=["Webkit","Moz","O"],i="palmGetResource"in b,j=b.opera,k=b.operamini&&{}.toString.call(b.operamini)==="[object OperaMini]",l=b.blackberry&&!e("-webkit-transform");a.extend(a.mobile,{browser:{}}),a.mobile.browser.ie=function(){var a=3,b=c.createElement("div"),d=b.all||[];do b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->";while(d[0]);return a>4?a:!a}(),a.extend(a.support,{cssTransitions:"WebKitTransitionEvent"in b||m("transition","height 100ms linear")&&!j,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!e("content"),touchOverflow:!!e("overflowScrolling"),cssTransform3d:n(),boxShadow:!!e("boxShadow")&&!l,scrollTop:("pageXOffset"in b||"scrollTop"in c.documentElement||"scrollTop"in f[0])&&!i&&!k,dynamicBaseTag:o(),cssPointerEvents:p(),boundingRect:q()}),f.remove();var r=function(){var a=b.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();a.mobile.gradeA=function(){return(a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=7)&&(a.support.boundingRect||a.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/)!==null)},a.mobile.ajaxBlacklist=b.blackberry&&!b.WebKitPoint||k||r,r&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")}),a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")}(a),function(a,b){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:!1,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){var a=this;if(a._trigger("beforecreate")===!1)return!1;a.element.attr("tabindex","0").addClass("ui-page ui-body-"+a.options.theme).bind("pagebeforehide",function(){a.removeContainerBackground()}).bind("pagebeforeshow",function(){a.setContainerBackground()})},removeContainerBackground:function(){a.mobile.pageContainer.removeClass("ui-overlay-"+a.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(b){this.options.theme&&a.mobile.pageContainer.addClass("ui-overlay-"+(b||this.options.theme))},keepNativeSelector:function(){var b=this.options,c=b.keepNative&&a.trim(b.keepNative);return c&&b.keepNative!==b.keepNativeDefault?[b.keepNative,b.keepNativeDefault].join(", "):b.keepNativeDefault}})}(a),function(a,b,d){function k(a){return a=a||location.href,"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var e="hashchange",f=c,g,h=a.event.special,i=f.documentMode,j="on"+e in b&&(i===d||i>7);a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.fn[e].delay=50,h[e]=a.extend(h[e],{setup:function(){if(j)return!1;a(g.start)},teardown:function(){if(j)return!1;a(g.stop)}}),g=function(){function n(){var c=k(),d=m(h);c!==h?(l(h=c,d),a(b).trigger(e)):d!==h&&(location.href=location.href.replace(/#.*/,"")+d),g=setTimeout(n,a.fn[e].delay)}var c={},g,h=k(),i=function(a){return a},l=i,m=i;return c.start=function(){g||n()},c.stop=function(){g&&clearTimeout(g),g=d},a.browser.msie&&!j&&function(){var b,d;c.start=function(){b||(d=a.fn[e].src,d=d&&d+k(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){d||l(k()),n()}).attr("src",d||"javascript:0").insertAfter("body")[0].contentWindow,f.onpropertychange=function(){try{event.propertyName==="title"&&(b.document.title=f.title)}catch(a){}})},c.stop=i,m=function(){return k(b.location.href)},l=function(c,d){var g=b.document,h=a.fn[e].domain;c!==d&&(g.title=f.title,g.open(),h&&g.write('<script>document.domain="'+h+'"</script>'),g.close(),b.location.hash=c)}}(),c}()}(a,this),function(a,b,c){var d=function(d){return d===c&&(d=!0),function(c,e,f,g){var h=new a.Deferred,i=e?" reverse":"",j=a.mobile.urlHistory.getActive(),k=j.lastScroll||a.mobile.defaultHomeScroll,l=a.mobile.getScreenHeight(),m=a.mobile.maxTransitionWidth!==!1&&a(b).width()>a.mobile.maxTransitionWidth,n=!a.support.cssTransitions||m||!c||c==="none"||Math.max(a(b).scrollTop(),k)>a.mobile.getMaxScrollForTransition(),o=" ui-page-pre-in",p=function(){a.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+c)},q=function(){a.event.special.scrollstart.enabled=!1,b.scrollTo(0,k),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},r=function(){g.removeClass(a.mobile.activePageClass+" out in reverse "+c).height("")},s=function(){d?g.animationComplete(t):t(),g.height(l+a(b).scrollTop()).addClass(c+" out"+i)},t=function(){g&&d&&r(),u()},u=function(){f.css("z-index",-10),f.addClass(a.mobile.activePageClass+o),a.mobile.focusPage(f),f.height(l+k),q(),f.css("z-index",""),n||f.animationComplete(v),f.removeClass(o).addClass(c+" in"+i),n&&v()},v=function(){d||g&&r(),f.removeClass("out in reverse "+c).height(""),p(),a(b).scrollTop()!==k&&q(),h.resolve(c,e,f,g,!0)};return p(),g&&!n?s():t(),h.promise()}},e=d(),f=d(!1),g=function(){return a.mobile.getScreenHeight()*3};a.mobile.defaultTransitionHandler=e,a.mobile.transitionHandlers={"default":a.mobile.defaultTransitionHandler,sequential:e,simultaneous:f},a.mobile.transitionFallbacks={},a.mobile._maybeDegradeTransition=function(b){return b&&!a.support.cssTransform3d&&a.mobile.transitionFallbacks[b]&&(b=a.mobile.transitionFallbacks[b]),b},a.mobile.getMaxScrollForTransition=a.mobile.getMaxScrollForTransition||g}(a,this),function(a,d){function u(b){!!i&&(!i.closest("."+a.mobile.activePageClass).length||b)&&i.removeClass(a.mobile.activeBtnClass),i=null}function v(){m=!1,l.length>0&&a.mobile.changePage.apply(null,l.pop())}function z(b,c,d,e){c&&c.data("page")._trigger("beforehide",null,{nextPage:b}),b.data("page")._trigger("beforeshow",null,{prevPage:c||a("")}),a.mobile.hidePageLoadingMsg(),d=a.mobile._maybeDegradeTransition(d);var f=a.mobile.transitionHandlers[d||"default"]||a.mobile.defaultTransitionHandler,g=f(d,e,b,c);return g.done(function(){c&&c.data("page")._trigger("hide",null,{nextPage:b}),b.data("page")._trigger("show",null,{prevPage:c||a("")})}),g}function A(){var b=a("."+a.mobile.activePageClass),c=parseFloat(b.css("padding-top")),d=parseFloat(b.css("padding-bottom")),e=parseFloat(b.css("border-top-width")),f=parseFloat(b.css("border-bottom-width"));b.css("min-height",s()-c-d-e-f)}function B(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c),b.page()}function C(a){while(a){if(typeof a.nodeName=="string"&&a.nodeName.toLowerCase()==="a")break;a=a.parentNode}return a}function D(b){var c=a(b).closest(".ui-page").jqmData("url"),d=q.hrefNoHash;if(!c||!h.isPath(c))c=d;return h.makeUrlAbsolute(c,d)}var e=a(b),f=a("html"),g=a("head"),h={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,getLocation:function(a){var b=a?this.parseUrl(a):location,c=this.parseUrl(a||location.href).hash;return c=c==="#"?"":c,b.protocol+"//"+b.host+b.pathname+b.search+c},parseLocation:function(){return this.parseUrl(this.getLocation())},parseUrl:function(b){if(a.type(b)==="object")return b;var c=h.urlParseRE.exec(b||"")||[];return{href:c[0]||"",hrefNoHash:c[1]||"",hrefNoSearch:c[2]||"",domain:c[3]||"",protocol:c[4]||"",doubleSlash:c[5]||"",authority:c[6]||"",username:c[8]||"",password:c[9]||"",host:c[10]||"",hostname:c[11]||"",port:c[12]||"",pathname:c[13]||"",directory:c[14]||"",filename:c[15]||"",search:c[16]||"",hash:c[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;a=a||"",b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"";var c=b?b.split("/"):[],d=a.split("/");for(var e=0;e<d.length;e++){var f=d[e];switch(f){case".":break;case"..":c.length&&c.pop();break;default:c.push(f)}}return"/"+c.join("/")},isSameDomain:function(a,b){return h.parseUrl(a).domain===h.parseUrl(b).domain},isRelativeUrl:function(a){return h.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return h.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!h.isRelativeUrl(a))return a;b===d&&(b=q);var c=h.parseUrl(a),e=h.parseUrl(b),f=c.protocol||e.protocol,g=c.protocol?c.doubleSlash:c.doubleSlash||e.doubleSlash,i=c.authority||e.authority,j=c.pathname!=="",k=h.makePathAbsolute(c.pathname||e.filename,e.pathname),l=c.search||!j&&e.search||"",m=c.hash;return f+g+i+k+l+m},addSearchParams:function(b,c){var d=h.parseUrl(b),e=typeof c=="object"?a.param(c):c,f=d.search||"?";return d.hrefNoSearch+f+(f.charAt(f.length-1)!=="?"?"&":"")+e+(d.hash||"")},convertUrlToDataUrl:function(a){var c=h.parseUrl(a);return h.isEmbeddedPage(c)?c.hash.split(n)[0].replace(/^#/,""):h.isSameDomain(c,q)?c.hrefNoHash.replace(q.domain,"").split(n)[0]:b.decodeURIComponent(a)},get:function(a){return a===d&&(a=h.parseLocation().hash),h.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(n)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(q.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return h.stripHash(a.replace(/\?.*$/,"").replace(n,""))},isHashValid:function(a){return/^#[^#]+$/.test(a)},isExternal:function(a){var b=h.parseUrl(a);return b.protocol&&b.domain!==p.domain?!0:!1},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var c=h.parseUrl(h.makeUrlAbsolute(b,q)),e=c.hrefNoHash===p.hrefNoHash||r&&c.hrefNoHash===q.hrefNoHash,f=a.mobile.firstPage,g=f&&f[0]?f[0].id:d;return e&&(!c.hash||c.hash==="#"||g&&c.hash.replace(/^#/,"")===g)},isEmbeddedPage:function(a){var b=h.parseUrl(a);return b.protocol!==""?b.hash&&(b.hrefNoHash===p.hrefNoHash||r&&b.hrefNoHash===q.hrefNoHash):/^#/.test(b.href)},isPermittedCrossDomainRequest:function(b,c){return a.mobile.allowCrossDomainPages&&b.protocol==="file:"&&c.search(/^https?:/)!==-1}},i=null,j={stack:[],activeIndex:0,getActive:function(){return j.stack[j.activeIndex]},getPrev:function(){return j.stack[j.activeIndex-1]},getNext:function(){return j.stack[j.activeIndex+1]},addNew:function(a,b,c,d,e){j.getNext()&&j.clearForward(),j.stack.push({url:a,transition:b,title:c,pageUrl:d,role:e}),j.activeIndex=j.stack.length-1},clearForward:function(){j.stack=j.stack.slice(0,j.activeIndex+1)},directHashChange:function(b){var c,e,f,g=this.getActive();a.each(j.stack,function(a,d){decodeURIComponent(b.currentUrl)===decodeURIComponent(d.url)&&(c=a<j.activeIndex,e=!c,f=a)}),this.activeIndex=f!==d?f:this.activeIndex,c?(b.either||b.isBack)(!0):e&&(b.either||b.isForward)(!1)},ignoreNextHashChange:!1},k="[tabindex],a,button:visible,select:visible,input",l=[],m=!1,n="&ui-state=dialog",o=g.children("base"),p=h.parseLocation(),q=o.length?h.parseUrl(h.makeUrlAbsolute(o.attr("href"),p.href)):p,r=p.hrefNoHash!==q.hrefNoHash,s=a.mobile.getScreenHeight,t=a.support.dynamicBaseTag?{element:o.length?o:a("<base>",{href:q.hrefNoHash}).prependTo(g),set:function(a){t.element.attr("href",h.makeUrlAbsolute(a,q))},reset:function(){t.element.attr("href",q.hrefNoHash)}}:d;a.mobile.back=function(){var a=b.navigator;this.phonegapNavigationEnabled&&a&&a.app&&a.app.backHistory?a.app.backHistory():b.history.back()},a.mobile.focusPage=function(a){var b=a.find("[autofocus]"),c=a.find(".ui-title:eq(0)");if(b.length){b.focus();return}c.length?c.focus():a.focus()};var w=!0,x,y;x=function(){if(!w)return;var b=a.mobile.urlHistory.getActive();if(b){var c=e.scrollTop();b.lastScroll=c<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:c}},y=function(){setTimeout(x,100)},e.bind(a.support.pushState?"popstate":"hashchange",function(){w=!1}),e.one(a.support.pushState?"popstate":"hashchange",function(){w=!0}),e.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){w=!0,e.unbind("scrollstop",y),e.bind("scrollstop",y)})}),e.bind("scrollstop",y),a.mobile._maybeDegradeTransition=a.mobile._maybeDegradeTransition||function(a){return a},a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd animationend",b):(setTimeout(b,0),a(this))},a.mobile.path=h,a.mobile.base=t,a.mobile.urlHistory=j,a.mobile.dialogHashKey=n,a.mobile.allowCrossDomainPages=!1,a.mobile.getDocumentUrl=function(b){return b?a.extend({},p):p.href},a.mobile.getDocumentBase=function(b){return b?a.extend({},q):q.href},a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c),c.isDefaultPrevented()||b.removeWithDependents()})},a.mobile.loadPage=function(b,c){var e=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),g=null,i=null,j=function(){var b=a.mobile.activePage&&D(a.mobile.activePage);return b||q.hrefNoHash},k=h.makeUrlAbsolute(b,j());f.data&&f.type==="get"&&(k=h.addSearchParams(k,f.data),f.data=d),f.data&&f.type==="post"&&(f.reloadPage=!0);var l=h.getFilePath(k),m=h.convertUrlToDataUrl(k);f.pageContainer=f.pageContainer||a.mobile.pageContainer,g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']"),g.length===0&&m&&!h.isPath(m)&&(g=f.pageContainer.children("#"+m).attr("data-"+a.mobile.ns+"url",m).jqmData("url",m));if(g.length===0)if(a.mobile.firstPage&&h.isFirstPageUrl(l))a.mobile.firstPage.parent().length&&(g=a(a.mobile.firstPage));else if(h.isEmbeddedPage(l))return e.reject(k,c),e.promise();if(g.length){if(!f.reloadPage)return B(g,f.role),e.resolve(k,c,g),e.promise();i=g}var n=f.pageContainer,o=new a.Event("pagebeforeload"),r={url:b,absUrl:k,dataUrl:m,deferred:e,options:f};n.trigger(o,r);if(o.isDefaultPrevented())return e.promise();if(f.showLoadMsg)var s=setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay),u=function(){clearTimeout(s),a.mobile.hidePageLoadingMsg()};return t&&t.reset(),!a.mobile.allowCrossDomainPages&&!h.isSameDomain(p,k)?e.reject(k,c):a.ajax({url:l,type:f.type,data:f.data,dataType:"html",success:function(d,j,n){var o=a("<div></div>"),p=d.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,q=new RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)"),s=new RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");q.test(d)&&RegExp.$1&&s.test(RegExp.$1)&&RegExp.$1&&(b=l=h.getFilePath(a("<div>"+RegExp.$1+"</div>").text())),t&&t.set(l),o.get(0).innerHTML=d,g=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first(),g.length||(g=a("<div data-"+a.mobile.ns+"role='page'>"+d.split(/<\/?body[^>]*>/gmi)[1]+"</div>")),p&&!g.jqmData("title")&&(~p.indexOf("&")&&(p=a("<div>"+p+"</div>").text()),g.jqmData("title",p));if(!a.support.dynamicBaseTag){var v=h.get(l);g.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b);c=c.replace(location.protocol+"//"+location.host+location.pathname,""),/^(\w+:|#|\/)/.test(c)||a(this).attr(b,v+c)})}g.attr("data-"+a.mobile.ns+"url",h.convertUrlToDataUrl(l)).attr("data-"+a.mobile.ns+"external-page",!0).appendTo(f.pageContainer),g.one("pagecreate",a.mobile._bindPageRemove),B(g,f.role),k.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']")),f.showLoadMsg&&u(),r.xhr=n,r.textStatus=j,r.page=g,f.pageContainer.trigger("pageload",r),e.resolve(k,c,g,i)},error:function(b,d,g){t&&t.set(h.get()),r.xhr=b,r.textStatus=d,r.errorThrown=g;var i=new a.Event("pageloadfailed");f.pageContainer.trigger(i,r);if(i.isDefaultPrevented())return;f.showLoadMsg&&(u(),a.mobile.showPageLoadingMsg(a.mobile.pageLoadErrorMessageTheme,a.mobile.pageLoadErrorMessage,!0),setTimeout(a.mobile.hidePageLoadingMsg,1500)),e.reject(k,c)}}),e.promise()},a.mobile.loadPage.defaults={type:"get",data:d,reloadPage:!1,role:d,showLoadMsg:!1,pageContainer:d,loadMsgDelay:50},a.mobile.changePage=function(b,e){if(m){l.unshift(arguments);return}var f=a.extend({},a.mobile.changePage.defaults,e);f.pageContainer=f.pageContainer||a.mobile.pageContainer,f.fromPage=f.fromPage||a.mobile.activePage;var g=f.pageContainer,i=new a.Event("pagebeforechange"),k={toPage:b,options:f};g.trigger(i,k);if(i.isDefaultPrevented())return;b=k.toPage,m=!0;if(typeof b=="string"){a.mobile.loadPage(b,f).done(function(b,c,d,e){m=!1,c.duplicateCachedPage=e,a.mobile.changePage(d,c)}).fail(function(a,b){m=!1,u(!0),v(),f.pageContainer.trigger("pagechangefailed",k)});return}b[0]===a.mobile.firstPage[0]&&!f.dataUrl&&(f.dataUrl=p.hrefNoHash);var o=f.fromPage,q=f.dataUrl&&h.convertUrlToDataUrl(f.dataUrl)||b.jqmData("url"),r=q,s=h.getFilePath(q),t=j.getActive(),w=j.activeIndex===0,x=0,y=c.title,A=f.role==="dialog"||b.jqmData("role")==="dialog";if(o&&o[0]===b[0]&&!f.allowSamePageTransition){m=!1,g.trigger("pagechange",k),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){},isForward:function(){}});return}B(b,f.role),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){x=-1},isForward:function(){x=1}});try{c.activeElement&&c.activeElement.nodeName.toLowerCase()!=="body"?a(c.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(C){}var D=!1;A&&t&&(t.url.indexOf(n)>-1&&!a.mobile.activePage.is(".ui-dialog")&&(f.changeHash=!1,D=!0),q=(t.url||"")+(D?"":n),j.activeIndex===0&&q===j.initialDst&&(q+=n)),f.changeHash!==!1&&q&&(j.ignoreNextHashChange=!0,h.set(q));var E=t?b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText():y;!!E&&y===c.title&&(y=E),b.jqmData("title")||b.jqmData("title",y),f.transition=f.transition||(x&&!w?t.transition:d)||(A?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition),x||(D&&(j.activeIndex=Math.max(0,j.activeIndex-1)),j.addNew(q,f.transition,y,r,f.role)),c.title=j.getActive().title,a.mobile.activePage=b,f.reverse=f.reverse||x<0,z(b,o,f.transition,f.reverse).done(function(c,d,e,h,i){u(),f.duplicateCachedPage&&f.duplicateCachedPage.remove(),i||a.mobile.focusPage(b),v(),g.trigger("pagechange",k)})},a.mobile.changePage.defaults={transition:d,reverse:!1,changeHash:!0,fromHashChange:!1,role:d,duplicateCachedPage:d,pageContainer:d,showLoadMsg:!0,dataUrl:d,fromPage:d,allowSamePageTransition:!1},a.mobile.navreadyDeferred=a.Deferred(),a.mobile.navreadyDeferred.done(function(){a(c).delegate("form","submit",function(b){var c=a(this);if(!a.mobile.ajaxEnabled||c.is(":jqmData(ajax='false')")||!c.jqmHijackable().length)return;var d=c.attr("method"),e=c.attr("target"),f=c.attr("action");f||(f=D(c),f===q.hrefNoHash&&(f=p.hrefNoSearch)),f=h.makeUrlAbsolute(f,D(c));if(h.isExternal(f)&&!h.isPermittedCrossDomainRequest(p,f)||e)return;a.mobile.changePage(f,{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),reverse:c.jqmData("direction")==="reverse",reloadPage:!0}),b.preventDefault()}),a(c).bind("vclick",function(b){if(b.which>1||!a.mobile.linkBindingEnabled)return;var c=C(b.target);if(!a(c).jqmHijackable().length)return;c&&h.parseUrl(c.getAttribute("href")||"#").hash!=="#"&&(u(!0),i=a(c).closest(".ui-btn").not(".ui-disabled"),i.addClass(a.mobile.activeBtnClass))}),a(c).bind("click",function(c){if(!a.mobile.linkBindingEnabled)return;var e=C(c.target),f=a(e),g;if(!e||c.which>1||!f.jqmHijackable().length)return;g=function(){b.setTimeout(function(){u(!0)},200)};if(f.is(":jqmData(rel='back')"))return a.mobile.back(),!1;var i=D(f),j=h.makeUrlAbsolute(f.attr("href")||"#",i);if(!a.mobile.ajaxEnabled&&!h.isEmbeddedPage(j)){g();return}if(j.search("#")!==-1){j=j.replace(/[^#]*#/,"");if(!j){c.preventDefault();return}h.isPath(j)?j=h.makeUrlAbsolute(j,i):j=h.makeUrlAbsolute("#"+j,p.hrefNoHash)}var k=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),l=k||h.isExternal(j)&&!h.isPermittedCrossDomainRequest(p,j);if(l){g();return}var m=f.jqmData("transition"),n=f.jqmData("direction")==="reverse"||f.jqmData("back"),o=f.attr("data-"+a.mobile.ns+"rel")||d;a.mobile.changePage(j,{transition:m,reverse:n,role:o,link:f}),c.preventDefault()}),a(c).delegate(".ui-page","pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),d=c.attr("href");d&&a.inArray(d,b)===-1&&(b.push(d),a.mobile.loadPage(d,{role:c.attr("data-"+a.mobile.ns+"rel")}))})}),a.mobile._handleHashChange=function(c){var e=h.stripHash(c),f=a.mobile.urlHistory.stack.length===0?"none":d,g=new a.Event("navigate"),i={transition:f,changeHash:!1,fromHashChange:!0};0===j.stack.length&&(j.initialDst=e),a.mobile.pageContainer.trigger(g);if(g.isDefaultPrevented())return;if(!a.mobile.hashListeningEnabled||j.ignoreNextHashChange){j.ignoreNextHashChange=!1;return}if(j.stack.length>1&&e.indexOf(n)>-1&&j.initialDst!==e){if(!a.mobile.activePage.is(".ui-dialog")){j.directHashChange({currentUrl:e,isBack:function(){a.mobile.back()},isForward:function(){b.history.forward()}});return}j.directHashChange({currentUrl:e,either:function(b){var c=a.mobile.urlHistory.getActive();e=c.pageUrl,a.extend(i,{role:c.role,transition:c.transition,reverse:b})}})}e?(e=typeof e=="string"&&!h.isPath(e)?h.makeUrlAbsolute("#"+e,q):e,e===h.makeUrlAbsolute("#"+j.initialDst,q)&&j.stack.length&&j.stack[0].url!==j.initialDst.replace(n,"")&&(e=a.mobile.firstPage),a.mobile.changePage(e,i)):a.mobile.changePage(a.mobile.firstPage,i)},e.bind("hashchange",function(b,c){a.mobile._handleHashChange(h.parseLocation().hash)}),a(c).bind("pageshow",A),a(b).bind("throttledresize",A)})}(a),function(a,b){var e={},f=e,g=a(b),h=a.mobile.path.parseLocation(),i=a.Deferred(),j=a.Deferred();a(c).ready(a.proxy(j,"resolve")),a(c).one("mobileinit",a.proxy(i,"resolve")),a.extend(e,{initialFilePath:function(){return h.pathname+h.search}(),hashChangeTimeout:200,hashChangeEnableTimer:d,initialHref:h.hrefNoHash,state:function(){return{hash:a.mobile.path.parseLocation().hash||"#"+f.initialFilePath,title:c.title,initialHref:f.initialHref}},resetUIKeys:function(b){var c=a.mobile.dialogHashKey,d="&"+a.mobile.subPageUrlKey,e=b.indexOf(c);return e>-1?b=b.slice(0,e)+"#"+b.slice(e):b.indexOf(d)>-1&&(b=b.split(d).join("#"+d)),b},nextHashChangePrevented:function(b){a.mobile.urlHistory.ignoreNextHashChange=b,f.onHashChangeDisabled=b},onHashChange:function(b){if(f.onHashChangeDisabled)return;var d,e,g=a.mobile.path.parseLocation().hash,h=a.mobile.path.isPath(g),i=h?a.mobile.path.getLocation():a.mobile.getDocumentUrl();g=h?g.replace("#",""):g,e=f.state(),d=a.mobile.path.makeUrlAbsolute(g,i),h&&(d=f.resetUIKeys(d)),history.replaceState(e,c.title,d)},onPopState:function(b){var c=b.originalEvent.state,d,e,g;c&&(clearTimeout(f.hashChangeEnableTimer),f.nextHashChangePrevented(!1),a.mobile._handleHashChange(c.hash),f.nextHashChangePrevented(!0),f.hashChangeEnableTimer=setTimeout(function(){f.nextHashChangePrevented(!1)},f.hashChangeTimeout))},init:function(){g.bind("hashchange",f.onHashChange),g.bind("popstate",f.onPopState),location.hash===""&&history.replaceState(f.state(),c.title,a.mobile.path.getLocation())}}),a.when(j,i,a.mobile.navreadyDeferred).done(function(){a.mobile.pushStateEnabled&&a.support.pushState&&e.init()})}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flip="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flow="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.pop="fade"}(a,this),function(a,b,c){a.mobile.transitionHandlers.slide=a.mobile.transitionHandlers.simultaneous,a.mobile.transitionFallbacks.slide="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidedown="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidefade="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slideup="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.turn="fade"}(a,this),function(a,b){a.mobile.page.prototype.options.degradeInputs={color:!1,date:!1,datetime:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:"number",search:"text",tel:!1,time:!1,url:!1,week:!1},a(c).bind("pagecreate create",function(b){var c=a.mobile.closestPageData(a(b.target)),d;if(!c)return;d=c.options,a(b.target).find("input").not(c.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";if(d.degradeInputs[c]){var f=a("<div>").html(b.clone()).html(),g=f.indexOf(" type=")>-1,h=g?/\s+type=["']?\w+['"]?/:/\/?>/,i=' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(g?"":">");b.replaceWith(f.replace(h,i))}})})}(a),function(a,b,d){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,c=this.element,d=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),e=a("<div/>",{role:"dialog","class":"ui-dialog-contain ui-corner-all ui-overlay-shadow"});c.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme),c.wrapInner(e).children().find(":jqmData(role='header')").prepend(d).end().children(":first-child").addClass("ui-corner-top").end().children(":last-child").addClass("ui-corner-bottom"),d.bind("click",function(){b.close()}),c.bind("vclick submit",function(b){var c=a(b.target).closest(b.type==="vclick"?"a":"form"),d;c.length&&!c.jqmData("transition")&&(d=a.mobile.urlHistory.getActive()||{},c.attr("data-"+a.mobile.ns+"transition",d.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(b,c){a(this).find("."+a.mobile.activeBtnClass).not(".ui-slider-bg").removeClass(a.mobile.activeBtnClass)}).bind("pagebeforeshow",function(){b._isCloseable=!0,b.options.overlayTheme&&b.element.page("removeContainerBackground").page("setContainerBackground",b.options.overlayTheme)})},close:function(){var b;this._isCloseable&&(this._isCloseable=!1,a.mobile.hashListeningEnabled?a.mobile.back():(b=a.mobile.urlHistory.getPrev().url,a.mobile.path.isPath(b)||(b=a.mobile.path.makeUrlAbsolute("#"+b)),a.mobile.changePage(b,{changeHash:!1,fromHashChange:!0})))}}),a(c).delegate(a.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){a.mobile.dialog.prototype.enhance(this)})}(a,this),function(a,b){a.mobile.page.prototype.options.backBtnText="Back",a.mobile.page.prototype.options.addBackBtn=!1,a.mobile.page.prototype.options.backBtnTheme=null,a.mobile.page.prototype.options.headerTheme="a",a.mobile.page.prototype.options.footerTheme="a",a.mobile.page.prototype.options.contentTheme=null,a(c).bind("pagecreate",function(b){var c=a(b.target),d=c.data("page").options,e=c.jqmData("role"),f=d.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",c).jqmEnhanceable().each(function(){var b=a(this),g=b.jqmData("role"),h=b.jqmData("theme"),i=h||d.contentTheme||e==="dialog"&&f,j,k,l,m;b.addClass("ui-"+g);if(g==="header"||g==="footer"){var n=h||(g==="header"?d.headerTheme:d.footerTheme)||f;b.addClass("ui-bar-"+n).attr("role",g==="header"?"banner":"contentinfo"),g==="header"&&(j=b.children("a, button"),k=j.hasClass("ui-btn-left"),l=j.hasClass("ui-btn-right"),k=k||j.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,l=l||j.eq(1).addClass("ui-btn-right").length),d.addBackBtn&&g==="header"&&a(".ui-page").length>1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!k&&(m=a("<a href='javascript:void(0);' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+d.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",d.backBtnTheme||n).prependTo(b)),b.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading","aria-level":"1"})}else g==="content"&&(i&&b.addClass("ui-body-"+i),b.attr("role","main"))})})}(a),function(a,b){a.fn.fieldcontain=function(a){return this.addClass("ui-field-contain ui-body ui-br").contents().filter(function(){return this.nodeType===3&&!/\S/.test(this.nodeValue)}).remove()},a(c).bind("pagecreate create",function(b){a(":jqmData(role='fieldcontain')",b.target).jqmEnhanceable().fieldcontain()})}(a),function(a,b){a.fn.grid=function(b){return this.each(function(){var c=a(this),d=a.extend({grid:null},b),e=c.children(),f={solo:1,a:2,b:3,c:4,d:5},g=d.grid,h;if(!g)if(e.length<=5)for(var i in f)f[i]===e.length&&(g=i);else g="a",c.addClass("ui-grid-duo");h=f[g],c.addClass("ui-grid-"+g),e.filter(":nth-child("+h+"n+1)").addClass("ui-block-a"),h>1&&e.filter(":nth-child("+h+"n+2)").addClass("ui-block-b"),h>2&&e.filter(":nth-child("+h+"n+3)").addClass("ui-block-c"),h>3&&e.filter(":nth-child("+h+"n+4)").addClass("ui-block-d"),h>4&&e.filter(":nth-child("+h+"n+5)").addClass("ui-block-e")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(":jqmData(role='nojs')",b.target).addClass("ui-nojs")})}(a),function(a,b){function d(a){var b;while(a){b=typeof a.className=="string"&&a.className+" ";if(b&&b.indexOf("ui-btn ")>-1&&b.indexOf("ui-disabled ")<0)break;a=a.parentNode}return a}a.fn.buttonMarkup=function(d){var f=this,g=function(b,c){j.setAttribute("data-"+a.mobile.ns+b,c),i.jqmData(b,c)};d=d&&a.type(d)==="object"?d:{};for(var h=0;h<f.length;h++){var i=f.eq(h),j=i[0],k=a.extend({},a.fn.buttonMarkup.defaults,{icon:d.icon!==b?d.icon:i.jqmData("icon"),iconpos:d.iconpos!==b?d.iconpos:i.jqmData("iconpos"),theme:d.theme!==b?d.theme:i.jqmData("theme")||a.mobile.getInheritedTheme(i,"c"),inline:d.inline!==b?d.inline:i.jqmData("inline"),shadow:d.shadow!==b?d.shadow:i.jqmData("shadow"),corners:d.corners!==b?d.corners:i.jqmData("corners"),iconshadow:d.iconshadow!==b?d.iconshadow:i.jqmData("iconshadow"),mini:d.mini!==b?d.mini:i.jqmData("mini")},d),l="ui-btn-inner",m="ui-btn-text",n,o,p,q,r,s;a.each(k,g),i.jqmData("rel")==="popup"&&i.attr("href")&&(j.setAttribute("aria-haspopup",!0),j.setAttribute("aria-owns",j.getAttribute("href"))),s=a.data(j.tagName==="INPUT"||j.tagName==="BUTTON"?j.parentNode:j,"buttonElements"),s?(j=s.outer,i=a(j),p=s.inner,q=s.text,a(s.icon).remove(),s.icon=null):(p=c.createElement(k.wrapperEls),q=c.createElement(k.wrapperEls)),r=k.icon?c.createElement("span"):null,e&&!s&&e(),k.theme||(k.theme=a.mobile.getInheritedTheme(i,"c")),n="ui-btn ui-btn-up-"+k.theme,n+=k.shadow?" ui-shadow":"",n+=k.corners?" ui-btn-corner-all":"",k.mini!==b&&(n+=k.mini===!0?" ui-mini":" ui-fullsize"),k.inline!==b&&(n+=k.inline===!0?" ui-btn-inline":" ui-btn-block"),k.icon&&(k.icon="ui-icon-"+k.icon,k.iconpos=k.iconpos||"left",o="ui-icon "+k.icon,k.iconshadow&&(o+=" ui-icon-shadow")),k.iconpos&&(n+=" ui-btn-icon-"+k.iconpos,k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText())),l+=k.corners?" ui-btn-corner-all":"",k.iconpos&&k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText()),s&&i.removeClass(s.bcls||""),i.removeClass("ui-link").addClass(n),p.className=l,q.className=m,s||p.appendChild(q);if(r){r.className=o;if(!s||!s.icon)r.innerHTML="&#160;",p.appendChild(r)}while(j.firstChild&&!s)q.appendChild(j.firstChild);s||j.appendChild(p),s={bcls:n,outer:j,inner:p,text:q,icon:r},a.data(j,"buttonElements",s),a.data(p,"buttonElements",s),a.data(q,"buttonElements",s),r&&a.data(r,"buttonElements",s)}return this},a.fn.buttonMarkup.defaults={corners:!0,shadow:!0,iconshadow:!0,wrapperEls:"span"};var e=function(){var b=a.mobile.buttonMarkup.hoverDelay,f,g;a(c).bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(c){var e,h=a(d(c.target)),i=c.originalEvent&&/^touch/.test(c.originalEvent.type),j=c.type;if(h.length){e=h.attr("data-"+a.mobile.ns+"theme");if(j==="vmousedown")i?f=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e);else if(j==="vmousecancel"||j==="vmouseup")h.removeClass("ui-btn-down-"+e).addClass("ui-btn-up-"+e);else if(j==="vmouseover"||j==="focus")i?g=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e);else if(j==="vmouseout"||j==="blur"||j==="scrollstart")h.removeClass("ui-btn-hover-"+e+" ui-btn-down-"+e).addClass("ui-btn-up-"+e),f&&clearTimeout(f),g&&clearTimeout(g)}},"focusin focus":function(b){a(d(b.target)).addClass(a.mobile.focusClass)},"focusout blur":function(b){a(d(b.target)).removeClass(a.mobile.focusClass)}}),e=null};a(c).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",b.target).jqmEnhanceable().not("button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})}(a),function(a,b){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:!0,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,inset:!0,mini:!1,initSelector:":jqmData(role='collapsible')"},_create:function(){var c=this.element,d=this.options,e=c.addClass("ui-collapsible"),f=c.children(d.heading).first(),g=c.jqmData("collapsed-icon")||d.collapsedIcon,h=c.jqmData("expanded-icon")||d.expandedIcon,i=e.wrapInner("<div class='ui-collapsible-content'></div>").children(".ui-collapsible-content"),j=c.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove()),j.length?(d.theme||(d.theme=j.jqmData("theme")||a.mobile.getInheritedTheme(j,"c")),d.contentTheme||(d.contentTheme=j.jqmData("content-theme")),d.collapsedIcon||(d.collapsedIcon=j.jqmData("collapsed-icon")),d.expandedIcon||(d.expandedIcon=j.jqmData("expanded-icon")),d.iconPos||(d.iconPos=j.jqmData("iconpos")),j.jqmData("inset")!==b?d.inset=j.jqmData("inset"):d.inset=!0,d.mini||(d.mini=j.jqmData("mini"))):d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),!d.inset||e.addClass("ui-collapsible-inset"),i.addClass(d.contentTheme?"ui-body-"+d.contentTheme:""),g=c.jqmData("collapsed-icon")||d.collapsedIcon||"plus",h=c.jqmData("expanded-icon")||d.expandedIcon||"minus",f.insertBefore(i).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:!1,corners:!1,iconpos:c.jqmData("iconpos")||d.iconPos||"left",icon:g,mini:d.mini,theme:d.theme}),!d.inset||f.find("a").first().add(".ui-btn-inner",c).addClass("ui-corner-top ui-corner-bottom"),e.bind("expand collapse",function(b){if(!b.isDefaultPrevented()){var c=a(this),k=b.type==="collapse",l=d.contentTheme;b.preventDefault(),f.toggleClass("ui-collapsible-heading-collapsed",k).find(".ui-collapsible-heading-status").text(k?d.expandCueText:d.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-"+h,!k).toggleClass("ui-icon-"+g,k||h===g).end().find("a").first().removeClass(a.mobile.activeBtnClass),c.toggleClass("ui-collapsible-collapsed",k),i.toggleClass("ui-collapsible-content-collapsed",k).attr("aria-hidden",k),l&&!!d.inset&&(!j.length||e.jqmData("collapsible-last"))&&(f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",k),i.toggleClass("ui-corner-bottom",!k)),i.trigger("updatelayout")}}).trigger(d.collapsed?"collapse":"expand"),f.bind("tap",function(b){f.find("a").first().addClass(a.mobile.activeBtnClass)}).bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";e.trigger(b),a.preventDefault(),a.stopPropagation()})}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsible.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.collapsibleset",a.mobile.widget,{options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var c=this.element.addClass("ui-collapsible-set"),d=this.options;d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),d.contentTheme||(d.contentTheme=c.jqmData("content-theme")),c.jqmData("inset")!==b&&(d.inset=c.jqmData("inset")),d.inset=d.inset!==b?d.inset:!0,c.jqmData("collapsiblebound")||c.jqmData("collapsiblebound",!0).bind("expand collapse",function(b){var c=b.type==="collapse",e=a(b.target).closest(".ui-collapsible"),f=e.data("collapsible");e.jqmData("collapsible-last")&&!!d.inset&&(e.find(".ui-collapsible-heading").first().find("a").first().toggleClass("ui-corner-bottom",c).find(".ui-btn-inner").toggleClass("ui-corner-bottom",c),e.find(".ui-collapsible-content").toggleClass("ui-corner-bottom",!c))}).bind("expand",function(b){var c=a(b.target).closest(".ui-collapsible");c.parent().is(":jqmData(role='collapsible-set')")&&c.siblings(".ui-collapsible").trigger("collapse")})},_init:function(){var a=this.element,b=a.children(":jqmData(role='collapsible')"),c=b.filter(":jqmData(collapsed='false')");this.refresh(),c.trigger("expand")},refresh:function(){var b=this.element,c=this.options,d=b.children(":jqmData(role='collapsible')");a.mobile.collapsible.prototype.enhance(d.not(".ui-collapsible")),!c.inset||(d.each(function(){a(this).jqmRemoveData("collapsible-last").find(".ui-collapsible-heading").find("a").first().removeClass("ui-corner-top ui-corner-bottom").find(".ui-btn-inner").removeClass("ui-corner-top ui-corner-bottom")}),d.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),d.last().jqmData("collapsible-last",!0).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"))}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsibleset.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var c=this.element,d=c.find("a"),e=d.filter(":jqmData(icon)").length?this.options.iconpos:b;c.addClass("ui-navbar ui-mini").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid}),d.buttonMarkup({corners:!1,shadow:!1,inline:!0,iconpos:e}),c.delegate("a","vclick",function(b){a(b.target).hasClass("ui-disabled")||(d.removeClass(a.mobile.activeBtnClass),a(this).addClass(a.mobile.activeBtnClass))}),c.closest(".ui-page").bind("pagebeforeshow",function(){d.filter(".ui-state-persist").addClass(a.mobile.activeBtnClass)})}}),a(c).bind("pagecreate create",function(b){a.mobile.navbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){var d={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:!1,initSelector:":jqmData(role='listview')"},_create:function(){var a=this,b="";b+=a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"",a.element.addClass(function(a,c){return c+" ui-listview "+b}),a.refresh(!0)},_removeCorners:function(a,b){var c="ui-corner-top ui-corner-tr ui-corner-tl",d="ui-corner-bottom ui-corner-br ui-corner-bl";a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb")),b==="top"?a.removeClass(c):b==="bottom"?a.removeClass(d):a.removeClass(c+" "+d)},_refreshCorners:function(a){var b,c,d,e;b=this.element.children("li"),c=a||b.filter(":visible").length===0?b.not(".ui-screen-hidden"):b.filter(":visible"),b.filter(".ui-li-last").removeClass("ui-li-last"),this.options.inset?(this._removeCorners(b),d=c.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),e=c.last().addClass("ui-corner-bottom ui-li-last"),e.add(e.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl")):c.last().addClass("ui-li-last"),a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,b,c,d){var e={};e[c]=e[d]=!0;while(a){if(e[a.nodeName])return a;a=a[b]}return null},_getChildrenByTagName:function(b,c,d){var e=[],f={};f[c]=f[d]=!0,b=b.firstChild;while(b)f[b.nodeName]&&e.push(b),b=b.nextSibling;return a(e)},_addThumbClasses:function(b){var c,d,e=b.length;for(c=0;c<e;c++)d=a(this._findFirstElementByTagName(b[c].firstChild,"nextSibling","img","IMG")),d.length&&(d.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(d[0].parentNode,"parentNode","li","LI")).addClass(d.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page"),this._createSubPages();var d=this.options,e=this.element,f=this,g=e.jqmData("dividertheme")||d.dividerTheme,h=e.jqmData("splittheme"),i=e.jqmData("spliticon"),j=this._getChildrenByTagName(e[0],"li","LI"),k=!!a.nodeName(e[0],"ol"),l=!a.support.cssPseudoElement,m=e.attr("start"),n={},o,p,q,r,s,t,u,v,w,x,y,z,A,B;k&&l&&e.find(".ui-li-dec").remove(),k&&(m||m===0?l?u=parseFloat(m):(v=parseFloat(m)-1,e.css("counter-reset","listnumbering "+v)):l&&(u=1)),d.theme||(d.theme=a.mobile.getInheritedTheme(this.element,"c"));for(var C=0,D=j.length;C<D;C++){o=j.eq(C),p="ui-li";if(b||!o.hasClass("ui-li")){q=o.jqmData("theme")||d.theme,r=this._getChildrenByTagName(o[0],"a","A");var E=o.jqmData("role")==="list-divider";r.length&&!E?(y=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:!1,corners:!1,iconpos:"right",icon:r.length>1||y===!1?!1:y||"arrow-r",theme:q}),y!==!1&&r.length===1&&o.addClass("ui-li-has-arrow"),r.first().removeClass("ui-link").addClass("ui-link-inherit"),r.length>1&&(p+=" ui-li-has-alt",s=r.last(),t=h||s.jqmData("theme")||d.splitTheme,B=s.jqmData("icon"),s.appendTo(o).attr("title",s.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:!1,corners:!1,theme:q,icon:!1,iconpos:"notext"}).find(".ui-btn-inner").append(a(c.createElement("span")).buttonMarkup({shadow:!0,corners:!0,theme:t,iconpos:"notext",icon:B||y||i||d.splitIcon})))):E?(p+=" ui-li-divider ui-bar-"+g,o.attr("role","heading"),k&&(m||m===0?l?u=parseFloat(m):(w=parseFloat(m)-1,o.css("counter-reset","listnumbering "+w)):l&&(u=1))):p+=" ui-li-static ui-btn-up-"+q}k&&l&&p.indexOf("ui-li-divider")<0&&(x=p.indexOf("ui-li-static")>0?o:o.find(".ui-link-inherit"),x.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+u++ +". </span>")),n[p]||(n[p]=[]),n[p].push(o[0])}for(p in n)a(n[p]).addClass(p).children(".ui-btn-inner").addClass(p);e.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(e.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all"),this._addThumbClasses(j),this._addThumbClasses(e.find(".ui-link-inherit")),this._refreshCorners(b),this._trigger("afterrefresh")},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,c=b.closest(".ui-page"),e=c.jqmData("url"),f=e||c[0][a.expando],g=b.attr("id"),h=this.options,i="data-"+a.mobile.ns,j=this,k=c.find(":jqmData(role='footer')").jqmData("id"),l;typeof d[f]=="undefined"&&(d[f]=-1),g=g||++d[f],a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=this,f=a(this),j=f.attr("id")||g+"-"+c,m=f.parent(),n=a(f.prevAll().toArray().reverse()),p=n.length?n:a("<span>"+a.trim(m.contents()[0].nodeValue)+"</span>"),q=p.first().getEncodedText(),r=(e||"")+"&"+a.mobile.subPageUrlKey+"="+j,s=f.jqmData("theme")||h.theme,t=f.jqmData("counttheme")||b.jqmData("counttheme")||h.countTheme,u,v;l=!0,u=f.detach().wrap("<div "+i+"role='page' "+i+"url='"+r+"' "+i+"theme='"+s+"' "+i+"count-theme='"+t+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+h.headerTheme+"'><div class='ui-title'>"+q+"</div></div>").after(k?a("<div "+i+"role='footer' "+i+"id='"+k+"'>"):"").parent().appendTo(a.mobile.pageContainer),u.page(),v=m.find("a:first"),v.length||(v=a("<a/>").html(p||q).prependTo(m.empty())),v.attr("href","#"+r)}).listview();if(l&&c.is(":jqmData(external-page='true')")&&c.data("page").options.domCache===!1){var m=function(b,d){var f=d.nextPage,g,h=new a.Event("pageremove");d.nextPage&&(g=f.jqmData("url"),g.indexOf(e+"&"+a.mobile.subPageUrlKey)!==0&&(j.childPages().remove(),c.trigger(h),h.isDefaultPrevented()||c.removeWithDependents()))};c.unbind("pagehide.remove").bind("pagehide.remove",m)}},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}}),a(c).bind("pagecreate create",function(b){a.mobile.listview.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.mobile.listview.prototype.options.autodividers=!1,a.mobile.listview.prototype.options.autodividersSelector=function(a){var b=a.text()||null;return b?(b=b.slice(0,1).toUpperCase(),b):null},a(c).delegate("ul,ol","listviewcreate",function(){var b=a(this),d=b.data("listview");if(!d||!d.options.autodividers)return;var e=function(){b.find("li:jqmData(role='list-divider')").remove();var e=b.find("li"),f=null,g,h;for(var i=0;i<e.length;i++){g=e[i],h=d.options.autodividersSelector(a(g));if(h&&f!==h){var j=c.createElement("li");j.appendChild(c.createTextNode(h)),j.setAttribute("data-"+a.mobile.ns+"role","list-divider"),g.parentNode.insertBefore(j,g)}f=h}},f=function(){b.unbind("listviewafterrefresh",f),e(),d.refresh(),b.bind("listviewafterrefresh",f)};f()})}(a),function(a,b){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var d=this,e=this.element,f=function(a,b){return a.jqmData(b)||a.closest("form, fieldset").jqmData(b)},g=a(e).closest("label"),h=g.length?g:a(e).closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("label").filter("[for='"+e[0].id+"']").first(),i=e[0].type,j=f(e,"mini"),k=i+"-on",l=i+"-off",m=e.parents(":jqmData(type='horizontal')").length?b:l,n=f(e,"iconpos"),o=m?"":" "+a.mobile.activeBtnClass,p="ui-"+k+o,q="ui-"+l,r="ui-icon-"+k,s="ui-icon-"+l;if(i!=="checkbox"&&i!=="radio")return;a.extend(this,{label:h,inputtype:i,checkedClass:p,uncheckedClass:q,checkedicon:r,uncheckedicon:s}),this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),h.buttonMarkup({theme:this.options.theme,icon:m,shadow:!1,mini:j,iconpos:n});var t=c.createElement("div");t.className="ui-"+i,e.add(h).wrapAll(t),h.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(e.is(":disabled")){a.preventDefault();return}return d._cacheVals(),e.prop("checked",i==="radio"&&!0||!e.prop("checked")),e.triggerHandler("click"),d._getInputSet().not(e).prop("checked",!1),d._updateAll(),!1}}),e.bind({vmousedown:function(){d._cacheVals()},vclick:function(){var b=a(this);b.is(":checked")?(b.prop("checked",!0),d._getInputSet().not(b).prop("checked",!1)):b.prop("checked",!1),d._updateAll()},focus:function(){h.addClass(a.mobile.focusClass)},blur:function(){h.removeClass(a.mobile.focusClass)}}),this.refresh()},_cacheVals:function(){this._getInputSet().each(function(){a(this).jqmData("cacheVal",this.checked)})},_getInputSet:function(){return this.inputtype==="checkbox"?this.element:this.element.closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var c=a(this);(this.checked||b.inputtype==="checkbox")&&c.trigger("change")}).checkboxradio("refresh")},refresh:function(){var a=this.element[0],b=this.label,c=b.find(".ui-icon");a.checked?(b.addClass(this.checkedClass).removeClass(this.uncheckedClass),c.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(b.removeClass(this.checkedClass).addClass(this.uncheckedClass),c.removeClass(this.checkedicon).addClass(this.uncheckedicon)),a.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",!0).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",!1).parent().removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,corners:!0,shadow:!0,iconshadow:!0,initSelector:"button, [type='button'], [type='submit'], [type='reset']"},_create:function(){var d=this.element,e,f=this.options,g,h,i=f.inline||d.jqmData("inline"),j=f.mini||d.jqmData("mini"),k="",l;if(d[0].tagName==="A"){d.hasClass("ui-btn")||d.buttonMarkup();return}this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),!~d[0].className.indexOf("ui-btn-left")||(k="ui-btn-left"),!~d[0].className.indexOf("ui-btn-right")||(k="ui-btn-right");if(d.attr("type")==="submit"||d.attr("type")==="reset")k?k+=" ui-submit":k="ui-submit";a("label[for='"+d.attr("id")+"']").addClass("ui-submit"),this.button=a("<div></div>")[d.html()?"html":"text"](d.html()||d.val()).insertBefore(d).buttonMarkup({theme:f.theme,icon:f.icon,iconpos:f.iconpos,inline:i,corners:f.corners,shadow:f.shadow,iconshadow:f.iconshadow,mini:j}).addClass(k).append(d.addClass("ui-btn-hidden")),e=this.button,g=d.attr("type"),h=d.attr("name"),g!=="button"&&g!=="reset"&&h&&d.bind("vclick",function(){l===b&&(l=a("<input>",{type:"hidden",name:d.attr("name"),value:d.attr("value")}).insertBefore(d),a(c).one("submit",function(){l.remove(),l=b}))}),d.bind({focus:function(){e.addClass(a.mobile.focusClass)},blur:function(){e.removeClass(a.mobile.focusClass)}}),this.refresh()},enable:function(){return this.element.attr("disabled",!1),this.button.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.button.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)},refresh:function(){var b=this.element;b.prop("disabled")?this.disable():this.enable(),a(this.button.data("buttonElements").text)[b.html()?"html":"text"](b.html()||b.val())}}),a(c).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.fn.controlgroup=function(b){function c(a,b){a.removeClass("ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow").eq(0).addClass(b[0]).end().last().addClass(b[1]).addClass("ui-controlgroup-last")}return this.each(function(){var d=a(this),e=a.extend({direction:d.jqmData("type")||"vertical",shadow:!1,excludeInvisible:!0,mini:d.jqmData("mini")},b),f=d.children("legend"),g=d.children(".ui-controlgroup-label"),h=d.children(".ui-controlgroup-controls"),i=e.direction==="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"],j=d.find("input").first().attr("type");h.length&&h.contents().unwrap(),d.wrapInner("<div class='ui-controlgroup-controls'></div>"),f.length?(a("<div role='heading' class='ui-controlgroup-label'>"+f.html()+"</div>").insertBefore(d.children(0)),f.remove()):g.length&&d.prepend(g),d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+e.direction),c(d.find(".ui-btn"+(e.excludeInvisible?":visible":"")).not(".ui-slider-handle"),i),c(d.find(".ui-btn-inner"),i),e.shadow&&d.addClass("ui-shadow"),e.mini&&d.addClass("ui-mini")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(b.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})}(a),function(a,d){function e(a,b,c,d){var e=d;return a<b?e=c+(a-b)/2:e=Math.min(Math.max(c,d-b/2),c+a-b),e}function f(){var c=a(b);return{x:c.scrollLeft(),y:c.scrollTop(),cx:b.innerWidth||c.width(),cy:b.innerHeight||c.height()}}a.widget("mobile.popup",a.mobile.widget,{options:{theme:null,overlayTheme:null,shadow:!0,corners:!0,transition:"none",positionTo:"origin",tolerance:null,initSelector:":jqmData(role='popup')",closeLinkSelector:"a:jqmData(rel='back')",closeLinkEvents:"click.popup",navigateEvents:"navigate.popup",closeEvents:"navigate.popup pagebeforechange.popup",history:!a.mobile.browser.ie},_eatEventAndClose:function(a){return a.preventDefault(),a.stopImmediatePropagation(),this.close(),!1},_resizeScreen:function(){var a=this._ui.container.outerHeight(!0);this._ui.screen.removeAttr("style"),a>this._ui.screen.height()&&this._ui.screen.height(a)},_handleWindowKeyUp:function(b){if(this._isOpen&&b.keyCode===a.mobile.keyCode.ESCAPE)return this._eatEventAndClose(b)},_maybeRefreshTimeout:function(){var b=f();if(this._resizeData){if(b.x===this._resizeData.winCoords.x&&b.y===this._resizeData.winCoords.y&&b.cx===this._resizeData.winCoords.cx&&b.cy===this._resizeData.winCoords.cy)return!1;clearTimeout(this._resizeData.timeoutId)}return this._resizeData={timeoutId:setTimeout(a.proxy(this,"_resizeTimeout"),200),winCoords:b},!0},_resizeTimeout:function(){this._maybeRefreshTimeout()||(this._trigger("beforeposition"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(this._placementCoords(this._desiredCoords(d,d,"window"))),this._resizeScreen(),this._resizeData=null,this._orientationchangeInProgress=!1)},_handleWindowResize:function(a){this._isOpen&&this._maybeRefreshTimeout()},_handleWindowOrientationchange:function(a){this._orientationchangeInProgress||(this._ui.container.addClass("ui-selectmenu-hidden").removeAttr("style"),this._orientationchangeInProgress=!0)},_create:function(){var c={screen:a("<div class='ui-screen-hidden ui-popup-screen'></div>"),placeholder:a("<div style='display: none;'><!-- placeholder --></div>"),container:a("<div class='ui-popup-container ui-selectmenu-hidden'></div>")},e=this.element.closest(".ui-page"),f=this.element.attr("id"),g=this;this.options.history=this.options.history&&a.mobile.ajaxEnabled&&a.mobile.hashListeningEnabled,e.length===0&&(e=a("body")),this.options.container=this.options.container||a.mobile.pageContainer,e.append(c.screen),c.container.insertAfter(c.screen),c.placeholder.insertAfter(this.element),f&&(c.screen.attr("id",f+"-screen"),c.container.attr("id",f+"-popup"),c.placeholder.html("<!-- placeholder for "+f+" -->")),c.container.append(this.element),this.element.addClass("ui-popup"),a.extend(this,{_page:e,_ui:c,_fallbackTransition:"",_currentTransition:!1,_prereqs:null,_isOpen:!1,_tolerance:null,_resizeData:null,_orientationchangeInProgress:!1,_globalHandlers:[{src:a(b),handler:{orientationchange:a.proxy(this,"_handleWindowOrientationchange"),resize:a.proxy(this,"_handleWindowResize"),keyup:a.proxy(this,"_handleWindowKeyUp")}}]}),a.each(this.options,function(a,b){g.options[a]=d,g._setOption(a,b,!0)}),c.screen.bind("vclick",a.proxy(this,"_eatEventAndClose")),a.each(this._globalHandlers,function(a,b){b.src.bind(b.handler)})},_applyTheme:function(a,b,c){var d=(a.attr("class")||"").split(" "),e=!0,f=null,g,h=String(b);while(d.length>0){f=d.pop(),g=(new RegExp("^ui-"+c+"-([a-z])$")).exec(f);if(g&&g.length>1){f=g[1];break}f=null}b!==f&&(a.removeClass("ui-"+c+"-"+f),b!==null&&b!=="none"&&a.addClass("ui-"+c+"-"+h))},_setTheme:function(a){this._applyTheme(this.element,a,"body")},_setOverlayTheme:function(a){this._applyTheme(this._ui.screen,a,"overlay"),this._isOpen&&this._ui.screen.addClass("in")},_setShadow:function(a){this.element.toggleClass("ui-overlay-shadow",a)},_setCorners:function(a){this.element.toggleClass("ui-corner-all",a)},_applyTransition:function(b){this._ui.container.removeClass(this._fallbackTransition),b&&b!=="none"&&(this._fallbackTransition=a.mobile._maybeDegradeTransition(b),this._ui.container.addClass(this._fallbackTransition))},_setTransition:function(a){this._currentTransition||this._applyTransition(a)},_setTolerance:function(b){var c={t:30,r:15,b:30,l:15};if(b){var d=String(b).split(",");a.each(d,function(a,b){d[a]=parseInt(b,10)});switch(d.length){case 1:isNaN(d[0])||(c.t=c.r=c.b=c.l=d[0]);break;case 2:isNaN(d[0])||(c.t=c.b=d[0]),isNaN(d[1])||(c.l=c.r=d[1]);break;case 4:isNaN(d[0])||(c.t=d[0]),isNaN(d[1])||(c.r=d[1]),isNaN(d[2])||(c.b=d[2]),isNaN(d[3])||(c.l=d[3]);break;default:}}this._tolerance=c},_setOption:function(b,c){var e,f="_set"+b.charAt(0).toUpperCase()+b.slice(1);this[f]!==d&&this[f](c),e=["initSelector","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","history","container"],a.mobile.widget.prototype._setOption.apply(this,arguments),a.inArray(b,e)===-1&&this.element.attr("data-"+(a.mobile.ns||"")+b.replace(/([A-Z])/,"-$1").toLowerCase(),c)},_placementCoords:function(a){var b=f(),d={x:this._tolerance.l,y:b.y+this._tolerance.t,cx:b.cx-this._tolerance.l-this._tolerance.r,cy:b.cy-this._tolerance.t-this._tolerance.b},g,h;this._ui.container.css("max-width",d.cx),g={cx:this._ui.container.outerWidth(!0),cy:this._ui.container.outerHeight(!0)},h={x:e(d.cx,g.cx,d.x,a.x),y:e(d.cy,g.cy,d.y,a.y)},h.y=Math.max(0,h.y);var i=c.documentElement,j=c.body,k=Math.max(i.clientHeight,j.scrollHeight,j.offsetHeight,i.scrollHeight,i.offsetHeight);return h.y-=Math.min(h.y,Math.max(0,h.y+g.cy-k)),{left:h.x,top:h.y}},_createPrereqs:function(b,c,d){var e=this,f;f={screen:a.Deferred(),container:a.Deferred()},f.screen.then(function(){f===e._prereqs&&b()}),f.container.then(function(){f===e._prereqs&&c()}),a.when(f.screen,f.container).done(function(){f===e._prereqs&&(e._prereqs=null,d())}),e._prereqs=f},_animate:function(b){this._ui.screen.removeClass(b.classToRemove).addClass(b.screenClassToAdd),b.prereqs.screen.resolve(),b.transition&&b.transition!=="none"?(b.applyTransition&&this._applyTransition(b.transition),this._ui.container.animationComplete(a.proxy(b.prereqs.container,"resolve")).addClass(b.containerClassToAdd).removeClass(b.classToRemove)):b.prereqs.container.resolve()},_desiredCoords:function(b,c,d){var e=null,g,h=f();if(d&&d!=="origin")if(d==="window")b=h.cx/2+h.x,c=h.cy/2+h.y;else{try{e=a(d)}catch(i){e=null}e&&(e.filter(":visible"),e.length===0&&(e=null))}e&&(g=e.offset(),b=g.left+e.outerWidth()/2,c=g.top+e.outerHeight()/2);if(a.type(b)!=="number"||isNaN(b))b=h.cx/2+h.x;if(a.type(c)!=="number"||isNaN(c))c=h.cy/2+h.y;return{x:b,y:c}},_openPrereqsComplete:function(){var a=this;a._ui.container.addClass("ui-popup-active"),a._isOpen=!0,a._resizeScreen(),setTimeout(function(){a._ui.container.attr("tabindex","0").focus(),a._trigger("afteropen")})},_open:function(c){var d,e,f=function(){var a=b,c=navigator.userAgent,d=c.match(/AppleWebKit\/([0-9\.]+)/),e=!!d&&d[1],f=c.match(/Android (\d+(?:\.\d+))/),g=!!f&&f[1],h=c.indexOf("Chrome")>-1;return f!==null&&g==="4.0"&&e&&e>534.13&&!h?!0:!1}();c=c||{},e=c.transition||this.options.transition,this._trigger("beforeposition"),d=this._placementCoords(this._desiredCoords(c.x,c.y,c.positionTo||this.options.positionTo||"origin")),this._createPrereqs(a.noop,a.noop,a.proxy(this,"_openPrereqsComplete")),e?(this._currentTransition=e,this._applyTransition(e)):e=this.options.transition,this.options.theme||this._setTheme(this._page.jqmData("theme")||a.mobile.getInheritedTheme(this._page,"c")),this._ui.screen.removeClass("ui-screen-hidden"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(d),this.options.overlayTheme&&f&&this.element.closest(".ui-page").addClass("ui-popup-open"),this._animate({additionalCondition:!0,transition:e,classToRemove:"",screenClassToAdd:"in",containerClassToAdd:"in",applyTransition:!1,prereqs:this._prereqs})},_closePrereqScreen:function(){this._ui.screen.removeClass("out").addClass("ui-screen-hidden")},_closePrereqContainer:function(){this._ui.container.removeClass("reverse out").addClass("ui-selectmenu-hidden").removeAttr("style")},_closePrereqsDone:function(){var b=this,c=b.options;b._ui.container.removeAttr("tabindex"),c.container.unbind(c.closeEvents),b.element.undelegate(c.closeLinkSelector,c.closeLinkEvents),a.mobile.popup.active=d,b._trigger("afterclose")},_close:function(){this._ui.container.removeClass("ui-popup-active"),this._page.removeClass("ui-popup-open"),this._isOpen=!1,this._createPrereqs(a.proxy(this,"_closePrereqScreen"),a.proxy(this,"_closePrereqContainer"),a.proxy(this,"_closePrereqsDone")),this._animate({additionalCondition:this._ui.screen.hasClass("in"),transition:this._currentTransition||this.options.transition,classToRemove:"in",screenClassToAdd:"out",containerClassToAdd:"reverse out",applyTransition:!0,prereqs:this._prereqs})},_destroy:function(){var b=this;b._close(),b._setTheme("none"),b.element.insertAfter(b._ui.placeholder).removeClass("ui-popup ui-overlay-shadow ui-corner-all"),b._ui.screen.remove(),b._ui.container.remove(),b._ui.placeholder.remove(),a.each(b._globalHandlers,function(b,c){a.each(c.handler,function(a,b){c.src.unbind(a,b)})})},_bindContainerClose:function(){var b=this;b.options.container.one(b.options.closeEvents,a.proxy(b._close,b))},open:function(b){var c=this,e=this.options,f,g,h,i,j,k;if(a.mobile.popup.active)return;a.mobile.popup.active=this;if(!e.history){c._open(b),c._bindContainerClose(),c.element.delegate(e.closeLinkSelector,e.closeLinkEvents,function(a){return c._close(),!1});return}g=a.mobile.dialogHashKey,h=a.mobile.activePage,i=h.is(".ui-dialog"),f=a.mobile.urlHistory.getActive().url,j=f.indexOf(g)>-1&&!i,k=a.mobile.urlHistory;if(j){c._open(b),c._bindContainerClose();return}f.indexOf(g)===-1&&!i?f=f+g:f=a.mobile.path.parseLocation().hash+g,k.activeIndex===0&&f===k.initialDst&&(f+=g),e.container.one(e.navigateEvents,function(a){a.preventDefault(),c._open(b),c._bindContainerClose()}),k.ignoreNextHashChange=i,k.addNew(f,d,d,d,"dialog"),a.mobile.path.set(f)},close:function(){if(!a.mobile.popup.active)return;this.options.history?a.mobile.back():this._close()}}),a.mobile.popup.handleLink=function(b){var c=b.closest(":jqmData(role='page')"),d=c.length===0?a("body"):c,e=a(a.mobile.path.parseUrl(b.attr("href")).hash,d[0]),f;e.data("popup")&&(f=b.offset(),e.popup("open",{x:f.left+b.outerWidth()/2,y:f.top+b.outerHeight()/2,transition:b.jqmData("transition"),positionTo:b.jqmData("position-to"),link:b})),setTimeout(function(){b.removeClass(a.mobile.activeBtnClass)},300)},a(c).bind("pagebeforechange",function(b,c){c.options.role==="popup"&&(a.mobile.popup.handleLink(c.options.link),b.preventDefault())}),a(c).bind("pagecreate create",function(b){a.mobile.popup.prototype.enhanceWithin(b.target,!0)})}(a),function(a){var b=a("meta[name=viewport]"),c=b.attr("content"),d=c+",maximum-scale=1, user-scalable=no",e=c+",maximum-scale=10, user-scalable=yes",f=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(c);a.mobile.zoom=a.extend({},{enabled:!f,locked:!1,disable:function(c){!f&&!a.mobile.zoom.locked&&(b.attr("content",d),a.mobile.zoom.enabled=!1,a.mobile.zoom.locked=c||!1)},enable:function(c){!f&&(!a.mobile.zoom.locked||c===!0)&&(b.attr("content",e),a.mobile.zoom.enabled=!0,a.mobile.zoom.locked=!1)},restore:function(){f||(b.attr("content",c),a.mobile.zoom.enabled=!0)}})}(a),function(a,d){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",clearSearchButtonText:"clear text",disabled:!1},_create:function(){function m(){setTimeout(function(){l.toggleClass("ui-input-clear-hidden",!e.val())},0)}var d=this,e=this.element,f=this.options,g=f.theme||a.mobile.getInheritedTheme(this.element,"c"),h=" ui-body-"+g,i=e.jqmData("mini")===!0,j=i?" ui-mini":"",k,l;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text"),k=e.addClass("ui-input-text ui-body-"+g),typeof e[0].autocorrect!="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off")),e.is("[type='search'],:jqmData(type='search')")?(k=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+h+j+"'></div>").parent(),l=a("<a href='#' class='ui-input-clear' title='"+f.clearSearchButtonText+"'>"+f.clearSearchButtonText+"</a>").bind("click",function(a){e.val("").focus().trigger("change"),l.addClass("ui-input-clear-hidden"),a.preventDefault()}).appendTo(k).buttonMarkup({icon:"delete",iconpos:"notext",corners:!0,shadow:!0,mini:i}),m(),e.bind("paste cut keyup focus change blur",m)):e.addClass("ui-corner-all ui-shadow-inset"+h+j),e.focus(function(){k.addClass(a.mobile.focusClass)}).blur(function(){k.removeClass(a.mobile.focusClass)}).bind("focus",function(){f.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("blur",function(){f.preventFocusZoom&&a.mobile.zoom.enable(!0)});if(e.is("textarea")){var n=15,o=100,p;this._keyup=function(){var a=e[0].scrollHeight,b=e[0].clientHeight;b<a&&e.height(a+n)},e.keyup(function(){clearTimeout(p),p=setTimeout(d._keyup,o)}),this._on(a(c),{pagechange:"_keyup"}),a.trim(e.val())&&this._on(a(b),{load:"_keyup"})}e.attr("disabled")&&this.disable()},disable:function(){var a;return this.element.attr("disabled",!0).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.addClass("ui-disabled"),this._setOption("disabled",!0)},enable:function(){var a;return this.element.attr("disabled",!1).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.removeClass("ui-disabled"),this._setOption("disabled",!1)}}),a(c).bind("pagecreate create",function(b){a.mobile.textinput.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.mobile.listview.prototype.options.filter=!1,a.mobile.listview.prototype.options.filterPlaceholder="Filter items...",a.mobile.listview.prototype.options.filterTheme="c";var d=function(a,b,c){return a.toString().toLowerCase().indexOf(b)===-1};a.mobile.listview.prototype.options.filterCallback=d,a(c).delegate(":jqmData(role='listview')","listviewcreate",function(){var b=a(this),c=b.data("listview");if(!c.options.filter)return;var e=a("<form>",{"class":"ui-listview-filter ui-bar-"+c.options.filterTheme,role:"search"}),f=a("<input>",{placeholder:c.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var e=a(this),f=this.value.toLowerCase(),g=null,h=e.jqmData("lastval")+"",i=!1,j="",k,l=c.options.filterCallback!==d;c._trigger("beforefilter","beforefilter",{input:this}),e.jqmData("lastval",f),l||f.length<h.length||f.indexOf(h)!==0?g=b.children():g=b.children(":not(.ui-screen-hidden)");if(f){for(var m=g.length-1;m>=0;m--)k=a(g[m]),j=k.jqmData("filtertext")||k.text(),k.is("li:jqmData(role=list-divider)")?(k.toggleClass("ui-filter-hidequeue",!i),i=!1):c.options.filterCallback(j,f,k)?k.toggleClass("ui-filter-hidequeue",!0):i=!0;g.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",!1),g.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",!0).toggleClass("ui-filter-hidequeue",!1)}else g.toggleClass("ui-screen-hidden",!1);c._refreshCorners()}).appendTo(e).textinput();c.options.inset&&e.addClass("ui-listview-filter-inset"),e.bind("submit",function(){return!1}).insertBefore(b)})}(a),function(a,d){a.widget("mobile.slider",a.mobile.widget,{widgetEventPrefix:"slide",options:{theme:null,trackTheme:null,disabled:!1,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:!1},_create:function(){var e=this,f=this.element,g=a.mobile.getInheritedTheme(f,"c"),h=this.options.theme||g,i=this.options.trackTheme||g,j=f[0].nodeName.toLowerCase(),k=j==="select"?"ui-slider-switch":"",l=f.attr("id"),m=a("[for='"+l+"']"),n=m.attr("id")||l+"-label",o=m.attr("id",n),p=function(){return j==="input"?parseFloat(f.val()):f[0].selectedIndex},q=j==="input"?parseFloat(f.attr("min")):0,r=j==="input"?parseFloat(f.attr("max")):f.find("option").length-1,s=b.parseFloat(f.attr("step")||1),t=this.options.inline||f.jqmData("inline")===!0?" ui-slider-inline":"",u=this.options.mini||f.jqmData("mini")?" ui-slider-mini":"",v=c.createElement("a"),w=a(v),x=c.createElement("div"),y=a(x),z=f.jqmData("highlight")&&j!=="select"?function(){var b=c.createElement("div");return b.className="ui-slider-bg "+a.mobile.activeBtnClass+" ui-btn-corner-all",a(b).prependTo(y)}():!1,A;this._type=j,v.setAttribute("href","#"),x.setAttribute("role","application"),x.className=["ui-slider ",k," ui-btn-down-",i," ui-btn-corner-all",t,u].join(""),v.className="ui-slider-handle",x.appendChild(v),w.buttonMarkup({corners:!0,theme:h,shadow:!0}).attr({role:"slider","aria-valuemin":q,"aria-valuemax":r,"aria-valuenow":p(),"aria-valuetext":p(),title:p(),"aria-labelledby":n}),a.extend(this,{slider:y,handle:w,valuebg:z,dragging:!1,beforeStart:null,userModified:!1,mouseMoved:!1});if(j==="select"){var B=c.createElement("div");B.className="ui-slider-inneroffset";for(var C=0,D=x.childNodes.length;C<D;C++)B.appendChild(x.childNodes[C]);x.appendChild(B),w.addClass("ui-slider-handle-snapping"),A=f.find("option");for(var E=0,F=A.length;E<F;E++){var G=E?"a":"b",H=E?" "+a.mobile.activeBtnClass:" ui-btn-down-"+i,I=c.createElement("div"),J=c.createElement("span");J.className=["ui-slider-label ui-slider-label-",G,H," ui-btn-corner-all"].join(""),J.setAttribute("role","img"),J.appendChild(c.createTextNode(A[E].innerHTML)),a(J).prependTo(y)}e._labels=a(".ui-slider-label",y)}o.addClass("ui-slider"),f.addClass(j==="input"?"ui-slider-input":"ui-slider-switch").change(function(){e.mouseMoved||e.refresh(p(),!0)}).keyup(function(){e.refresh(p(),!0,!0)}).blur(function(){e.refresh(p(),!0)}),this._preventDocumentDrag=function(a){if(e.dragging&&!e.options.disabled)return e.mouseMoved=!0,j==="select"&&w.removeClass("ui-slider-handle-snapping"),e.refresh(a),e.userModified=e.beforeStart!==f[0].selectedIndex,!1},this._on(a(c),{vmousemove:this._preventDocumentDrag}),f.bind("vmouseup",a.proxy(e._checkedRefresh,e)),y.bind("vmousedown",function(a){return e.options.disabled?!1:(e.dragging=!0,e.userModified=!1,e.mouseMoved=!1,j==="select"&&(e.beforeStart=f[0].selectedIndex),e.refresh(a),e._trigger("start"),!1)}).bind("vclick",!1),this._sliderMouseUp=function(){if(e.dragging)return e.dragging=!1,j==="select"&&(w.addClass("ui-slider-handle-snapping"),e.mouseMoved?e.userModified?e.refresh(e.beforeStart===0?1:0):e.refresh(e.beforeStart):e.refresh(e.beforeStart===0?1:0)),e.mouseMoved=!1,e._trigger("stop"),!1},this._on(y.add(c),{vmouseup:this._sliderMouseUp}),y.insertAfter(f),j==="select"&&this.handle.bind({focus:function(){y.addClass(a.mobile.focusClass)},blur:function(){y.removeClass(a.mobile.focusClass)}}),this.handle.bind({vmousedown:function(){a(this).focus()},vclick:!1,keydown:function(b){var c=p();if(e.options.disabled)return;switch(b.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.preventDefault(),e._keySliding||(e._keySliding=!0,a(this).addClass("ui-state-active"))}switch(b.keyCode){case a.mobile.keyCode.HOME:e.refresh(q);break;case a.mobile.keyCode.END:e.refresh(r);break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:e.refresh(c+s);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:e.refresh(c-s)}},keyup:function(b){e._keySliding&&(e._keySliding=!1,a(this).removeClass("ui-state-active"))}}),this.refresh(d,d,!0)},_checkedRefresh:function(){this.value!=this._value()&&this.refresh(this._value())},_value:function(){return this._type==="input"?parseFloat(this.element.val()):this.element[0].selectedIndex},refresh:function(b,c,d){(this.options.disabled||this.element.attr("disabled"))&&this.disable(),this.value=this._value();var e=this.element,f,g=e[0].nodeName.toLowerCase(),h=g==="input"?parseFloat(e.attr("min")):0,i=g==="input"?parseFloat(e.attr("max")):e.find("option").length-1,j=g==="input"&&parseFloat(e.attr("step"))>0?parseFloat(e.attr("step")):1;if(typeof b=="object"){var k=b,l=8;if(!this.dragging||k.pageX<this.slider.offset().left-l||k.pageX>this.slider.offset().left+this.slider.width()+l)return;f=Math.round((k.pageX-this.slider.offset().left)/this.slider.width()*100)}else b==null&&(b=g==="input"?parseFloat(e.val()||0):e[0].selectedIndex),f=(parseFloat(b)-h)/(i-h)*100;if(isNaN(f))return;f<0&&(f=0),f>100&&(f=100);var m=f/100*(i-h)+h,n=(m-h)%j,o=m-n;Math.abs(n)*2>=j&&(o+=n>0?j:-j),m=parseFloat(o.toFixed(5)),m<h&&(m=h),m>i&&(m=i),this.handle.css("left",f+"%"),this.handle.attr({"aria-valuenow":g==="input"?m:e.find("option").eq(m).attr("value"),"aria-valuetext":g==="input"?m:e.find("option").eq(m).getEncodedText(),title:g==="input"?m:e.find("option").eq(m).getEncodedText()}),this.valuebg&&this.valuebg.css("width",f+"%");if(this._labels){var p=this.handle.width()/this.slider.width()*100,q=f&&p+(100-p)*f/100,r=f===100?0:Math.min(p+100-q,100);this._labels.each(function(){var b=a(this).is(".ui-slider-label-a");a(this).width((b?q:r)+"%")})}if(!d){var s=!1;g==="input"?(s=e.val()!==m,e.val(m)):(s=e[0].selectedIndex!==m,e[0].selectedIndex=m),!c&&s&&e.trigger("change")}},enable:function(){return this.element.attr("disabled",!1),this.slider.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.slider.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)}}),a(c).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:!1,icon:"arrow-d",iconpos:"right",inline:!1,corners:!0,shadow:!0,iconshadow:!0,overlayTheme:"a",hidePlaceholderMenuItems:!0,closeText:"Close",nativeMenu:!0,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"select:not( :jqmData(role='slider') )",mini:!1},_button:function(){return a("<div/>")},_setDisabled:function(a){return this.element.attr("disabled",a),this.button.attr("aria-disabled",a),this._setOption("disabled",a)},_focusButton:function(){var a=this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var b="";!~this.element[0].className.indexOf("ui-btn-left")||(b=" ui-btn-left"),!~this.element[0].className.indexOf("ui-btn-right")||(b=" ui-btn-right"),this.select=this.element.wrap("<div class='ui-select"+b+"'>"),this.selectID=this.select.attr("id"),this.label=a("label[for='"+this.selectID+"']").addClass("ui-select"),this.isMultiple=this.select[0].multiple,this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.select,"c"))},_create:function(){this._preExtension(),this._trigger("beforeCreate"),this.button=this._button();var c=this,d=this.options,e=d.inline||this.select.jqmData("inline"),f=d.mini||this.select.jqmData("mini"),g=d.icon?d.iconpos||this.select.jqmData("iconpos"):!1,h=this.select[0].selectedIndex===-1?0:this.select[0].selectedIndex,i=this.button.insertBefore(this.select).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:g,inline:e,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow,mini:f});this.setButtonText(),d.nativeMenu&&b.opera&&b.opera.version&&i.addClass("ui-select-nativeonly"),this.isMultiple&&(this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(i.addClass("ui-li-has-count"))),(d.disabled||this.element.attr("disabled"))&&this.disable(),this.select.change(function(){c.refresh()}),this.build()},build:function(){var b=this;this.select.appendTo(b.button).bind("vmousedown",function(){b.button.addClass(a.mobile.activeBtnClass)}).bind("focus",function(){b.button.addClass(a.mobile.focusClass)}).bind("blur",function(){b.button.removeClass(a.mobile.focusClass)}).bind("focus vmouseover",function(){b.button.trigger("vmouseover")}).bind("vmousemove",function(){b.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){b.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",function(){b.button.removeClass("ui-btn-down-"+b.options.theme)}),b.button.bind("vmousedown",function(){b.options.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("mouseup",function(){b.options.preventFocusZoom&&setTimeout(function(){a.mobile.zoom.enable(!0)},0)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var b=this,d=this.selected(),e=this.placeholder,f=a(c.createElement("span"));this.button.find(".ui-btn-text").html(function(){return d.length?e=d.map(function(){return a(this).text()}).get().join(", "):e=b.placeholder,f.text(e).addClass(b.select.attr("class")).addClass(d.attr("class"))})},setButtonCount:function(){var a=this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText(),this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(!0),this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(!1),this.button.removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.selectmenu.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){var e=function(d){var e=d.select,f=d.selectID,g=d.label,h=d.select.closest(".ui-page"),i=d._selectOptions(),j=d.isMultiple=d.select[0].multiple,k=f+"-button",l=f+"-menu",m=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+d.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+d.options.overlayTheme+"'>"+"<div data-"+a.mobile.ns+"role='header'>"+"<div class='ui-title'>"+g.getEncodedText()+"</div>"+"</div>"+"<div data-"+a.mobile.ns+"role='content'></div>"+"</div>"),n=a("<div>",{"class":"ui-selectmenu"}).insertAfter(d.select).popup({theme:"a"}),o=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",d.options.theme).appendTo(n),p=a("<div>",{"class":"ui-header ui-bar-"+d.options.theme}).prependTo(n),q=a("<h1>",{"class":"ui-title"}).appendTo(p),r,s,t;d.isMultiple&&(t=a("<a>",{text:d.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(p).buttonMarkup()),a.extend(d,{select:d.select,selectID:f,buttonId:k,menuId:l,thisPage:h,menuPage:m,label:g,selectOptions:i,isMultiple:j,theme:d.options.theme,listbox:n,list:o,header:p,headerTitle:q,headerClose:t,menuPageContent:r,menuPageClose:s,placeholder:"",build:function(){var b=this;b.refresh(),b.select.attr("tabindex","-1").focus(function(){a(this).blur(),b.button.focus()}),b.button.bind("vclick keydown",function(c){if(c.type==="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()}),b.list.attr("role","listbox").bind("focusin",function(b){a(b.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(b){a(b.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)","click",function(c){var e=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),g=b._selectOptions().eq(f)[0];g.selected=b.isMultiple?!g.selected:!0,b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",g.selected).toggleClass("ui-icon-checkbox-off",!g.selected),(b.isMultiple||e!==f)&&b.select.trigger("change"),b.isMultiple?b.list.find("li:not(.ui-li-divider)").eq(f).addClass("ui-btn-down-"+d.options.theme).find("a").first().focus():b.close(),c.preventDefault()}).keydown(function(b){var c=a(b.target),e=c.closest("li"),f,g;switch(b.keyCode){case 38:return f=e.prev().not(".ui-selectmenu-placeholder"),f.is(".ui-li-divider")&&(f=f.prev()),f.length&&(c.blur().attr("tabindex","-1"),f.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 40:return g=e.next(),g.is(".ui-li-divider")&&(g=g.next()),g.length&&(c.blur().attr("tabindex","-1"),g.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 13:case 32:return c.trigger("click"),!1}}),b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox),b._focusButton(),a.mobile._bindPageRemove.call(b.thisPage)}),b.listbox.bind("popupafterclose",function(a){b.close()}),b.isMultiple&&b.headerClose.click(function(){if(b.menuType==="overlay")return b.close(),!1}),b.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var a=this.list.find("li"),b=this._selectOptions();return b.text()!==a.text()},selected:function(){return this._selectOptions().filter(":selected:not( :jqmData(placeholder='true') )")},refresh:function(b,c){var d=this,e=this.element,f=this.isMultiple,g;(b||this._isRebuildRequired())&&d._buildList(),g=this.selectedIndices(),d.setButtonText(),d.setButtonCount(),d.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",!1).each(function(b){if(a.inArray(b,g)>-1){var c=a(this);c.attr("aria-selected",!0),d.isMultiple?c.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):c.is(".ui-selectmenu-placeholder")?c.next().addClass(a.mobile.activeBtnClass):c.addClass(a.mobile.activeBtnClass)}})},close:function(){if(this.options.disabled||!this.isOpen)return;var b=this;b.menuType==="page"?a.mobile.back():(b.listbox.popup("close"),b.list.appendTo(b.listbox),b._focusButton()),b.isOpen=!1},open:function(){function o(){var b=c.list.find("."+a.mobile.activeBtnClass+" a");b.length===0&&(b=c.list.find("li.ui-btn:not( :jqmData(placeholder='true') ) a")),b.first().focus().closest("li").addClass("ui-btn-down-"+d.options.theme)}if(this.options.disabled)return;var c=this,e=a(b),f=c.list.parent(),g=f.outerHeight(),h=f.outerWidth(),i=a("."+a.mobile.activePageClass),j=e.scrollTop(),k=c.button.offset().top,l=e.height(),n=e.width();c.button.addClass(a.mobile.activeBtnClass),setTimeout(function(){c.button.removeClass(a.mobile.activeBtnClass)},300),g>l-80||!a.support.scrollTop?(c.menuPage.appendTo(a.mobile.pageContainer).page(),c.menuPageContent=m.find(".ui-content"),c.menuPageClose=m.find(".ui-header a"),c.thisPage.unbind("pagehide.remove"),j===0&&k>l&&c.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",k)}),c.menuPage.one("pageshow",function(){o(),c.isOpen=!0}),c.menuType="page",c.menuPageContent.append(c.list),c.menuPage.find("div .ui-title").text(c.label.text()),a.mobile.changePage(c.menuPage,{transition:a.mobile.defaultDialogTransition})):(c.menuType="overlay",c.listbox.one("popupafteropen",o).popup("open",{x:c.button.offset().left+c.button.outerWidth()/2,y:c.button.offset().top+c.button.outerHeight()/2}),c.isOpen=!0)},_buildList:function(){var b=this,d=this.options,e=this.placeholder,f=!0,g=[],h=[],i=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");var j=b.select.find("option"),k=j.length,l=this.select[0],m="data-"+a.mobile.ns,n=m+"option-index",o=m+"icon",p=m+"role",q=m+"placeholder",r=c.createDocumentFragment(),s=!1,t;for(var u=0;u<k;u++,s=!1){var v=j[u],w=a(v),x=v.parentNode,y=w.text(),z=c.createElement("a"),A=[];z.setAttribute("href","#"),z.appendChild(c.createTextNode(y));if(x!==l&&x.nodeName.toLowerCase()==="optgroup"){var B=x.getAttribute("label");if(B!==t){var C=c.createElement("li");C.setAttribute(p,"list-divider"),C.setAttribute("role","option"),C.setAttribute("tabindex","-1"),C.appendChild(c.createTextNode(B)),r.appendChild(C),t=B}}f&&(!v.getAttribute("value")||y.length===0||w.jqmData("placeholder"))&&(f=!1,s=!0,v.setAttribute(q,!0),d.hidePlaceholderMenuItems&&A.push("ui-selectmenu-placeholder"),e||(e=b.placeholder=y));var D=c.createElement("li");v.disabled&&(A.push("ui-disabled"),D.setAttribute("aria-disabled",!0)),D.setAttribute(n,u),D.setAttribute(o,i),s&&D.setAttribute(q,!0),D.className=A.join(" "),D.setAttribute("role","option"),z.setAttribute("tabindex","-1"),D.appendChild(z),r.appendChild(D)}b.list[0].appendChild(r),!this.isMultiple&&!e.length?this.header.hide():this.headerTitle.text(this.placeholder),b.list.listview()},_button:function(){return a("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a(c).bind("selectmenubeforecreate",function(b){var c=a(b.target).data("selectmenu");!c.options.nativeMenu&&c.element.parents(":jqmData(role='popup')").length===0&&e(c)})}(a),function(a,d){a.widget("mobile.fixedtoolbar",a.mobile.widget,{options:{visibleOnPageShow:!0,disablePageZoom:!0,transition:"slide",fullscreen:!1,tapToggle:!0,tapToggleBlacklist:"a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup",hideDuringFocus:"input, textarea, select",updatePagePadding:!0,trackPersistentToolbars:!0,supportBlacklist:function(){var a=b,c=navigator.userAgent,d=navigator.platform,e=c.match(/AppleWebKit\/([0-9]+)/),f=!!e&&e[1],g=c.match(/Fennec\/([0-9]+)/),h=!!g&&g[1],i=c.match(/Opera Mobi\/([0-9]+)/),j=!!i&&i[1];return(d.indexOf("iPhone")>-1||d.indexOf("iPad")>-1||d.indexOf("iPod")>-1)&&f&&f<534||a.operamini&&{}.toString.call(a.operamini)==="[object OperaMini]"||i&&j<7458||c.indexOf("Android")>-1&&f&&f<533||h&&h<6||"palmGetResource"in b&&f&&f<534||c.indexOf("MeeGo")>-1&&c.indexOf("NokiaBrowser/8.5.0")>-1?!0:!1},initSelector:":jqmData(position='fixed')"},_create:function(){var a=this,b=a.options,c=a.element,d=c.is(":jqmData(role='header')")?"header":"footer",e=c.closest(".ui-page");if(b.supportBlacklist()){a.destroy();return}c.addClass("ui-"+d+"-fixed"),b.fullscreen?(c.addClass("ui-"+d+"-fullscreen"),e.addClass("ui-page-"+d+"-fullscreen")):e.addClass("ui-page-"+d+"-fixed"),a._addTransitionClass(),a._bindPageEvents(),a._bindToggleHandlers()},_addTransitionClass:function(){var a=this.options.transition;a&&a!=="none"&&(a==="slide"&&(a=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(a))},_bindPageEvents:function(){var c=this,d=c.options,e=c.element;e.closest(".ui-page").bind("pagebeforeshow",function(){d.disablePageZoom&&a.mobile.zoom.disable(!0),d.visibleOnPageShow||c.hide(!0)}).bind("webkitAnimationStart animationstart updatelayout",function(){var a=this;d.updatePagePadding&&c.updatePagePadding(a)}).bind("pageshow",function(){var e=this;c.updatePagePadding(e),d.updatePagePadding&&a(b).bind("throttledresize."+c.widgetName,function(){c.updatePagePadding(e)})}).bind("pagebeforehide",function(e,f){d.disablePageZoom&&a.mobile.zoom.enable(!0),d.updatePagePadding&&a(b).unbind("throttledresize."+c.widgetName);if(d.trackPersistentToolbars){var g=a(".ui-footer-fixed:jqmData(id)",this),h=a(".ui-header-fixed:jqmData(id)",this),i=g.length&&f.nextPage&&a(".ui-footer-fixed:jqmData(id='"+g.jqmData("id")+"')",f.nextPage)||a(),j=h.length&&f.nextPage&&a(".ui-header-fixed:jqmData(id='"+h.jqmData("id")+"')",f.nextPage)||a();if(i.length||j.length)i.add(j).appendTo(a.mobile.pageContainer),f.nextPage.one("pageshow",function(){i.add(j).appendTo(this)})}})},_visible:!0,updatePagePadding:function(b){var c=this.element,d=c.is(".ui-header");if(this.options.fullscreen)return;b=b||c.closest(".ui-page"),a(b).css("padding-"+(d?"top":"bottom"),c.outerHeight())},_useTransition:function(c){var d=a(b),e=this.element,f=d.scrollTop(),g=e.height(),h=e.closest(".ui-page").height(),i=a.mobile.getScreenHeight(),j=e.is(":jqmData(role='header')")?"header":"footer";return!c&&(this.options.transition&&this.options.transition!=="none"&&(j==="header"&&!this.options.fullscreen&&f>g||j==="footer"&&!this.options.fullscreen&&f+i<h-g)||this.options.fullscreen)},show:function(a){var b="ui-fixed-hidden",c=this.element;this._useTransition(a)?c.removeClass("out "+b).addClass("in"):c.removeClass(b),this._visible=!0},hide:function(a){var b="ui-fixed-hidden",c=this.element,d="out"+(this.options.transition==="slide"?" reverse":"");this._useTransition(a)?c.addClass(d).removeClass("in").animationComplete(function(){c.addClass(b).removeClass(d)}):c.addClass(b).removeClass(d),this._visible=!1},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var b=this,c=b.options,d=b.element;d.closest(".ui-page").bind("vclick",function(d){c.tapToggle&&!a(d.target).closest(c.tapToggleBlacklist).length&&b.toggle()}).bind("focusin focusout",function(d){screen.width<500&&a(d.target).is(c.hideDuringFocus)&&!a(d.target).closest(".ui-header-fixed, .ui-footer-fixed").length&&b[d.type==="focusin"&&b._visible?"hide":"show"]()})},destroy:function(){this.element.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden"),this.element.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}}),a(c).bind("pagecreate create",function(b){a(b.target).jqmData("fullscreen")&&a(a.mobile.fixedtoolbar.prototype.options.initSelector,b.target).not(":jqmData(fullscreen)").jqmData("fullscreen",!0),a.mobile.fixedtoolbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){function i(a){d=a.originalEvent,h=d.accelerationIncludingGravity,e=Math.abs(h.x),f=Math.abs(h.y),g=Math.abs(h.z),!b.orientation&&(e>7||(g>6&&f<8||g<8&&f>6)&&e>5)?c.enabled&&c.disable():c.enabled||c.enable()}if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1))return;var c=a.mobile.zoom,d,e,f,g,h;a(b).bind("orientationchange.iosorientationfix",c.enable).bind("devicemotion.iosorientationfix",i)}(a,this),function(a,b,d){function h(){e.removeClass("ui-mobile-rendering")}var e=a("html"),f=a("head"),g=a(b);a(b.document).trigger("mobileinit");if(!a.mobile.gradeA())return;a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),e.addClass("ui-mobile ui-mobile-rendering"),setTimeout(h,5e3),a.extend(a.mobile,{initializePage:function(){var b=a(":jqmData(role='page'), :jqmData(role='dialog')"),d=a.mobile.path.parseLocation().hash.replace("#",""),e=c.getElementById(d);b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0)),b.each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)}),a.mobile.firstPage=b.first(),a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport"),g.trigger("pagecontainercreate"),a.mobile.showPageLoadingMsg(),h(),!a.mobile.hashListeningEnabled||!a.mobile.path.isHashValid(location.hash)||!a(e).is(':jqmData(role="page")')&&!a.mobile.path.isPath(d)&&d!==a.mobile.dialogHashKey?(a.mobile.path.isHashValid(location.hash)&&(a.mobile.urlHistory.initialDst=d.replace("#","")),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0})):g.trigger("hashchange",[!0])}}),a.mobile.navreadyDeferred.resolve(),a(function(){b.scrollTo(0,1),a.mobile.defaultHomeScroll=!a.support.scrollTop||a(b).scrollTop()===1?0:1,a.fn.controlgroup&&a(c).bind("pagecreate create",function(b){a(":jqmData(role='controlgroup')",b.target).jqmEnhanceable().controlgroup({excludeInvisible:!1})}),a.mobile.autoInitializePage&&a.mobile.initializePage(),g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a(c).delegate(".ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})})}(a,this)});
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/manifest.json b/mobile/tct-behavior-tests/manifest.json
new file mode 100755 (executable)
index 0000000..4996ae2
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "version": "3.0",
+    "name": "tct-behavior-tests",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "tct-behavior-tests",
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    },
+    "icons": {
+        "128": "icon.png"
+    }
+}
diff --git a/mobile/tct-behavior-tests/pack.py b/mobile/tct-behavior-tests/pack.py
new file mode 100755 (executable)
index 0000000..e67cd36
--- /dev/null
@@ -0,0 +1,1104 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Fan, Yugang <yugang.fan@intel.com>
+
+import os
+import shutil
+import glob
+import time
+import sys
+import stat
+import random
+import json
+import logging
+import zipfile
+import signal
+import subprocess
+from optparse import OptionParser
+
+reload(sys)
+sys.setdefaultencoding('utf8')
+
+TOOL_VERSION = "v0.1"
+VERSION_FILE = "VERSION"
+DEFAULT_CMD_TIMEOUT = 600
+PKG_TYPES = ["apk", "xpk", "wgt", "apk-aio", "cordova-aio", "cordova", "embeddingapi"]
+PKG_MODES = ["shared", "embedded"]
+PKG_ARCHS = ["x86", "arm"]
+PKG_BLACK_LIST = []
+PKG_NAME = None
+BUILD_PARAMETERS = None
+BUILD_ROOT = None
+BUILD_ROOT_SRC = None
+BUILD_ROOT_SRC_PKG = None
+BUILD_ROOT_SRC_PKG_APP = None
+BUILD_ROOT_SRC_SUB_APP = None
+BUILD_ROOT_PKG = None
+BUILD_ROOT_PKG_APP = None
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def pidExists(pid):
+    if pid < 0:
+        return False
+    try:
+        os.kill(pid, 0)
+    except OSError:
+        return False
+    else:
+        return True
+
+
+def isWindows():
+    return sys.platform == "cygwin" or sys.platform.startswith("win")
+
+
+def killProcesses(ppid=None):
+    if isWindows():
+        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
+    else:
+        ppid = str(ppid)
+        pidgrp = []
+
+        def GetChildPids(ppid):
+            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
+            pids = os.popen(command).read()
+            pids = pids.split()
+            return pids
+
+        pidgrp.extend(GetChildPids(ppid))
+        for pid in pidgrp:
+            pidgrp.extend(GetChildPids(pid))
+
+        pidgrp.insert(0, ppid)
+        while len(pidgrp) > 0:
+            pid = pidgrp.pop()
+            try:
+                os.kill(int(pid), signal.SIGKILL)
+                return True
+            except OSError:
+                try:
+                    os.popen("kill -9 %d" % int(pid))
+                    return True
+                except Exception:
+                    return False
+
+
+def safelyGetValue(origin_json=None, key=None):
+    if origin_json and key and key in origin_json:
+        return origin_json[key]
+    return None
+
+
+def checkContains(origin_str=None, key_str=None):
+    if origin_str.upper().find(key_str.upper()) >= 0:
+        return True
+    return False
+
+
+def getRandomStr():
+    str_pool = list("abcdefghijklmnopqrstuvwxyz1234567890")
+    random_str = ""
+    for i in range(15):
+        index = random.randint(0, len(str_pool) - 1)
+        random_str = random_str + str_pool[index]
+
+    return random_str
+
+
+def zipDir(dir_path, zip_file):
+    try:
+        if os.path.exists(zip_file):
+            if not doRemove([zip_file]):
+                return False
+        if not os.path.exists(os.path.dirname(zip_file)):
+            os.makedirs(os.path.dirname(zip_file))
+        z_file = zipfile.ZipFile(zip_file, "w")
+        orig_dir = os.getcwd()
+        os.chdir(dir_path)
+        for root, dirs, files in os.walk("."):
+            for i_file in files:
+                LOG.info("zip %s" % os.path.join(root, i_file))
+                z_file.write(os.path.join(root, i_file))
+        z_file.close()
+        os.chdir(orig_dir)
+    except Exception as e:
+        LOG.error("Fail to pack %s to %s: %s" % (dir_path, zip_file, e))
+        return False
+    LOG.info("Done to zip %s to %s" % (dir_path, zip_file))
+    return True
+
+
+def overwriteCopy(src, dest, symlinks=False, ignore=None):
+    if not os.path.exists(dest):
+        os.makedirs(dest)
+        shutil.copystat(src, dest)
+    sub_list = os.listdir(src)
+    if ignore:
+        excl = ignore(src, sub_list)
+        sub_list = [x for x in sub_list if x not in excl]
+    for i_sub in sub_list:
+        s_path = os.path.join(src, i_sub)
+        d_path = os.path.join(dest, i_sub)
+        if symlinks and os.path.islink(s_path):
+            if os.path.lexists(d_path):
+                os.remove(d_path)
+            os.symlink(os.readlink(s_path), d_path)
+            try:
+                s_path_s = os.lstat(s_path)
+                s_path_mode = stat.S_IMODE(s_path_s.st_mode)
+                os.lchmod(d_path, s_path_mode)
+            except Exception:
+                pass
+        elif os.path.isdir(s_path):
+            overwriteCopy(s_path, d_path, symlinks, ignore)
+        else:
+            shutil.copy2(s_path, d_path)
+
+
+def doCopy(src_item=None, dest_item=None):
+    LOG.info("Copying %s to %s" % (src_item, dest_item))
+    try:
+        if os.path.isdir(src_item):
+            overwriteCopy(src_item, dest_item, symlinks=True)
+        else:
+            if not os.path.exists(os.path.dirname(dest_item)):
+                LOG.info("Create non-existent dir: %s" %
+                         os.path.dirname(dest_item))
+                os.makedirs(os.path.dirname(dest_item))
+            shutil.copy2(src_item, dest_item)
+    except Exception as e:
+        LOG.error("Fail to copy file %s: %s" % (src_item, e))
+        return False
+
+    return True
+
+
+def doRemove(target_file_list=None):
+    for i_file in target_file_list:
+        LOG.info("Removing %s" % i_file)
+        try:
+            if os.path.isdir(i_file):
+                shutil.rmtree(i_file)
+            else:
+                os.remove(i_file)
+        except Exception as e:
+            LOG.error("Fail to remove file %s: %s" % (i_file, e))
+            return False
+    return True
+
+
+def updateCopylistPrefix(src_default, dest_default, src_sub, dest_sub):
+    src_new = ""
+    dest_new = ""
+    PACK_TOOL_TAG = "PACK-TOOL-ROOT"
+
+    if src_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        src_new = src_sub.replace(PACK_TOOL_TAG, BUILD_PARAMETERS.pkgpacktools)
+    else:
+        src_new = os.path.join(src_default, src_sub)
+
+    if dest_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        dest_new = dest_sub.replace(PACK_TOOL_TAG, BUILD_ROOT)
+    else:
+        dest_new = os.path.join(dest_default, dest_sub)
+
+    return (src_new, dest_new)
+
+
+def buildSRC(src=None, dest=None, build_json=None):
+    if not os.path.exists(src):
+        LOG.info("+Src dir does not exist, skip build src process ...")
+        return True
+    if not doCopy(src, dest):
+        return False
+    if "blacklist" in build_json:
+        if build_json["blacklist"].count("") > 0:
+            build_json["blacklist"].remove("")
+        black_file_list = []
+        for i_black in build_json["blacklist"]:
+            black_file_list = black_file_list + \
+                glob.glob(os.path.join(dest, i_black))
+
+        black_file_list = list(set(black_file_list))
+        if not doRemove(black_file_list):
+            return False
+
+    if "copylist" in build_json:
+        for i_s_key in build_json["copylist"].keys():
+            if i_s_key and build_json["copylist"][i_s_key]:
+                (src_updated, dest_updated) = updateCopylistPrefix(
+                    src, dest, i_s_key, build_json["copylist"][i_s_key])
+                if not doCopy(src_updated, dest_updated):
+                    return False
+
+    return True
+
+
+def exitHandler(return_code=1):
+    LOG.info("+Cleaning build root folder ...")
+    if not BUILD_PARAMETERS.bnotclean and os.path.exists(BUILD_ROOT):
+        if not doRemove([BUILD_ROOT]):
+            LOG.error("Fail to clean build root, exit ...")
+            sys.exit(1)
+
+    if return_code == 0:
+        LOG.info("================ DONE ================")
+    else:
+        LOG.error(
+            "================ Found Something Wrong !!! ================")
+    sys.exit(return_code)
+
+
+def prepareBuildRoot():
+    LOG.info("+Preparing build root folder ...")
+    global BUILD_ROOT
+    global BUILD_ROOT_SRC
+    global BUILD_ROOT_SRC_PKG
+    global BUILD_ROOT_SRC_PKG_APP
+    global BUILD_ROOT_SRC_SUB_APP
+    global BUILD_ROOT_PKG
+    global BUILD_ROOT_PKG_APP
+
+    while True:
+        BUILD_ROOT = os.path.join("/tmp", getRandomStr())
+        if os.path.exists(BUILD_ROOT):
+            continue
+        else:
+            break
+
+    BUILD_ROOT_SRC = os.path.join(BUILD_ROOT, PKG_NAME)
+    BUILD_ROOT_SRC_PKG = os.path.join(BUILD_ROOT, "pkg")
+    BUILD_ROOT_SRC_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app")
+    BUILD_ROOT_SRC_SUB_APP = os.path.join(BUILD_ROOT, "sub-app")
+    BUILD_ROOT_PKG = os.path.join(BUILD_ROOT, "pkg", "opt", PKG_NAME)
+    BUILD_ROOT_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app", "opt", PKG_NAME)
+
+    if not doCopy(BUILD_PARAMETERS.srcdir, BUILD_ROOT_SRC):
+        return False
+    if not doRemove(
+            glob.glob(os.path.join(BUILD_ROOT_SRC, "%s*.zip" % PKG_NAME))):
+        return False
+
+    return True
+
+
+def doCMD(cmd, time_out=DEFAULT_CMD_TIMEOUT, no_check_return=False):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    cmd_proc = subprocess.Popen(args=cmd, shell=True)
+    while True:
+        cmd_exit_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_exit_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        else:
+            if not no_check_return and cmd_exit_code != 0:
+                LOG.error("Fail to exe CMD")
+                return False
+            break
+        time.sleep(2)
+    return True
+
+
+def doCMDWithOutput(cmd, time_out=DEFAULT_CMD_TIMEOUT):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    output = []
+    cmd_return_code = 1
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+
+    while True:
+        output_line = cmd_proc.stdout.readline().strip("\r\n")
+        cmd_return_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_return_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        elif output_line == '' and cmd_return_code is not None:
+            break
+
+        sys.stdout.write("%s\n" % output_line)
+        sys.stdout.flush()
+        output.append(output_line)
+    if cmd_return_code != 0:
+        LOG.error("Fail to exe CMD")
+
+    return (cmd_return_code, output)
+
+
+def packXPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "make_xpk.py")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "make_xpk.py"),
+                pack_tool):
+            return False
+    orig_dir = os.getcwd()
+    os.chdir(BUILD_ROOT)
+    if os.path.exists("key.file"):
+        if not doRemove(["key.file"]):
+            os.chdir(orig_dir)
+            return False
+
+    key_file = safelyGetValue(build_json, "key-file")
+    if key_file == "key.file":
+        LOG.error(
+            "\"key.file\" is reserved name for default key file, "
+            "pls change the key file name ...")
+        os.chdir(orig_dir)
+        return False
+    if key_file:
+        pack_cmd = "python make_xpk.py %s %s -o %s" % (
+            app_src, key_file, os.path.join(app_dest, "%s.xpk" % app_name))
+    else:
+        pack_cmd = "python make_xpk.py %s key.file -o %s" % (
+            app_src, os.path.join(app_dest, "%s.xpk" % app_name))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packWGT(build_json=None, app_src=None, app_dest=None, app_name=None):
+    if not zipDir(app_src, os.path.join(app_dest, "%s.wgt" % app_name)):
+        return False
+
+    if BUILD_PARAMETERS.signature == True:
+        if safelyGetValue(build_json, "sign-flag") == "true":
+            if not os.path.exists(os.path.join(BUILD_ROOT, "signing")):
+                if not doCopy(
+                        os.path.join(BUILD_PARAMETERS.pkgpacktools, "signing"),
+                        os.path.join(BUILD_ROOT, "signing")):
+                    return False
+            signing_cmd = "%s --dist platform %s" % (
+                os.path.join(BUILD_ROOT, "signing", "sign-widget.sh"),
+                os.path.join(app_dest, "%s.wgt" % app_name))
+            if not doCMD(signing_cmd, DEFAULT_CMD_TIMEOUT):
+                return False
+
+    return True
+
+
+def packAPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    if not os.path.exists(os.path.join(BUILD_ROOT, "crosswalk")):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "crosswalk"),
+                os.path.join(BUILD_ROOT, "crosswalk")):
+            return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doRemove(files):
+            return False
+
+    ext_opt = ""
+    cmd_opt = ""
+    url_opt = ""
+    mode_opt = ""
+    arch_opt = ""
+    icon_opt = ""
+
+    common_opts = safelyGetValue(build_json, "apk-common-opts")
+    if common_opts is None:
+        common_opts = ""
+
+    tmp_opt = safelyGetValue(build_json, "apk-ext-opt")
+    if tmp_opt:
+        ext_opt = "--extensions='%s'" % os.path.join(BUILD_ROOT_SRC, tmp_opt)
+
+    tmp_opt = safelyGetValue(build_json, "apk-cmd-opt")
+    if tmp_opt:
+        cmd_opt = "--xwalk-command-line='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-url-opt")
+    if tmp_opt:
+        url_opt = "--app-url='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-mode-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_MODES:
+            mode_opt = "--mode=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app mode: %s" % tmp_opt)
+            return False
+    else:
+        mode_opt = "--mode=%s" % BUILD_PARAMETERS.pkgmode
+
+    tmp_opt = safelyGetValue(build_json, "apk-arch-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_ARCHS:
+            arch_opt = "--arch=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app arch: %s" % tmp_opt)
+            return False
+    else:
+        arch_opt = "--arch=%s" % BUILD_PARAMETERS.pkgarch
+
+    tmp_opt = safelyGetValue(build_json, "apk-icon-opt")
+    if tmp_opt:
+        icon_opt = "--icon=%s" % tmp_opt
+    elif tmp_opt == "":
+        icon_opt = ""
+    else:
+        icon_opt = "--icon=%s/icon.png" % app_src
+
+    if safelyGetValue(build_json, "apk-type") == "MANIFEST":
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s " \
+            "--manifest=%s/manifest.json  %s %s %s %s %s" % (
+                app_name, app_src, mode_opt, arch_opt,
+                ext_opt, cmd_opt, common_opts)
+    elif safelyGetValue(build_json, "apk-type") == "HOSTEDAPP":
+        if not url_opt:
+            LOG.error(
+                "Fail to find the key \"apk-url-opt\" for hosted APP packing")
+            return False
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s %s " \
+                   "%s %s %s %s %s" % (
+                       app_name, app_name, mode_opt, arch_opt, ext_opt,
+                       cmd_opt, url_opt, common_opts)
+    else:
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s " \
+                   "--app-root=%s --app-local-path=index.html %s %s " \
+                   "%s %s %s %s" % (
+                       app_name, app_name, app_src, icon_opt, mode_opt,
+                       arch_opt, ext_opt, cmd_opt, common_opts)
+
+    orig_dir = os.getcwd()
+    os.chdir(os.path.join(BUILD_ROOT, "crosswalk"))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doCopy(files[0], os.path.join(app_dest, "%s.apk" % app_name)):
+            os.chdir(orig_dir)
+            return False
+    else:
+        LOG.error("Fail to find the apk file")
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packCordova(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "cordova")
+    app_name = app_name.replace("-", "_")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova"),
+                pack_tool):
+            return False
+
+    plugin_tool = os.path.join(BUILD_ROOT, "cordova_plugins")
+    if not os.path.exists(plugin_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova_plugins"),
+                plugin_tool):
+            return False
+
+    orig_dir = os.getcwd()
+    os.chdir(pack_tool)
+    pack_cmd = "bin/create %s org.xwalk.%s %s" % (
+        app_name, app_name, app_name)
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(os.path.join(pack_tool, app_name))
+    plugin_dirs = os.listdir(plugin_tool)
+    for i_dir in plugin_dirs:
+        i_plugin_dir = os.path.join(plugin_tool, i_dir)
+        plugin_install_cmd = "plugman install --platform android --project " \
+                             "./ --plugin %s" % i_plugin_dir
+        if not doCMD(plugin_install_cmd, DEFAULT_CMD_TIMEOUT):
+            os.chdir(orig_dir)
+            return False
+    os.chdir(pack_tool)
+
+    if not doCopy(app_src, os.path.join(pack_tool, app_name, "assets", "www")):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(os.path.join(BUILD_ROOT, "cordova", app_name))
+    pack_cmd = "./cordova/build"
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(
+            BUILD_ROOT, "cordova", app_name, "bin", "%s-debug.apk" %
+            app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packEmbeddingAPI(
+        build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    library_dir_name = safelyGetValue(build_json, "embeddingapi-library-name")
+    if not library_dir_name:
+        LOG.error("Fail to get embeddingapi-library-name ...")
+        return False
+
+    new_library_dir_name = "core_library"
+    pack_tool = os.path.join(app_src, "..", new_library_dir_name)
+
+    if os.path.exists(pack_tool):
+        if not doRemove([pack_tool]):
+            return False
+
+    if not doCopy(
+            os.path.join(BUILD_PARAMETERS.pkgpacktools, library_dir_name),
+            pack_tool):
+        return False
+
+    if os.path.exists(os.path.join(pack_tool, "bin", "res", "crunch")):
+        if not doRemove([os.path.join(pack_tool, "bin", "res", "crunch")]):
+            return False
+
+    orig_dir = os.getcwd()
+    android_project_path = os.path.join(app_src, "android-project")
+    try:
+        os.makedirs(android_project_path)
+    except Exception as e:
+        LOG.error("Fail to create tmp project dir: %s" % e)
+        return False
+
+    (return_code, output) = doCMDWithOutput("android list target")
+    api_level = ""
+    for line in output:
+        if "API level" in line:
+            api_level = line.split(":")[1].strip()
+            break
+    if not api_level:
+        LOG.error("Fail to get Android API Level")
+        os.chdir(orig_dir)
+        return False
+
+    android_project_cmd = "android create project --name %s --target " \
+                          "android-%s --path %s --package com.%s " \
+                          "--activity MainActivity" % (
+                              app_name, api_level, android_project_path, app_name)
+    if not doCMD(android_project_cmd):
+        os.chdir(orig_dir)
+        return False
+
+    try:
+        update_file = open(
+            os.path.join(android_project_path, "project.properties"), "a+")
+        update_file.writelines(
+            "{0}\n".format(
+                "android.library.reference.1=../%s" %
+                new_library_dir_name))
+        update_file.close()
+    except Exception as e:
+        LOG.error(
+            "Fail to update %s: %s" %
+            (os.path.join(
+                android_project_path,
+                "project.properties"),
+                e))
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(android_project_path, "build.xml"),
+                  os.path.join(app_src, "build.xml")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "project.properties"),
+            os.path.join(app_src, "project.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(app_src, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(pack_tool, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(app_src)
+    if not doCMD("ant debug"):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(app_src, "bin", "%s-debug.apk" % app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packAPP(build_json=None, app_src=None, app_dest=None, app_name=None):
+    LOG.info("Packing %s(%s)" % (app_name, app_src))
+    if not os.path.exists(app_dest):
+        try:
+            os.makedirs(app_dest)
+        except Exception as e:
+            LOG.error("Fail to init package install dest dir: %s" % e)
+            return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not packXPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not packWGT(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "APK"):
+        if not packAPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "CORDOVA"):
+        if not packCordova(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "EMBEDDINGAPI"):
+        if not packEmbeddingAPI(build_json, app_src, app_dest, app_name):
+            return False
+    else:
+        LOG.error("Got wrong pkg type: %s" % BUILD_PARAMETERS.pkgtype)
+        return False
+
+    LOG.info("Success to pack APP: %s" % app_name)
+    return True
+
+
+def createIndexFile(index_file_path=None, hosted_app=None):
+    try:
+        if hosted_app:
+            index_url = "http://127.0.0.1/opt/%s/webrunner/index.html?" \
+                "testsuite=../tests.xml&testprefix=../../.." % PKG_NAME
+        else:
+            index_url = "opt/%s/webrunner/index.html?testsuite=../tests.xml" \
+                        "&testprefix=../../.." % PKG_NAME
+        html_content = "<!doctype html><head><meta http-equiv='Refresh' " \
+                       "content='1; url=%s'></head>" % index_url
+        index_file = open(index_file_path, "w")
+        index_file.write(html_content)
+        index_file.close()
+    except Exception as e:
+        LOG.error("Fail to create index.html for top-app: %s" % e)
+        return False
+    LOG.info("Success to create index file %s" % index_file_path)
+    return True
+
+
+def buildSubAPP(app_dir=None, build_json=None, app_dest_default=None):
+    app_dir_inside = safelyGetValue(build_json, "app-dir")
+    if app_dir_inside:
+        app_dir = app_dir_inside
+    LOG.info("+Building sub APP(s) from %s ..." % app_dir)
+    app_dir = os.path.join(BUILD_ROOT_SRC, app_dir)
+    app_name = safelyGetValue(build_json, "app-name")
+    if not app_name:
+        app_name = os.path.basename(app_dir)
+
+    app_src = os.path.join(BUILD_ROOT_SRC_SUB_APP, app_name)
+    if buildSRC(app_dir, app_src, build_json):
+        app_dest = safelyGetValue(build_json, "install-path")
+        if app_dest:
+            app_dest = os.path.join(app_dest_default, app_dest)
+        else:
+            app_dest = app_dest_default
+
+        if safelyGetValue(build_json, "all-apps") == "true":
+            app_dirs = os.listdir(app_src)
+            apps_num = 0
+            for i_app_dir in app_dirs:
+                if os.path.isdir(os.path.join(app_src, i_app_dir)):
+                    i_app_name = os.path.basename(i_app_dir)
+                    if not packAPP(
+                            build_json, os.path.join(app_src, i_app_name),
+                            app_dest, i_app_name):
+                        return False
+                    else:
+                        apps_num = apps_num + 1
+            if apps_num > 0:
+                LOG.info("Totally packed %d apps in %s" % (apps_num, app_dir))
+                return True
+        else:
+            return packAPP(build_json, app_src, app_dest, app_name)
+    return False
+
+
+def buildPKGAPP(build_json=None):
+    LOG.info("+Building package APP ...")
+    if not doCopy(os.path.join(BUILD_ROOT_SRC, "icon.png"),
+                  os.path.join(BUILD_ROOT_SRC_PKG_APP, "icon.png")):
+        return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not doCopy(
+                os.path.join(BUILD_ROOT_SRC, "manifest.json"),
+                os.path.join(BUILD_ROOT_SRC_PKG_APP, "manifest.json")):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not doCopy(os.path.join(BUILD_ROOT_SRC, "config.xml"),
+                      os.path.join(BUILD_ROOT_SRC_PKG_APP, "config.xml")):
+            return False
+
+    hosted_app = False
+    if safelyGetValue(build_json, "hosted-app") == "true":
+        hosted_app = True
+    if not createIndexFile(
+            os.path.join(BUILD_ROOT_SRC_PKG_APP, "index.html"), hosted_app):
+        return False
+
+    if not hosted_app:
+        if "blacklist" not in build_json:
+            build_json.update({"blacklist": []})
+        build_json["blacklist"].extend(PKG_BLACK_LIST)
+        if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG_APP, build_json):
+            return False
+
+        if "subapp-list" in build_json:
+            for i_sub_app in build_json["subapp-list"].keys():
+                if not buildSubAPP(
+                        i_sub_app, build_json["subapp-list"][i_sub_app],
+                        BUILD_ROOT_PKG_APP):
+                    return False
+
+    if not packAPP(
+            build_json, BUILD_ROOT_SRC_PKG_APP, BUILD_ROOT_PKG, PKG_NAME):
+        return False
+
+    return True
+
+
+def buildPKG(build_json=None):
+    if "blacklist" not in build_json:
+        build_json.update({"blacklist": []})
+    build_json["blacklist"].extend(PKG_BLACK_LIST)
+    if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG, build_json):
+        return False
+
+    if "subapp-list" in build_json:
+        for i_sub_app in build_json["subapp-list"].keys():
+            if not buildSubAPP(
+                    i_sub_app, build_json["subapp-list"][i_sub_app],
+                    BUILD_ROOT_PKG):
+                return False
+
+    if "pkg-app" in build_json:
+        if not buildPKGAPP(build_json["pkg-app"]):
+            return False
+
+    return True
+
+
+def main():
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    try:
+        usage = "Usage: ./pack.py -t apk -m shared -a x86"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-c",
+            "--cfg",
+            dest="pkgcfg",
+            help="specify the path of config json file")
+        opts_parser.add_option(
+            "-t",
+            "--type",
+            dest="pkgtype",
+            help="specify the pkg type, e.g. apk, xpk, wgt ...")
+        opts_parser.add_option(
+            "-m",
+            "--mode",
+            dest="pkgmode",
+            help="specify the apk mode, e.g. shared, embedded")
+        opts_parser.add_option(
+            "-a",
+            "--arch",
+            dest="pkgarch",
+            help="specify the apk arch, e.g. x86, arm")
+        opts_parser.add_option(
+            "-d",
+            "--dest",
+            dest="destdir",
+            help="specify the installation folder for packed package")
+        opts_parser.add_option(
+            "-s",
+            "--src",
+            dest="srcdir",
+            help="specify the path of pkg resource for packing")
+        opts_parser.add_option(
+            "--tools",
+            dest="pkgpacktools",
+            help="specify the parent folder of pack tools")
+        opts_parser.add_option(
+            "--notclean",
+            dest="bnotclean",
+            action="store_true",
+            help="disable the build root clean after the packing")
+        opts_parser.add_option(
+            "--sign",
+            dest="signature",
+            action="store_true",
+            help="signature operation will be done when packing wgt")
+        opts_parser.add_option(
+            "-v",
+            "--version",
+            dest="bversion",
+            action="store_true",
+            help="show this tool's version")
+        opts_parser.add_option(
+            "--pkg-version",
+            dest="pkgversion",
+            help="specify the pkg version, e.g. 0.0.0.1")
+
+        if len(sys.argv) == 1:
+            sys.argv.append("-h")
+
+        global BUILD_PARAMETERS
+        (BUILD_PARAMETERS, args) = opts_parser.parse_args()
+    except Exception as e:
+        LOG.error("Got wrong options: %s, exit ..." % e)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.bversion:
+        print "Version: %s" % TOOL_VERSION
+        sys.exit(0)
+
+    if not BUILD_PARAMETERS.srcdir:
+        BUILD_PARAMETERS.srcdir = os.getcwd()
+    BUILD_PARAMETERS.srcdir = os.path.expanduser(BUILD_PARAMETERS.srcdir)
+
+    if not os.path.exists(
+            os.path.join(BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)):
+        if not os.path.exists(
+                os.path.join(BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)):
+            if not os.path.exists(
+                    os.path.join(BUILD_PARAMETERS.srcdir, VERSION_FILE)):
+                LOG.info(
+                    "Not found pkg version file, try to use option --pkg-version")
+                pkg_version_file_path = None
+            else:
+                pkg_version_file_path = os.path.join(
+                    BUILD_PARAMETERS.srcdir, VERSION_FILE)
+        else:
+            pkg_version_file_path = os.path.join(
+                BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)
+    else:
+        pkg_version_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)
+
+    try:
+        pkg_main_version = 0
+        pkg_release_version = 0
+        if BUILD_PARAMETERS.pkgversion:
+            LOG.info("Using %s as pkg version " % BUILD_PARAMETERS.pkgversion)
+            pkg_main_version = BUILD_PARAMETERS.pkgversion
+        else:
+            if pkg_version_file_path is not None:
+                LOG.info("Using pkg version file: %s" % pkg_version_file_path)
+                with open(pkg_version_file_path, "rt") as pkg_version_file:
+                    pkg_version_raw = pkg_version_file.read()
+                    pkg_version_file.close()
+                    pkg_version_json = json.loads(pkg_version_raw)
+                    pkg_main_version = pkg_version_json["main-version"]
+                    pkg_release_version = pkg_version_json["release-version"]
+    except Exception as e:
+        LOG.error("Fail to read pkg version file: %s, exit ..." % e)
+        sys.exit(1)
+
+    if not BUILD_PARAMETERS.pkgtype:
+        LOG.error("No pkg type provided, exit ...")
+        sys.exit(1)
+    elif not BUILD_PARAMETERS.pkgtype in PKG_TYPES:
+        LOG.error("Wrong pkg type, only support: %s, exit ..." %
+                  PKG_TYPES)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk" or \
+       BUILD_PARAMETERS.pkgtype == "apk-aio":
+        if not BUILD_PARAMETERS.pkgmode:
+            LOG.error("No pkg mode option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgmode in PKG_MODES:
+            LOG.error(
+                "Wrong pkg mode option provided, only support:%s, exit ..." %
+                PKG_MODES)
+            sys.exit(1)
+
+        if not BUILD_PARAMETERS.pkgarch:
+            LOG.error("No pkg arch option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgarch in PKG_ARCHS:
+            LOG.error(
+                "Wrong pkg arch option provided, only support:%s, exit ..." %
+                PKG_ARCHS)
+            sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        if not BUILD_PARAMETERS.destdir or not os.path.exists(
+                BUILD_PARAMETERS.destdir):
+            LOG.error("No all-in-one installation dest dir found, exit ...")
+            sys.exit(1)
+
+    elif not BUILD_PARAMETERS.destdir:
+        BUILD_PARAMETERS.destdir = BUILD_PARAMETERS.srcdir
+    BUILD_PARAMETERS.destdir = os.path.expanduser(BUILD_PARAMETERS.destdir)
+
+    if not BUILD_PARAMETERS.pkgpacktools:
+        BUILD_PARAMETERS.pkgpacktools = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", "tools")
+    BUILD_PARAMETERS.pkgpacktools = os.path.expanduser(
+        BUILD_PARAMETERS.pkgpacktools)
+
+    config_json = None
+    if BUILD_PARAMETERS.pkgcfg:
+        config_json_file_path = BUILD_PARAMETERS.pkgcfg
+    else:
+        config_json_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "suite.json")
+    try:
+        LOG.info("Using config json file: %s" % config_json_file_path)
+        with open(config_json_file_path, "rt") as config_json_file:
+            config_raw = config_json_file.read()
+            config_json_file.close()
+            config_json = json.loads(config_raw)
+    except Exception as e:
+        LOG.error("Fail to read config json file: %s, exit ..." % e)
+        sys.exit(1)
+
+    global PKG_NAME
+    PKG_NAME = safelyGetValue(config_json, "pkg-name")
+    if not PKG_NAME:
+        PKG_NAME = os.path.basename(BUILD_PARAMETERS.srcdir)
+        LOG.warning(
+            "Fail to read pkg name from json, "
+            "using src dir name as pkg name ...")
+
+    LOG.info("================= %s (%s-%s) ================" %
+             (PKG_NAME, pkg_main_version, pkg_release_version))
+
+    if not safelyGetValue(config_json, "pkg-list"):
+        LOG.error("Fail to read pkg-list, exit ...")
+        sys.exit(1)
+
+    pkg_json = None
+    for i_pkg in config_json["pkg-list"].keys():
+        i_pkg_list = i_pkg.replace(" ", "").split(",")
+        if BUILD_PARAMETERS.pkgtype in i_pkg_list:
+            pkg_json = config_json["pkg-list"][i_pkg]
+
+    if not pkg_json:
+        LOG.error("Fail to read pkg json, exit ...")
+        sys.exit(1)
+
+    if not prepareBuildRoot():
+        exitHandler(1)
+
+    if "pkg-blacklist" in config_json:
+        PKG_BLACK_LIST.extend(config_json["pkg-blacklist"])
+
+    if not buildPKG(pkg_json):
+        exitHandler(1)
+
+    LOG.info("+Building package ...")
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        pkg_file_list = os.listdir(os.path.join(BUILD_ROOT, "pkg"))
+        for i_file in pkg_file_list:
+            if not doCopy(
+                    os.path.join(BUILD_ROOT, "pkg", i_file),
+                    os.path.join(BUILD_PARAMETERS.destdir, i_file)):
+                exitHandler(1)
+    else:
+        pkg_file = os.path.join(
+            BUILD_PARAMETERS.destdir,
+            "%s-%s.%s.zip" %
+            (PKG_NAME,
+             pkg_main_version,
+             pkg_release_version))
+             
+
+        if not zipDir(os.path.join(BUILD_ROOT, "pkg"), pkg_file):
+            exitHandler(1)
+
+if __name__ == "__main__":
+    main()
+    exitHandler(0)
diff --git a/mobile/tct-behavior-tests/packaging/behavior.changes b/mobile/tct-behavior-tests/packaging/behavior.changes
new file mode 100755 (executable)
index 0000000..5f161ab
--- /dev/null
@@ -0,0 +1,471 @@
+* Wed Sep 18 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130913.023311@993b24f
+- Update version numbers for ww39.0 release
+- Fix TTS-2007 by handling unable to re-install widget issues in behavior
+- Fix TTS-2015 by improvement function and description in behavior
+- Fix TTS-2009 by enable the Pass button
+- Update packaging/behavior.changes
+
+* Fri Sep 13 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@d1074ff
+- Update version numbers for ww37.5 release
+- Merge "Fix TTS-1998 by update DBV to latest on RC8" into tizen_2.2
+- Fix TTS-1854 by adding code to save the children TCs result
+- Fix TTS-2006 by lack slash character in PackageManagement
+- Fix TTS-1998 by update DBV to latest on RC8
+- Merge "Fix TTS-1964 to improve unreadable descripition" into tizen_2.2
+- Update packaging/behavior.changes
+- Fix TTS-1964 to improve unreadable descripition
+
+* Fri Sep 06 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@8c4196f
+- Update version numbers for ww36.5 release
+- Merge "Fix TTS-1960 by add component name of UserAgentString in tests.xml" into tizen_2.2
+- Merge "Fix TDIS-6958 by modify directories as file URI path" into tizen_2.2
+- Fix TTS-1960 by add component name of UserAgentString in tests.xml
+- Fix TTS-1959 by removing unsupport feature test in webkit
+- Fix TDIS-6958 by modify directories as file URI path
+- Fix TTS-1951 by optimize case styles in behavior
+- update packaging/behavior.changes
+
+* Thu Aug 29 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130823.034631@2b6acf1
+- Updated version numbers for ww35.5 release
+- Fixed TTS-1943 by adding user agent string test to behavior
+- Fixed TTS-1927 by checking the install location by manual in setting-install-location-prefer-external-with-card
+- Fixed bug TTS-1931 for Page Visibility status check
+- Updated COPYING files
+
+* Thu Aug 22 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130815.093033@bef70bc
+- Updated version numbers for ww34.5 release
+- Simplify tests.xml
+- Merge "Fixed TTS-1910 by updating system directory path in Security" into tizen_2.2
+- Merge "Behavior TC NFC Receive message added" into tizen_2.2
+- Fixed TTS-1910 by updating system directory path in Security
+- Fixed TTS-1909 by updating incorrect path
+- Merge "Fixed TTS-1880 by splitting upstream resource to single file due to license issue" into tizen_2.2
+- Merge "Update all icon for sub widgets in behavior tool" into tizen_2.2
+- Fixed TTS-1880 by splitting upstream resource to single file due to license issue
+- Merge "Fixed TTS-1898 by updating the media and image resources with license" into tizen_2.2
+- Fixed TTS-1898 by updating the media and image resources with license
+- Update all icon for sub widgets in behavior tool
+- Behavior TC NFC Receive message added
+- Behavior TC Push clientApp modify
+- Behavior TC Application icon image changed
+- update packaging/behavior.changes
+
+* Thu Aug 15 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130808.063316@ed40b71
+- Updated version numbers for ww33.5 release
+- Added 2 npruntime cases to behavior tool
+- Merge "Code review: Updated report-uri-single-violated in behavior tool" into tizen_2.2
+- Merge "Updated icon and config.xml for sub widget in behavior tool" into tizen_2.2
+- Merge "update usage test in behavior" into tizen_2.2
+- Merge "Behavior TC Notification update api modify" into tizen_2.2
+- update usage test in behavior
+- Behavior TC Notification update api modify
+- Code review: Updated report-uri-single-violated in behavior tool
+- Fixed bug TTS-1854 to add confirm infos.
+- Merge "Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt" into tizen_2.2
+- Merge "Fixed bug TTS-1831 to update the case descriptions." into tizen_2.2
+- add 2 usage tcs of canvas and CSS
+- Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt
+- Updated icon and config.xml for sub widget in behavior tool
+- Fixed bug TTS-1831 to update the case descriptions.
+- Update icons due to license issue.
+- Merge "Fixed bug TTS-1851 update config.xml." into tizen_2.2
+- Merge "improve accelerometer in behavior" into tizen_2.2
+- Updated the files in css/images/
+- improve accelerometer in behavior
+- Fixed bug TTS-1851 update config.xml.
+
+* Thu Aug 08 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130801.152701@1c522e3
+- Updated version numbers for ww32.5 release
+- Merge "Updated main index.html to add blank in title menu for behavior tools" into tizen_2.2
+- Merge "Updated the description for CSP moudle in behavior tools" into tizen_2.2
+- Merge "Fixed bug TTS-1850 to add the case resourse." into tizen_2.2
+- Merge "Behavior TC Application whitespace remove" into tizen_2.2
+- Updated the description for CSP moudle in behavior tools
+- Updated main index.html to add blank in title menu for behavior tools
+- Fixed bug TTS-1850 to add the case resourse.
+- Merge "Fixed bug TTS-1848 to update the case description." into tizen_2.2
+- Merge "Add PackageManagement cases to the behavior tool." into tizen_2.2
+- Merge "Add ConfigurationExtension cases to the behavior tool." into tizen_2.2
+- Merge "Add WRTSupport cases to the behavior tool." into tizen_2.2
+- Fixed bug TTS-1848 to update the case description.
+- Merge "Add Stability module to the behavior tool." into tizen_2.2
+- Behavior TC Application whitespace remove
+- Add Stability module to the behavior tool.
+- Add WRTSupport cases to the behavior tool.
+- Add ConfigurationExtension cases to the behavior tool.
+- Add PackageManagement cases to the behavior tool.
+- Add DynamicBox cases to the behavior tool.
+- Merge "Add license file for external media files and behavior tests." into tizen_2.2
+- Merge "Fix listview style issue in some tests and bypass the tizen object in normal browser." into tizen_2.2
+- Add license file for external media files and behavior tests.
+- Fix bug TTS-1832 TC displayed style does not match expected result
+- Fix listview style issue in some tests and bypass the tizen object in normal browser.
+- Behavior TC Notification Image(thumbnail) changed
+
+* Thu Aug 01 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.082203@b07dd79
+- Merge "Add PackageManagement module to behavior tool" into tizen_2.2
+- Add PackageManagement module to behavior tool
+- Merge "Add capability info to result xml file." into tizen_2.2
+- Merge "Add ConfigurationExtension module to behavior tool" into tizen_2.2
+- Merge "Added cases to DynamicBox moudle in behavior tool" into tizen_2.2
+- Add ConfigurationExtension module to behavior tool
+- Add WRTSupport module to behavior tool
+- Merge "Add WRTUI module to behavior tool" into tizen_2.2
+- Merge "Updated CSP module in behavior tool" into tizen_2.2
+- Merge "Updated the tct-behavior-tests.spec file to reduce the size of package" into tizen_2.2
+- Add WRTUI module to behavior tool
+- Added cases to DynamicBox moudle in behavior tool
+- Updated CSP module in behavior tool
+- Updated the tct-behavior-tests.spec file to reduce the size of package
+- Add corssplatform support in HybridApplication
+- Add capability info to result xml file.
+
+* Thu Jul 25 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.063839@55105a9
+- Update app icon and tests icons to fix license issue.
+- Merge "Updated behavior.spec" into tizen_2.2
+- Updated behavior.spec
+
+* Thu Jul 25 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130718.115214@0ced6ef
+- Updated version numbers for ww30.5 release
+- Added CSP moudle to behavior tools
+- update Developer Guide to v0.6
+- Behavior TC Package Button disabled modify
+- Disable unsupported test access and add unsupported label.
+- Behavior TC Bluetooth Update(Tizen_2.2) Change-Id: Ic9552491da016b9795b4f4d23c4efac64ecdfaa9
+- Behavior TC SystemInfo Update(Tizen_2.2)
+- Behavior TC Download progressbar modify
+
+* Thu Jul 18 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130711.082532@41217f3
+- Updated version numbers for ww29.5 release
+- Merge "Behavior TC Bluetooth TTS-1711 update" into tizen_2.2
+- Merge "Migrate touchcancel event in Touch" into tizen_2.2
+- Merge "Fixed TTS-1362 by adding voice preview in Microphone" into tizen_2.2
+- Migrate touchcancel event in Touch
+- Fixed TTS-1362 by adding voice preview in Microphone
+- Merge changes Icdf3d5af,I29303eb5 into tizen_2.2
+- Behavior TC Bluetooth TTS-1711 update
+- Behavior TC Power info update
+- Behavior TC Notification Image(Tizen Logo) changed
+
+* Thu Jul 11 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130704.080051@38487b9
+- Updated version numbers for ww28.5 release
+- Update tests purpose to short version.
+- Added DynamicBox module into behavior tools
+- Behavior TC Bluetooth alert modified
+- Behavior TC Power info modified
+- Hide test ID in home page and using purpose for test name.
+
+* Thu Jul 04 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130627.082103@b239235
+- Updated version numbers for ww27.5 release
+- Merge "Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9" into tizen_2.2
+- Merge "Behavior TC Package Double Install block" into tizen_2.2
+- Merge "Behavior TC Bluetooth Disconnect Alert Add" into tizen_2.2
+- Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9
+- Merge "Behavior TC NFC WriteTag Modify" into tizen_2.2
+- Behavior TC Package Double Install block
+- Behavior TC Bluetooth Disconnect Alert Add
+- Behavior TC NFC WriteTag Modify
+- Merge "Behavior TC SystemSettingNotificationEmail index.html footer modify" into tizen_2.2
+- Merge "Behavior TC Notification led attribute add" into tizen_2.2
+- Behavior TC SystemSettingNotificationEmail index.html footer modify
+- Behavior TC Notification led attribute add
+- Modify the AppControlExtending appearance.
+- Update guide doc for open source release.
+- Merge "Fixed wgt cannot installed issue" into tizen_2.2
+- Update dev guide for capability support.
+- Fixed wgt cannot installed issue
+- Merge "Integrate 17 TCs into CSSStyle" into tizen_2.2
+- Merge "Removed the description of performance checking in Expect Results of Media and Animation TCs" into tizen_2.2
+- Merge "add move event to Touch in behavior" into tizen_2.2
+- Merge "Add history back test to Viewport in behavior" into tizen_2.2
+- Integrate 17 TCs into CSSStyle
+- Removed the description of performance checking in Expect Results of Media and Animation TCs
+- Behavior TC Download File delete issue
+- add move event to Touch in behavior
+- Add history back test to Viewport in behavior
+
+* Thu Jun 27 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130621.054814@2795437
+- Updated version numbers for ww26.5 release
+- Behavior TC Bluetooth Message(Encode/Decode) add
+- Behavior TC PushClient Modify
+- Behavior TC SystemSettingScreen Image size modify
+- Behavior TC Application Filename display modify
+- Behavior TC Package errorCB add
+- Merge "Behavior TC Package comment remove" into tizen_2.2
+- Behavior TC Package comment remove
+- Behavior TC Installation message when installing wgt
+- Behavior TC Package disable button when the button ineffective Change-Id: I77f5a96c2cf1c8adccd7ca50152d8396c5ca7be3
+- Behavior TC 'info' update Change-Id: Ia0c09d0d7b82544b73779163641f758a427b843b
+- Update button icons and list font/size.
+- Behavior TC Pass/Fail button remove(disable/enable)
+- Behavior TC Bluetooth scenario changed
+- Update dev guide for tests.xml verification and coding style.
+- Merge "Update the description of PageVisibility" into tizen_2.2
+- Merge "Modify Security function" into tizen_2.2
+- Merge "Update the splitters of buttons" into tizen_2.2
+- Merge "Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126" into tizen_2.2
+- Merge "Fixed the footer botton position issue in 2D3DAnimation" into tizen_2.2
+- Merge "Modifying Vibration style in behavior" into tizen_2.2
+- Merge "Modify LocationNetwork style in behavior" into tizen_2.2
+- Merge "modify style of CSSStyle behavior" into tizen_2.2
+- Update the description of PageVisibility
+- Modify Security function
+- Update the splitters of buttons
+- Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126
+- Fixed the footer botton position issue in 2D3DAnimation
+- Modifying Vibration style in behavior
+- Modify LocationNetwork style in behavior
+- modify style of CSSStyle behavior
+- Disable the multi tests in behavior list view.
+- Behavior TC Naming Changed(special letters)
+- Updated tests.xml to create Web Runtime set and format PageVisibility style
+- Behavior TC Power Screen_Bright API removed
+- Merge "Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b" into tizen_2.2
+- Merge "Remove Test Note in tests.xml" into tizen_2.2
+- Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b
+- Remove Test Note in tests.xml
+- Fixed scale issue of Viewport
+- Merge "modify Accelerometer module style" into tizen_2.2
+- Merge "Fixed Camera by modifying style css in behavior" into tizen_2.2
+- Merge "Improve LocationGPS by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve LocationNetwork by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Microphone by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Vibration by modifying button style in behavior" into tizen_2.2
+- Merge "Update CSSAnimation,SVGTransformation,Viewport style" into tizen_2.2
+- modify Accelerometer module style
+- Fixed Camera by modifying style css in behavior
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Improve LocationGPS by adding observation eare in behavior
+- Improve LocationNetwork by adding observation eare in behavior
+- Improve Microphone by adding observation eare in behavior
+- Improve Vibration by modifying button style in behavior
+- Update CSSAnimation,SVGTransformation,Viewport style
+- modify mediaPlayback and CSSStyle style
+- Merge "Adjust CSS in FileReader" into tizen_2.2
+- Merge "Adjust CSS in 2D3DAnimation" into tizen_2.2
+- Merge "Add touch info in Touch" into tizen_2.2
+- Merge "Improve case style in FullScreen" into tizen_2.2
+- Merge "Added ApplicationInvisible moudle to TCT behavior tools" into tizen_2.2
+- Merge "Improve case style in DragandDrop" into tizen_2.2
+- Merge "Improve case style in Clipboard" into tizen_2.2
+- Merge "Improve Camera by adding observation eare in behavior" into tizen_2.2
+- Adjust CSS in FileReader
+- Adjust CSS in 2D3DAnimation
+- Add touch info in Touch
+- Improve case style in FullScreen
+- Added ApplicationInvisible moudle to TCT behavior tools
+- Improve case style in DragandDrop
+- Improve case style in Clipboard
+- Improve Camera by adding observation eare in behavior
+
+* Fri Jun 21 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.1/20130527.073412@3af9e30
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Add hash-signer in spec
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Merge "Add timestamp for exported file" into tizen_2.2
+- Merge "Improve case style in HybridApplication" into tizen_2.2
+- Merge "Added test points for css animation in behavior" into tizen_2.2
+- Add timestamp for exported file
+- Improve case style in HybridApplication
+- Add disable and enable Pass Button in be havior about Camera Touch UserMedia Vibration
+- Added test points for css animation in behavior
+- Improve description in Behavior
+- Handle disable and enable Pass Button in behavior
+- Merge "Improve LocationGPS by adding speed in behavior" into tizen_2.2
+- Improve LocationGPS by adding speed in behavior
+- Integrate backgrounds TCs to CSSStyle
+- Handle disable and enable Pass Button in behavior
+- Update version for ww25.4 release.
+- Add two theme for pass/fail result highlight.
+- Not popup test information window by default, and comments out re-enter code
+- Fixed TTS-1554 on behavior by repaired the spelling mistake
+- Update tests xml scheme.
+- Handle disable and enable "Pass" Button in behavior
+- Add Enable/DisablePassButton method in HybridApplication
+- Merge "Add privilege of location and mediacapture in behavior" into tizen_2.1
+- Merge "Added AppControlExtending moudle to TCT behavior tools" into tizen_2.1
+- Add privilege of location and mediacapture in behavior
+- BehaviorTC SystemSetting rintones rw -> r
+- Added AppControlExtending moudle to TCT behavior tools
+- BehaviorTC Launch API success log, PassButton(Disable/Enable) Change-Id: Icfd48ee1e92417d2cb461d9feb156bafbac697d0
+- Behavior TC Messaging(SMS/MMS) scenario modify Change-Id: I03944a73cd08f49048bcd0bf0a34caa254e85aa3
+- Behavior TC SystemInfo Scenario Modify
+- Update saving result popup info.
+- Update version for tct web ww24.5 release.
+- Fix multiple capability issue
+- Behavior TC TTS-1509
+- update sample application
+- Fix capability missing when merge happen
+- Improve test description in 2d3danimation and filereader
+- Update popup info and delete unuseful console log.
+- Merge "Make tmpfile always there as a import option, plus some small cleanup" into tizen_2.1
+- Make tmpfile always there as a import option, plus some small cleanup
+- Repaired viewport style on behavior
+- Cleanup tmp file logic
+- Clean some unuseful vars and space consistent.
+- add logic to read tests.xml then murge tmp result if any
+- Merge "set the capability case result as fail in the _resetresult" into tizen_2.1
+- set the capability case result as fail in the _resetresult
+- Merge "Improve HybridApplication style" into tizen_2.1
+- Merge "Reduce svg height in SVGTransform" into tizen_2.1
+- Merge "Repaired clipboard style on behavior" into tizen_2.1
+- Merge "Repaired dragdrop style on behavior" into tizen_2.1
+- Merge "modify CSSStyle TCs" into tizen_2.1
+- Improve HybridApplication style
+- Reduce svg height in SVGTransform
+- Repaired clipboard style on behavior
+- Repaired dragdrop style on behavior
+- modify CSSStyle TCs
+- Fix LocationNetwork
+- Merge "Move Clipboard to Gesture category" into tizen_2.1
+- Simplify TC framework
+- Merge "Only first entry into testapp will auto-popup information window" into tizen_2.1
+- Move Clipboard to Gesture category
+- Only first entry into testapp will auto-popup information window
+- Update version for ww23.5 release.
+- Merge "Add capability for camera and microphone" into tizen_2.1
+- Update dev guide for latest test fw.
+- Add capability for camera and microphone
+- Update test FW to import tests from tests XML.
+- Modify pagevisibility component in TCT behavior
+- Provide a method to get current test app name
+- Merge "modify test step in MediaPlayback" into tizen_2.1
+- Merge "Enable/Disable only PASS button" into tizen_2.1
+- Merge "Update Security style" into tizen_2.1
+- Merge "Improve media content to res file" into tizen_2.1
+- Merge "Repaired ad2danimation style on behavior" into tizen_2.1
+- Merge "behavior vibration improve by modifying slider style" into tizen_2.1
+- modify test step in MediaPlayback
+- Enable/Disable only PASS button
+- Update Security style
+- Improve media content to res file
+- Repaired ad2danimation style on behavior
+- behavior vibration improve by modifying slider style
+- Rename Hybrid as HybridApplication
+- Merge "Submit wanglin's patch to fix 1504,1450,1347" into tizen_2.1
+- Submit wanglin's patch to fix 1504,1450,1347
+- Merge "behavior touch improve by modifying test step description" into tizen_2.1
+- behavior touch improve by modifying test step description
+- Modify the display status of 2D3DAnimation
+- Merge "Add Security TC to behavior" into tizen_2.1
+- Merge "Improve Accelerometer test information" into tizen_2.1
+- Merge "Repaired clipboard case for behavior" into tizen_2.1
+- Merge "Repaired dragdrop case for behavior" into tizen_2.1
+- Merge "Add test area for SVGTransform" into tizen_2.1
+- Merge "Modify 2D3DAnimation UI" into tizen_2.1
+- Merge "Improve CSSAnimation test UI and info description" into tizen_2.1
+- Merge "behavior Vibration improve" into tizen_2.1
+- Merge "behavior Touch improve" into tizen_2.1
+- Merge "Modify opacity controller and descripition in CSSStyle" into tizen_2.1
+- Merge "Improve Hybrid in behavior" into tizen_2.1
+- Improve Accelerometer test information
+- Add Security TC to behavior
+- Repaired clipboard case for behavior
+- Repaired dragdrop case for behavior
+- Add test area for SVGTransform
+- Modify 2D3DAnimation UI
+- Improve CSSAnimation test UI and info description
+- behavior Vibration improve
+- behavior Touch improve
+- Modify opacity controller and descripition in CSSStyle
+- Improve Hybrid in behavior
+- behavior Microphone improve
+- Merge "behavior LocationGps and LocationNetwork imporve" into tizen_2.1
+- Add volume controller in MediaPlayback
+- behavior LocationGps and LocationNetwork imporve
+- Repaired fullscreen case in behavior
+- Merge "Improve Camera into two TCs in behavior" into tizen_2.1
+- Improve Camera into two TCs in behavior
+- update the button name and info description in FileReader
+- [DataSync] add what intel QA wants
+- Add note for ringtone test
+- Update local build minor release version.
+- Fix not found wgt issue in Drag and Drop
+- Update tests category to algin with feedbacks.
+- Add viewport case for behavior
+- Merge "Fix incorrect description in Clipboard" into tizen_2.1
+- Merge "Add Hybrid TC into behavior" into tizen_2.1
+- Fix incorrect description in Clipboard
+- Add Hybrid TC into behavior
+- update Chatter sample
+- Behavior Test Update
+- Update release version for ww22.5 relase.
+- Add pagevisibility component in TCT behavior
+- Add clipboard and dragdrop cases for behavior
+- Merge "Add FileReader to TCT behavior" into tizen_2.1
+- Merge "add getusermedia to CameraBack in behavior" into tizen_2.1
+- Add FileReader to TCT behavior
+- add getusermedia to CameraBack in behavior
+- Merge "Add CSSAnimation test to TCT behavior" into tizen_2.1
+- Behavior Test Download : Delete All update Change-Id: Ia8e6c3105b8fef0f75a172e5fe85f1453442026e
+- Add CSSAnimation test to TCT behavior
+- Update icons
+- Add CSSStyle TC to behavior
+- Add SVG Transform TC to behavior
+- Merge "Add PositionError to LocationGps and improve style" into tizen_2.1
+- Merge "add browerstate and netinfo test point to LocationNetwork" into tizen_2.1
+- Merge "Make 2D3DAnimation element align center" into tizen_2.1
+- Add PositionError to LocationGps and improve style
+- add browerstate and netinfo test point to LocationNetwork
+- Make 2D3DAnimation element align center
+- Add FullScreen TC to behavior
+- Update tests ui version to 0.2.4.
+
+* Fri May 10 2013 Yugang Fan <yugang.fan@intel.com> submit/tizen_2.1/20130508.080845@104acf0
+- Merge "Update Camera Microphone Accelerometer 2D3DAnimation test  case"
+- Update Camera Microphone Accelerometer 2D3DAnimation test  case
+- Update footer button align to center.
+- Behavior Test Messaging : AppName modify
+- Behavior Test LongAppName modify Change-Id: Ifc65870a93fc561fff04fe734c87c0ca90939c36
+- Update wgt id and require version due to spec change.
+- Improve 2D3DAnimation Accelerometer and LocationNetwork case
+- Behavior Test WebAPI : header, footer fixed
+- res folder delete & file move. TTS-1381
+- Behavior Test NFC : Add Contact Button
+- Process rewriting
+- Update Device WebAPI(purpose, bugs)
+- TTS-1340
+- Update version for ww19.3 release.
+- Update jquery libs to SDK build-in version and fix some UI issues.
+- Push update
+- Improve TC testing method and update style
+- Behavior TC Update(Device WebAPI)
+- Merge "Move test steps to info in CameraBack and Microphone"
+- Merge "Update Device WebAPI Module"
+- Move test steps to info in CameraBack and Microphone
+- Improve icons of Application and Bluetooth
+- Update Device WebAPI Module
+- Update WebAPI 16, Remove Content 1, Add res 1
+- Improve test description
+- Update behavior tests Device Web API 16
+- Updater behavior tests release version for ww17.5.
+- Update icons from LaunchBox
+- Update main css file to fix result popup overflow and button size.
+- Update footer button size and move version to popup.
+- Update behavior ui style, show version in homepage and add dev guide doc.
+- Behavior_Test_SystemSetting(Screen)
+- Behavior_Test_SystemSetting(NotificationEmail)
+- Behavior_Test_SystemSetting(IncomingCall)
+- Behavior_Test_SystemInfo
+- Behavior_Test_Push
+- Behavior_Test_Packag
+- Behavior_Test_Package
+- Behavior_Test_Notification
+- Behavior_Test_NFC
+- Behavior_Test_Messaging(S.MMS)
+- Behavior_Test_Messaging(Email)
+- Behavior_Test_Download
+- Behavior_Test_DataSync
+- Behavior_Test_Content
+- Behavior_Test_Bluetooth
+- Behavior_Test_Alarm
+- Update behavior ww17.3 release info.
+- Merge "Add one TC; Add reset button; Improve description of TCs"
+- Add one TC; Add reset button; Improve description of TCs
+- Add one TC; Add reset button; Improve description of TCs
+- Delete template test and update release version.
+- Add 7 new TCs into behavior
+- Init Tizen TCT behavior tests repo.
+- Initial empty repository
+
diff --git a/mobile/tct-behavior-tests/packaging/behavior.spec b/mobile/tct-behavior-tests/packaging/behavior.spec
new file mode 100755 (executable)
index 0000000..866fc63
--- /dev/null
@@ -0,0 +1,84 @@
+%define _unpackaged_files_terminate_build 0 
+
+Summary: TCT Behavior Tests
+Name: tct-behavior-tests
+Version: 3.0
+Release: 1
+License: BSD
+Group: test/tct/behavior
+Source: %name-%version.tar.gz
+BuildRequires: zip
+BuildRequires: hash-signer
+
+%description
+This is TCT behavior tests
+
+%prep
+%setup -q
+
+%build
+unset LD_AS_NEEDED  
+./autogen
+./configure --prefix=/usr
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+make install DESTDIR=$RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/index.html $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/config.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/icon.png $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.full.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/subtestresult.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/js $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/css $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/res $RPM_BUILD_DIR/%name
+cd $RPM_BUILD_DIR/%name
+mkdir -p $RPM_BUILD_ROOT/opt/%name/res/media
+cp -a $RPM_BUILD_DIR/%name-%version/res/font $RPM_BUILD_ROOT/opt/%name/res/font
+cp -a $RPM_BUILD_DIR/%name-%version/res/images $RPM_BUILD_ROOT/opt/%name/res/images
+cp -a $RPM_BUILD_DIR/%name-%version/res/js $RPM_BUILD_ROOT/opt/%name/res/js
+cp -a $RPM_BUILD_DIR/%name-%version/res/css $RPM_BUILD_ROOT/opt/%name/res/css
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/red-green.theora.ogv $RPM_BUILD_ROOT/opt/%name/res/media/
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/movie_5.mp4 $RPM_BUILD_ROOT/opt/%name/res/media/
+zip -rq $RPM_BUILD_ROOT/opt/%name/%name.wgt *
+hash-signer.sh -ad -p platform $RPM_BUILD_ROOT/opt/%name/%name.wgt
+cd -
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+rm -rf $RPM_BUILD_DIR/%name-%version
+
+%changelog
+
+%files
+/opt/%name
+
+%post
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Start install package /opt/%name.wgt"
+    [ -e /opt/%name/%name.wgt ] && $wgt_installer -i /opt/%name/%name.wgt
+else
+    echo "Fail to find wgt_installer"
+fi
+
+%preun
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Uninstall package %name"
+    i_pkg_nns=`wrt-launcher -l | grep %name | awk '{ print $5 }'`
+    for i_pkg_nn in $i_pkg_nns; do
+      echo "Package Name is $i_pkg_nn"
+      $wgt_installer -un $i_pkg_nn
+    done
+else
+    echo "Fail to find wgt_installer"
+fi
diff --git a/mobile/tct-behavior-tests/res/css/COPYING b/mobile/tct-behavior-tests/res/css/COPYING
new file mode 100755 (executable)
index 0000000..e24d498
--- /dev/null
@@ -0,0 +1,21 @@
+canvas-index.css comes from
+http://w3c-test.org/html/tests/approved/common/canvas-index.css
+without any modification.
+
+a-green.css comes from
+http://test.csswg.org/source/approved/css-masking/src/support/a-green.css
+without any modification.
+
+These tests are copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
+
+tests.css comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
diff --git a/mobile/tct-behavior-tests/res/css/a-green.css b/mobile/tct-behavior-tests/res/css/a-green.css
new file mode 100755 (executable)
index 0000000..636c1bc
--- /dev/null
@@ -0,0 +1 @@
+.a { color: green; }
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/css/blue-100x100.css b/mobile/tct-behavior-tests/res/css/blue-100x100.css
new file mode 100755 (executable)
index 0000000..84aded5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+#test-blue {
+    background-color: blue;
+    height: 100px;
+    width: 100px;
+}
diff --git a/mobile/tct-behavior-tests/res/css/canvas-index.css b/mobile/tct-behavior-tests/res/css/canvas-index.css
new file mode 100755 (executable)
index 0000000..3e09ffb
--- /dev/null
@@ -0,0 +1,31 @@
+body {
+    font-size: small;
+    font-family: sans-serif;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+h3 {
+    display: inline;
+    font-size: medium;
+}
+
+h3 + p {
+    display: inline;
+    margin-left: 0.5em;
+}
+
+li {
+    list-style-type: none;
+}
+
+ul {
+    padding-left: 2em;
+    margin-left: 0;
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/css/test.css b/mobile/tct-behavior-tests/res/css/test.css
new file mode 100755 (executable)
index 0000000..fc87d3a
--- /dev/null
@@ -0,0 +1 @@
+pre.prettyprint{padding:5px;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;margin-bottom:10px;background-color:#eee;overflow:auto;width:auto;width:650px !ie7;padding-bottom:20px !ie7;max-height:600px;}pre.prettyprint{max-height:none\9;}code.prettyprint{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;background-color:#eee;}p code.prettyprint{padding:1px 5px 1px 5px;}.str{color:maroon;}.kwd{color:#00008b;}.com{color:gray;}.typ{color:#2b91af;}.lit{color:maroon;}.pun{color:#000;}.pln{color:#000;}.tag{color:maroon;}.atn{color:red;}.atv{color:blue;}.dec{color:purple;}@media print{.str{color:#060;}.kwd{color:#006;font-weight:bold;}.com{color:#600;font-style:italic;}.typ{color:#404;font-weight:bold;}.lit{color:#044;}.pun{color:#440;}.pln{color:#000;}.tag{color:#006;font-weight:bold;}.atn{color:#404;}.atv{color:#060;}}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/css/tests.css b/mobile/tct-behavior-tests/res/css/tests.css
new file mode 100755 (executable)
index 0000000..45d0432
--- /dev/null
@@ -0,0 +1,123 @@
+@charset "UTF-8";
+/* CSS Document */
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
+       {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       font-weight: inherit;
+       font-style: inherit;
+       font-size: 0.96em;
+       font-family: arial;
+       vertical-align: baseline;
+}
+
+#testcasepage p {
+       text-align: left;
+}
+
+#suite_title {
+       text-align: left;
+}
+
+#btc {
+       text-align: right;
+}
+
+#testcasepage table {
+       border-collapse: separate;
+       border-spacing: 0;
+       margin-bottom: 1.4em;
+       vertical-align: middle;
+}
+
+#testcasepage th,#testcasepage td {
+       text-align: left;
+       font-weight: normal;
+       padding: 4px 10px 4px 5px;
+       vertical-align: middle;
+}
+
+#cases table {
+       width: 101%;
+}
+
+#fail_cases table {
+       width: 101%;
+}
+
+#title table {
+       width: 101%;
+}
+
+#device table {
+       width: 50%;
+}
+
+#summary table {
+       width: 50%;
+}
+
+#testcasepage th {
+       border-bottom: 1px solid #000;
+       background-color: #AAAAAA;
+       border-left: 1px solid #000;
+       border-top: 1px solid #000;
+       color: #000;
+       font-weight: bold;
+       vertical-align: bottom;
+}
+
+#testcasepage th:last-child,#testcasepage td:last-child {
+       border-right: 1px solid #000;
+}
+
+#testcasepage td {
+       border-left: 1px solid;
+       font-weight: normal;
+       border-bottom: 1px solid;
+}
+
+#testcasepage td.yellow_rate {
+       background-color: #ffcc00;
+}
+
+#testcasepage td.green_rate {
+       background-color: #33cc33;
+}
+
+#testcasepage td.dgreen_rate {
+       background-color: #339933;
+}
+
+#testcasepage td.red_rate {
+       background-color: #FF3333;
+}
+
+#title table,#title tr,#title td {
+       border-left: none;
+       border-bottom: none;
+       text-align: center;
+}
+
+#title td:last-child {
+       border-right: none;
+}
+
+#testcasepage h1 {
+       font-size: 2em;
+       font-family: Arial, sans-serif;
+       font-weight: bold;
+       line-height: 1;
+       color: #000;
+       margin-bottom: 0.75em;
+       padding-top: 0.25em;
+       font-weight: bold;
+}
+
+#goTopBtn {
+       right: 0px;
+       bottom: 0px;
+       position: fixed; +position: absolute;
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/font/COPYING b/mobile/tct-behavior-tests/res/font/COPYING
new file mode 100755 (executable)
index 0000000..a926b6b
--- /dev/null
@@ -0,0 +1,15 @@
+CanvasTest.ttf comes from
+http://w3c-test.org/html/tests/approved/fonts/CanvasTest.ttf
+without any modification.
+
+csstest-basic-bold.ttf comes from
+http://test.csswg.org/source/approved/fonts/CSSTest/csstest-basic-bold.ttf
+without any modification.
+
+The font copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
diff --git a/mobile/tct-behavior-tests/res/font/CanvasTest.ttf b/mobile/tct-behavior-tests/res/font/CanvasTest.ttf
new file mode 100755 (executable)
index 0000000..9023592
Binary files /dev/null and b/mobile/tct-behavior-tests/res/font/CanvasTest.ttf differ
diff --git a/mobile/tct-behavior-tests/res/font/csstest-basic-bold.ttf b/mobile/tct-behavior-tests/res/font/csstest-basic-bold.ttf
new file mode 100755 (executable)
index 0000000..8c53e6f
Binary files /dev/null and b/mobile/tct-behavior-tests/res/font/csstest-basic-bold.ttf differ
diff --git a/mobile/tct-behavior-tests/res/html/application.html b/mobile/tct-behavior-tests/res/html/application.html
new file mode 100755 (executable)
index 0000000..a1849e5
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Application Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-application</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("application" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access application api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/html/bluetooth.html b/mobile/tct-behavior-tests/res/html/bluetooth.html
new file mode 100755 (executable)
index 0000000..d8e3d8f
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Bluetooth Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-bluetooth</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("bluetooth" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access bluetooth api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/html/download.html b/mobile/tct-behavior-tests/res/html/download.html
new file mode 100755 (executable)
index 0000000..d2b1bbc
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Download Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-download</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("download" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access download api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/html/systeminfo.html b/mobile/tct-behavior-tests/res/html/systeminfo.html
new file mode 100755 (executable)
index 0000000..b17893a
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Systeminfo Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-systeminfo</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("systeminfo" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access systeminfo api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/html/wrtgeolocation.html b/mobile/tct-behavior-tests/res/html/wrtgeolocation.html
new file mode 100755 (executable)
index 0000000..4f2ee43
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<p id="demo">Please Wait While Your Location Loads....</p>
+<script>
+var x = document.getElementById("demo");
+
+function getLocation() {
+    if (navigator.geolocation) {
+        navigator.geolocation.getCurrentPosition(showPosition);
+    } else {
+        x.innerHTML = "Geolocation is not supported by this browser.";
+    }
+}
+
+function showPosition(position) {
+    x.innerHTML="Latitude: " + position.coords.latitude +
+    "<br>Longitude: " + position.coords.longitude;
+}
+
+</script>
+<body>
+<Input type="button" onclick="getLocation()" value="get location">
+</body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/html/wrtwebnotify.html b/mobile/tct-behavior-tests/res/html/wrtwebnotify.html
new file mode 100755 (executable)
index 0000000..811b508
--- /dev/null
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta charset="UTF-8">
+      <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+      <meta name="author" content="Aurelio De Rosa">
+      <title>Web Notifications API Demo by Aurelio De Rosa</title>
+      <style>
+       #div1{
+       position:absolute;
+       left:0px;
+       top:0px;
+        }
+        *
+         {
+            -webkit-box-sizing: border-box;
+            -moz-box-sizing: border-box;
+            box-sizing: border-box;
+         }
+
+         body
+         {
+            max-width: 500px;
+            margin: 2em auto;
+            padding: 0 0.5em;
+            font-size: 20px;
+         }
+
+         h1
+         {
+            text-align: center;
+         }
+
+         .api-support
+         {
+            display: block;
+         }
+
+         .hidden
+         {
+            display: none;
+         }
+
+         #custom-notification
+         {
+            margin-top: 1em;
+         }
+
+         label
+         {
+            display: block;
+         }
+
+         input[name="title"],
+         textarea
+         {
+            width: 100%;
+         }
+
+         input[name="title"]
+         {
+            height: 2em;
+         }
+
+         textarea
+         {
+            height: 5em;
+         }
+
+         .buttons-wrapper
+         {
+            text-align: center;
+         }
+
+         .button-demo
+         {
+            padding: 0.5em;
+            margin: 1em;
+         }
+
+         #log
+         {
+            height: 200px;
+            width: 100%;
+            overflow-y: scroll;
+            border: 1px solid #333333;
+            line-height: 1.3em;
+         }
+
+         .author
+         {
+            display: block;
+            margin-top: 1em;
+         }
+      </style>
+   </head>
+   <body>
+    <!--  <a href="http://www.sitepoint.com/introduction-web-notifications-api/">Go back to the article</a>
+
+      <h1>Web Notifications API</h1>
+
+      <span id="wn-unsupported" class="api-support hidden">API not supported</span>
+
+      <form id="custom-notification" action="">
+         <label for="title">Title:</label>
+         <input type="text" id="title" name="title" />
+
+         <label for="body">Body:</label>
+         <textarea id="body" name="body"></textarea>-->
+        <div id="div1">
+         <div class="buttons-wrapper">
+            <button id="button-wn-show-preset" class="button-demo">Show Notification</button>
+           <!-- <input type="submit" id="button-wn-show-custom" class="button-demo" value="Show Custom Notification" />-->
+         </div>
+       </div>
+      </form>
+
+      <!--<h3>Log</h3>
+      <div id="log"></div>
+      <button id="clear-log" class="button-demo">Clear log</button>
+
+      <small class="author">
+         Demo created by <a href="http://www.audero.it">Aurelio De Rosa</a>
+         (<a href="https://twitter.com/AurelioDeRosa">@AurelioDeRosa</a>).<br />
+         This demo is part of the <a href="https://github.com/AurelioDeRosa/HTML5-API-demos">HTML5 API demos repository</a>.
+      </small>-->
+
+      <script>
+         if (!('Notification' in window)) {
+            document.getElementById('wn-unsupported').classList.remove('hidden');
+            document.getElementById('button-wn-show-preset').setAttribute('disabled', 'disabled');
+            document.getElementById('button-wn-show-custom').setAttribute('disabled', 'disabled');
+         } else {
+            var log = document.getElementById('log');
+            var notificationEvents = ['onclick', 'onshow', 'onerror', 'onclose'];
+
+            function notifyUser(event) {
+               var title;
+               var options;
+
+               event.preventDefault();
+
+               if (event.target.id === 'button-wn-show-preset') {
+                  title = 'Email received';
+                  options = {
+                     body: 'You have a total of 3 unread emails',
+                     tag: 'preset',
+                     icon: 'http://www.audero.it/favicon.ico'
+                  };
+               } else {
+                  title = document.getElementById('title').value;
+                  options = {
+                     body: document.getElementById('body').value,
+                     tag: "custom"
+                  };
+               }
+
+               Notification.requestPermission(function() {
+                  var notification = new Notification(title, options);
+
+                  notificationEvents.forEach(function(eventName) {
+                     notification[eventName] = function(event) {
+                        log.innerHTML = 'Event "' + event.type + '" triggered for notification "' + notification.tag +
+                                '"<br />' + log.innerHTML;
+                     };
+                  });
+               });
+            }
+
+            document.getElementById('button-wn-show-preset').addEventListener('click', notifyUser);
+            document.getElementById('button-wn-show-custom').addEventListener('click', notifyUser);
+
+            document.getElementById('clear-log').addEventListener('click', function() {
+               log.innerHTML = '';
+            });
+         }
+      </script>
+   </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/images/1x1-white.png b/mobile/tct-behavior-tests/res/images/1x1-white.png
new file mode 100755 (executable)
index 0000000..dd43fae
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/1x1-white.png differ
diff --git a/mobile/tct-behavior-tests/res/images/COPYING b/mobile/tct-behavior-tests/res/images/COPYING
new file mode 100755 (executable)
index 0000000..5a13abf
--- /dev/null
@@ -0,0 +1,58 @@
+PNG_512x512_318Kb_BBB.png comes from
+http://testdata.meego.com
+without any modification.
+
+The file is under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+The ring.png comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/fast/backgrounds/resources/
+
+The file is under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
+
+
+-------------------------------
+back_top.png comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
+
+-------------------------------
+blue-100x100.png
+red-100x100.png
+green-100x100.png
+
+
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+        Hao, Yunfei <yunfeix.hao@intel.com>
diff --git a/mobile/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png b/mobile/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png
new file mode 100755 (executable)
index 0000000..2aa08a3
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png differ
diff --git a/mobile/tct-behavior-tests/res/images/back_top.png b/mobile/tct-behavior-tests/res/images/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/back_top.png differ
diff --git a/mobile/tct-behavior-tests/res/images/blue-100x100.png b/mobile/tct-behavior-tests/res/images/blue-100x100.png
new file mode 100755 (executable)
index 0000000..584f9c3
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/blue-100x100.png differ
diff --git a/mobile/tct-behavior-tests/res/images/green-100x100.png b/mobile/tct-behavior-tests/res/images/green-100x100.png
new file mode 100755 (executable)
index 0000000..d3aea5d
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/green-100x100.png differ
diff --git a/mobile/tct-behavior-tests/res/images/red-100x100.png b/mobile/tct-behavior-tests/res/images/red-100x100.png
new file mode 100755 (executable)
index 0000000..d13fc80
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/red-100x100.png differ
diff --git a/mobile/tct-behavior-tests/res/images/ring.png b/mobile/tct-behavior-tests/res/images/ring.png
new file mode 100755 (executable)
index 0000000..061bb94
Binary files /dev/null and b/mobile/tct-behavior-tests/res/images/ring.png differ
diff --git a/mobile/tct-behavior-tests/res/js/COPYING b/mobile/tct-behavior-tests/res/js/COPYING
new file mode 100755 (executable)
index 0000000..94a77ec
--- /dev/null
@@ -0,0 +1,6 @@
+application.js comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
diff --git a/mobile/tct-behavior-tests/res/js/application.js b/mobile/tct-behavior-tests/res/js/application.js
new file mode 100755 (executable)
index 0000000..72e2a78
--- /dev/null
@@ -0,0 +1,44 @@
+function getScrollTop(){
+    return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults (
+               $(window) ? $(window).scrollTop() : 0,
+               document.documentElement ? document.documentElement.scrollTop : 0,
+               document.body ? document.body.scrollTop : 0
+       );
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop(){
+    $(window) ? $(window).scrollTop(0): 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 :0;
+       document.body ? document.body.scrollTop = 0 : 0;
+} 
+
+function goTopEx(){
+    $node = $('#goTopBtn');
+       if(getScrollTop() > 0){
+                   $node.show();
+       }else{
+                   $node.hide();
+       }
+       
+    $(window).scroll(function(){
+           if(getScrollTop() > 0){
+                   $node.show();
+           }else{
+                   $node.hide();
+           }
+    });
+       
+    $node.click(function(){
+               setScrollTop();
+    });
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/js/csp.js b/mobile/tct-behavior-tests/res/js/csp.js
new file mode 100755 (executable)
index 0000000..de46ff6
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+
+var X = 10;
+var Y = eval(X + 17);
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/res/js/reportcspviolation.cgi b/mobile/tct-behavior-tests/res/js/reportcspviolation.cgi
new file mode 100755 (executable)
index 0000000..15d8cf4
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+import time
+import os
+print 'Content-Type: text/html\n\n'
+while True:
+    i = raw_input()
+    if i is None:
+        break
+    if str(i).strip()=='':
+        break
+    n = 1
+    if os.path.isfile('/tmp/csp-report.log'):
+        file_object_num = open('/tmp/csp-report.log','r')
+        for line in file_object_num:
+            if str(line).find("Time:") >= 0:
+                n = n+1
+        file_object_num.close( )
+    file_object = open('/tmp/csp-report.log', 'a')
+    file_object.write('\n %d   Time:' %n)
+    file_object.write( time.strftime(' %Y-%m-%d %H:%M:%S',time.localtime(time.time())))
+    file_object.write('\n')
+    file_object.write('     Data:')
+    file_object.write(i)
+    file_object.write('\n')
+    file_object.close( )
+    print i
diff --git a/mobile/tct-behavior-tests/res/js/test.js b/mobile/tct-behavior-tests/res/js/test.js
new file mode 100755 (executable)
index 0000000..8b868e4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
+function getVideoURI (){
+
+}
diff --git a/mobile/tct-behavior-tests/res/js/test81.js b/mobile/tct-behavior-tests/res/js/test81.js
new file mode 100755 (executable)
index 0000000..e582567
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+function getVideoURI (){
+
+}
diff --git a/mobile/tct-behavior-tests/res/js/test83.js b/mobile/tct-behavior-tests/res/js/test83.js
new file mode 100755 (executable)
index 0000000..d260698
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
diff --git a/mobile/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp b/mobile/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
new file mode 100755 (executable)
index 0000000..ee410d3
Binary files /dev/null and b/mobile/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp differ
diff --git a/mobile/tct-behavior-tests/res/media/COPYING b/mobile/tct-behavior-tests/res/media/COPYING
new file mode 100755 (executable)
index 0000000..2127517
--- /dev/null
@@ -0,0 +1,37 @@
+3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
+MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
+MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
+come from http://testdata.meego.com
+without any modification.
+
+These files are under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+red-green.theora.ogv comes from
+https://www.khronos.org/registry/webgl/sdk/tests/conformance/resources/red-green.theora.ogv
+without any modification.
+
+Khronos Group License (MIT):
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/mobile/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 b/mobile/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..a7e8564
Binary files /dev/null and b/mobile/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 differ
diff --git a/mobile/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 b/mobile/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..65b4781
Binary files /dev/null and b/mobile/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 differ
diff --git a/mobile/tct-behavior-tests/res/media/demo_sub.vtt b/mobile/tct-behavior-tests/res/media/demo_sub.vtt
new file mode 100755 (executable)
index 0000000..d21e616
--- /dev/null
@@ -0,0 +1,4 @@
+WEBVTT\r
+\r
+00:00:00.100 --> 00:00:05.334\r
+Pass\r
diff --git a/mobile/tct-behavior-tests/res/media/movie_5.mp4 b/mobile/tct-behavior-tests/res/media/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/mobile/tct-behavior-tests/res/media/movie_5.mp4 differ
diff --git a/mobile/tct-behavior-tests/res/media/red-green.theora.ogv b/mobile/tct-behavior-tests/res/media/red-green.theora.ogv
new file mode 100755 (executable)
index 0000000..1543915
Binary files /dev/null and b/mobile/tct-behavior-tests/res/media/red-green.theora.ogv differ
diff --git a/mobile/tct-behavior-tests/subtestresult.xml b/mobile/tct-behavior-tests/subtestresult.xml
new file mode 100755 (executable)
index 0000000..bee19c0
--- /dev/null
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testresult.xsl"?>
+<test_definition>
+<suite name="tct-behavior-tests">
+  <set name="CSP">
+      <testcase id="csp-none" result="N/A"></testcase>
+      <testcase id="csp-self" result="N/A"></testcase>
+      <testcase id="csp-asterisk" result="N/A"></testcase>
+      <testcase id="csp-cross-origin" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-csp" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-report-only" result="N/A"></testcase>
+      <testcase id="default-src_none" result="N/A"></testcase>
+      <testcase id="default-src_self" result="N/A"></testcase>
+      <testcase id="default-src_asterisk" result="N/A"></testcase>
+      <testcase id="default-src_cross_origin" result="N/A"></testcase>
+      <testcase id="sandbox-empty-ext" result="N/A"></testcase>
+      <testcase id="sandbox-empty-int" result="N/A"></testcase>
+      <testcase id="sandbox-empty-inline" result="N/A"></testcase>
+      <testcase id="sandbox-same-origin-allow-scripts" result="N/A"></testcase>
+      <testcase id="script-src_none" result="N/A"></testcase>
+      <testcase id="script-src_inline_eval" result="N/A"></testcase>
+      <testcase id="style-src_self" result="N/A"></testcase>
+  </set>
+  <set name="PackageManagement">
+      <testcase id="Sample-widget1" result="N/A"></testcase>
+      <testcase id="Sample-widget2" result="N/A"></testcase>
+      <testcase id="Sample-widget3" result="N/A"></testcase>
+      <testcase id="Sample-widget4" result="N/A"></testcase>
+      <testcase id="widget-version-1" result="N/A"></testcase>
+      <testcase id="npruntime-all-on-arm" result="N/A"></testcase>
+      <testcase id="npruntime-arm-on-x86" result="N/A"></testcase>
+  </set>
+  <set name="ConfigurationExtension">
+      <testcase id="application-content" result="N/A"></testcase>
+      <testcase id="setting-an-more" result="N/A"></testcase>
+      <testcase id="setting-an-one" result="N/A"></testcase>
+      <testcase id="setting-an-zero" result="N/A"></testcase>
+      <testcase id="setting-ar-true" result="N/A"></testcase>
+      <testcase id="setting-bs-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-enable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-disable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-enable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-default" result="N/A"></testcase>
+      <testcase id="setting-hwkey-disable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-enable" result="N/A"></testcase>
+      <testcase id="setting-install-location-internal-only-with-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-no-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-with-card" result="N/A"></testcase>
+  </set>
+  <set name="Stability">
+      <testcase id="test-half-memory" result="N/A"></testcase>
+      <testcase id="test-hd-image" result="N/A"></testcase>
+  </set>
+  <set name="WRTSupport">
+      <testcase id="debug-web-inspector-ubuntu" result="N/A"></testcase>
+      <testcase id="debug-web-inspector-windows7" result="N/A"></testcase>
+      <testcase id="lifecycle-unload-event" result="N/A"></testcase>
+      <testcase id="other-localization" result="N/A"></testcase>
+      <testcase id="other-uri-schemes" result="N/A"></testcase>
+      <testcase id="other-uri-schemes-mailto" result="N/A"></testcase>
+      <testcase id="other-widget-access-policy" result="N/A"></testcase>
+      <testcase id="protection-encryption-check" result="N/A"></testcase>
+      <testcase id="security-permission" result="N/A"></testcase>
+      <testcase id="security-policy" result="N/A"></testcase>
+      <testcase id="url-access-multi" result="N/A"></testcase>
+      <testcase id="url-access-multi-all" result="N/A"></testcase>
+      <testcase id="url-access-multi-subdomains" result="N/A"></testcase>
+  </set>
+  <set name="WRTUI">
+      <testcase id="application-rotation-sensor-enable" result="N/A"></testcase>
+      <testcase id="multiple-browsing-context" result="N/A"></testcase>
+      <testcase id="view-mode-fullscreen-rotation" result="N/A"></testcase>
+      <testcase id="view-mode-maximized-rotation" result="N/A"></testcase>
+  </set>
+</suite>
+</test_definition>
diff --git a/mobile/tct-behavior-tests/suite.json b/mobile/tct-behavior-tests/suite.json
new file mode 100755 (executable)
index 0000000..2e85b56
--- /dev/null
@@ -0,0 +1,110 @@
+{
+    "pkg-blacklist": [
+        "config.xml",
+        "pack.py",
+        "testcase.xsl",
+        "testresult.xsl",
+        "tests.css",
+        "icon.png",
+        "manifest.json",
+        "suite.json",
+        "inst.*"
+    ],
+    "pkg-list": {
+        "apk,cordova": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.apk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.android.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [
+                        "manifest.json"
+                    ],
+                    "copylist": {
+                        "tests.android.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                }
+            }
+        },
+        "wgt": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE.Apache-2.0": "LICENSE.Apache-2.0",
+                "LICENSE.BSD-3": "LICENSE.BSD-3",
+                "LICENSE.CC-BY-3.0": "LICENSE.CC-BY-3.0",
+                "inst.wgt.py": "inst.py",
+                "askpolicy.sh": "askpolicy.sh",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/html": "res/html",
+                "res/js": "res/js",
+                "res/media": "res/media",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.xml": "tests.xml"
+            },
+            "sign-flag": "true",
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "copylist": {
+                        "tests.xml": "tests.xml"
+                    },
+                    "install-path": ".",
+                    "sign-flag": "true"
+                }
+            }
+        },
+        "xpk": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.xpk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.tizen.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [],
+                    "copylist": {
+                        "tests.tizen.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                },
+                "tests/Viewport/ViewportTest": {
+                    "app-name": "ViewportTest",
+                    "blacklist": [],
+                    "install-path": "apps",
+                    "sign-flag": "true"
+                }
+            }
+        }
+    },
+    "pkg-name": "tct-behavior-tests"
+}
diff --git a/mobile/tct-behavior-tests/testcase.xsl b/mobile/tct-behavior-tests/testcase.xsl
new file mode 100755 (executable)
index 0000000..fb32685
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suites">
+            <a name="contents"/>
+            <table>
+              <tr>
+                <th>Test Suite</th>
+                <th>Total</th>
+                <th>Auto</th>
+                <th>Manual</th>
+              </tr>
+              <tr>
+                <td>
+                  Total
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase)"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])"/>
+                </td>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="title">
+            <table>
+              <tr>
+                <td class="title">
+                  <h1>Detailed Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="cases">
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Type</th>
+                  <th>Component</th>
+                  <th>Execution Type</th>
+                  <th>Description</th>
+                  <th>Specification</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="7">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <!-- xsl:sort select="@id" /> -->
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@type"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@component"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@execution_type"/>
+                      </td>
+                      <td>
+                        <p>
+                          Pre_condition:
+                          <xsl:value-of select=".//description/pre_condition"/>
+                        </p>
+                        <p>
+                          Post_condition:
+                          <xsl:value-of select=".//description/post_condition"/>
+                        </p>
+                        <p>
+                          Test Script Entry:
+                          <xsl:value-of select=".//description/test_script_entry"/>
+                        </p>
+                        <p>
+                          Steps:
+                          <p/>
+                          <xsl:for-each select=".//description/steps/step"><xsl:sort select="@order"/>
+                            Step
+                            <xsl:value-of select="@order"/>
+                            :
+                            <xsl:value-of select="./step_desc"/>
+                            ;
+                            <p/>
+                            Expected Result:
+                            <xsl:value-of select="./expected"/>
+                            <p/>
+                          </xsl:for-each>
+                        </p>
+                      </td>
+                      <td>
+                        <xsl:for-each select=".//specs/spec"><b>[Spec_Assertion]:</b><br/>
+                          [Category]:
+                          <xsl:value-of select="./spec_assertion/@category"/>
+                          <br/>
+                          [Section]:
+                          <xsl:value-of select="./spec_assertion/@section"/>
+                          <br/>
+                          [Specification]:
+                          <xsl:value-of select="./spec_assertion/@specification"/>
+                          <br/>
+                          [Interface]:
+                          <xsl:value-of select="./spec_assertion/@interface"/>
+                          <br/>
+                          <xsl:choose><xsl:when test="./spec_assertion/@element_name">
+                              [<xsl:value-of select="./spec_assertion/@element_type"/>]:
+                              <xsl:value-of select="./spec_assertion/@element_name"/>
+                              <br/>
+                            </xsl:when></xsl:choose>
+                          [URL]:
+                          <xsl:value-of select="./spec_url"/>
+                          <br/>
+                          [Statement]:
+                          <xsl:value-of select="./spec_statement"/>
+                          <br/>
+                        </xsl:for-each>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/mobile/tct-behavior-tests/testresult.xsl b/mobile/tct-behavior-tests/testresult.xsl
new file mode 100755 (executable)
index 0000000..c5199c0
--- /dev/null
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Report</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="device">
+            <table>
+              <tr>
+                <th colspan="2">Device Information</th>
+              </tr>
+              <tr>
+                <td>Device Name</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_name">
+                      <xsl:if test="test_definition/environment/@device_name = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_name"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device Model</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_model">
+                      <xsl:if test="test_definition/environment/@device_model = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_model"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>OS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@os_version">
+                      <xsl:if test="test_definition/environment/@os_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@os_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_id">
+                      <xsl:if test="test_definition/environment/@device_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Firmware Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@firmware_version">
+                      <xsl:if test="test_definition/environment/@firmware_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@firmware_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Build ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@build_id">
+                      <xsl:if test="test_definition/environment/@build_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@build_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Screen Size</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@screen_size">
+                      <xsl:if test="test_definition/environment/@screen_size = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@screen_size"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Resolution</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@resolution">
+                      <xsl:if test="test_definition/environment/@resolution = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@resolution"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Host Info</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@host">
+                      <xsl:if test="test_definition/environment/@host = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@host"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>CTS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@cts_version">
+                      <xsl:if test="test_definition/environment/@cts_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@cts_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Others</td>
+                <td>
+                  <xsl:if test="test_definition/environment/other = ''">
+                    N/A
+                  </xsl:if>
+                  <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="test_definition/environment/other"/>
+                  </xsl:call-template>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="summary">
+            <table>
+              <tr>
+                <th colspan="2">Test Summary</th>
+              </tr>
+              <tr>
+                <td>Test Plan Name</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/@test_plan_name"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Tests Total</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase)"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Passed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'PASS'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Failed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'FAIL'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Block</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Not Run</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Start time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/start_at"/>
+                </td>
+              </tr>
+              <tr>
+                <td>End time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/end_at"/>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suite_summary">
+            <div id="title">
+              <a name="contents"/>
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1>Test Summary by Suite</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <table>
+              <tr>
+                <th>Suite</th>
+                <th>Passed</th>
+                <th>Failed</th>
+                <th>Blocked</th>
+                <th>Not Run</th>
+                <th>Total</th>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <xsl:sort select="@name"/>
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'PASS'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'FAIL'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="fail_cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">
+                      Test Failures (
+                        <xsl:value-of select="count(test_definition/suite/set//testcase[@result = 'FAIL'])"/>
+                      )
+                    </h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <xsl:choose>
+                      <xsl:when test="@result">
+                        <xsl:if test="@result = 'FAIL'">
+                          <tr>
+                            <td>
+                              <xsl:value-of select="@id"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select="@purpose"/>
+                            </td>
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select=".//result_info/stdout"/>
+                              <xsl:if test=".//result_info/stdout = ''">
+                                N/A
+                              </xsl:if>
+                            </td>
+                          </tr>
+                        </xsl:if>
+                      </xsl:when>
+                    </xsl:choose>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+          <div id="cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">Detailed Test Results</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <xsl:choose>
+                        <xsl:when test="@result">
+                          <xsl:if test="@result = 'FAIL'">
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'PASS'">
+                            <td class="green_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'BLOCK' ">
+                            <td>
+                              BLOCK
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                            <td>
+                              Not Run
+                            </td>
+                          </xsl:if>
+                        </xsl:when>
+                        <xsl:otherwise>
+                          <td>
+                          </td>
+                        </xsl:otherwise>
+                      </xsl:choose>
+                      <td>
+                        <xsl:value-of select=".//result_info/stdout"/>
+                        <xsl:if test=".//result_info/stdout = ''">
+                          N/A
+                        </xsl:if>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+  <xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:variable name="cr">
+      <xsl:text>
+      </xsl:text>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="contains($word,$cr)">
+        <xsl:value-of select="substring-before($word,$cr)"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word,$cr)"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/mobile/tct-behavior-tests/tests.css b/mobile/tct-behavior-tests/tests.css
new file mode 100755 (executable)
index 0000000..c2ba69b
--- /dev/null
@@ -0,0 +1,132 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,\r
+#testcasepage h1,\r
+#testcasepage p,\r
+#testcasepage table,\r
+#testcasepage tr,\r
+#testcasepage th,\r
+#testcasepage td {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+  font-weight: inherit;\r
+  font-style: inherit;\r
+  font-size: 0.96em;\r
+  font-family: arial;\r
+  vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+  text-align: left;\r
+}\r
+\r
+#suite_title {\r
+  text-align: left;\r
+}\r
+\r
+#btc {\r
+  text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+  border-collapse: separate;\r
+  border-spacing: 0;\r
+  margin-bottom: 1.4em;\r
+  vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,\r
+#testcasepage td {\r
+  text-align: left;\r
+  font-weight: normal;\r
+  padding: 4px 10px 4px 5px;\r
+  vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+  width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+  width: 101%;\r
+}\r
+\r
+#title table {\r
+  width: 101%;\r
+}\r
+\r
+#device table {\r
+  width: 50%;\r
+}\r
+\r
+#summary table {\r
+  width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+  border-bottom: 1px solid #000;\r
+  background-color: #AAAAAA;\r
+  border-left: 1px solid #000;\r
+  border-top: 1px solid #000;\r
+  color: #000;\r
+  font-weight: bold;\r
+  vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,\r
+#testcasepage td:last-child {\r
+  border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+  border-left: 1px solid;\r
+  font-weight: normal;\r
+  border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+  background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+  background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+  background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+  background-color: #FF3333;\r
+}\r
+\r
+#title table,\r
+#title tr,\r
+#title td {\r
+  border-left: none;\r
+  border-bottom: none;\r
+  text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+  border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+  font-size: 2em;\r
+  font-family: Arial, sans-serif;\r
+  font-weight: bold;\r
+  line-height: 1;\r
+  color: #000;\r
+  margin-bottom: 0.75em;\r
+  padding-top: 0.25em;\r
+  font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+  right: 0px;\r
+  bottom: 0px;\r
+  position: fixed; +position: absolute;\r
+  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
+}\r
diff --git a/mobile/tct-behavior-tests/tests.full.xml b/mobile/tct-behavior-tests/tests.full.xml
new file mode 100755 (executable)
index 0000000..668a54d
--- /dev/null
@@ -0,0 +1,711 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase purpose="Media Playback Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MediaPlayback">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Video Track Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="VideoTrack">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="HTML5 Forms Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="HTML5Forms">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="2D/3D Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="2D3DAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SVG Transformation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SVGTransformation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Style Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSStyle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Canvas Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="Canvas-PicRotaScaleTransfVampix">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="CSS-AnimTransfBackgBordFont">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+      <testcase purpose="Camera Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Camera">
+        <capability name="http://tizen.org/feature/camera"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Camera via UserMedia Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CameraViaUserMedia">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Vibration Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Vibration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Location GPS Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="LocationGPS">
+        <capability name="http://tizen.org/feature/location.gps"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Accelerometer Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Accelerometer">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Gesture">
+      <testcase purpose="Touch Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Touch">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Drag and Drop Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DragandDrop">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Clipboard Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Clipboard">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase purpose="Viewport Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Viewport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase purpose="Page Visibility Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PageVisibility">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase purpose="Alarm Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Alarm">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Application">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControl">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Extending Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControlExtending">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Package Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Package">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Hybrid Application Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="HybridApplication">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Communication">
+      <testcase purpose="Bluetooth Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Bluetooth">
+        <capability name="http://tizen.org/feature/network.bluetooth"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Messaging SMS/MMS Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MessagingSMSMMS">
+        <capability name="http://tizen.org/feature/network.telephony"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Messaging Email Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MessagingEmail">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="NFC Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="NFC">
+        <capability name="http://tizen.org/feature/network.nfc"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Push Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Push">
+        <capability name="http://tizen.org/feature/network.push"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Social">
+      <testcase purpose="DataSync Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DataSync">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Content">
+      <testcase purpose="Download Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Download">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="FileReader Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FileReader">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="System">
+      <testcase purpose="Power Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Power">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemInfo Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemInfo">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemSetting Screen Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemSettingScreen">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemSetting IncomingCall Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemSettingIncomingCall">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Security Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Security">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="DeviceAPISecurity Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DeviceAPISecurity">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Notification Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Notification">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Full Screen Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FullScreen">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Web Runtime">
+      <testcase purpose="ApplicationLifecycle Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationLifecycle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Invisible Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationInvisible">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Dynamic Box Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DynamicBox">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSP Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSP">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Interface Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTUI">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Runtime Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Configuration Extension Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ConfigurationExtension">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Package Management Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PackageManagement">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Stability Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Stability">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Agent String Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="UserAgentString">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Cordova Support">
+      <testcase purpose="Cordova Support Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CordovaSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests.xml b/mobile/tct-behavior-tests/tests.xml
new file mode 100755 (executable)
index 0000000..e33bc60
--- /dev/null
@@ -0,0 +1,664 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase component="behavior" execution_type="manual" id="MediaPlayback" purpose="Media Playback Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="VideoTrack" purpose="Video Track Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="HTML5Forms" purpose="HTML5 Forms Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="2D3DAnimation" purpose="2D/3D Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="SVGTransformation" purpose="SVG Transformation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSSStyle" purpose="CSS Style Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSSAnimation" purpose="CSS Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Canvas-PicRotaScaleTransfVampix" purpose="Canvas Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSS-AnimTransfBackgBordFont" purpose="CSS Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+<!--       <testcase component="behavior" execution_type="manual" id="Camera" purpose="Camera Test">
+        <capability name="http://tizen.org/feature/media.audio_recording"/>
+        <capability name="http://tizen.org/feature/media.image_capture"/>
+        <capability name="http://tizen.org/feature/media.video_recording"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="CameraViaUserMedia" purpose="Camera via UserMedia Test">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="Vibration" purpose="Vibration Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="LocationGPS" purpose="Location GPS Test">
+        <capability name="http://tizen.org/feature/location.gps"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+ <!--     <testcase component="behavior" execution_type="manual" id="Accelerometer" purpose="Accelerometer Test">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>  -->
+    </set>
+    <set name="Gesture">
+      <testcase component="behavior" execution_type="manual" id="Touch" purpose="Touch Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="DragandDrop" purpose="Drag and Drop Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Clipboard" purpose="Clipboard Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Viewport" purpose="Viewport Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+      <testcase component="behavior" execution_type="manual" id="PageVisibility" purpose="Page Visibility Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase component="behavior" execution_type="manual" id="Alarm" purpose="Alarm Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+     <!--  <testcase component="behavior" execution_type="manual" id="Application" purpose="Application Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    <!--  <testcase component="behavior" execution_type="manual" id="AppControl" purpose="AppControl Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>-->
+      <testcase component="behavior" execution_type="manual" id="AppControlExtending" purpose="AppControl Extending Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Package" purpose="Package Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+     <testcase component="behavior" execution_type="manual" id="HybridApplication" purpose="Hybrid Application Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Communication">
+<!--       <testcase component="behavior" execution_type="manual" id="Bluetooth" purpose="Bluetooth Test">
+        <capability name="http://tizen.org/feature/network.bluetooth"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="MessagingSMSMMS" purpose="Messaging SMS/MMS Test">
+        <capability name="http://tizen.org/feature/network.telephony"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--      <testcase component="behavior" execution_type="manual" id="MessagingEmail" purpose="Messaging Email Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="NFC" purpose="NFC Test">
+        <capability name="http://tizen.org/feature/network.nfc"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="Push" purpose="Push Test">
+        <capability name="http://tizen.org/feature/network.push"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Social">
+<!--       <testcase component="behavior" execution_type="manual" id="DataSync" purpose="DataSync Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="Content">
+      <testcase component="behavior" execution_type="manual" id="Download" purpose="Download Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="FileReader" purpose="FileReader Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="System">
+      <testcase component="behavior" execution_type="manual" id="Power" purpose="Power Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="SystemInfo" purpose="SystemInfo Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="SystemSettingScreen" purpose="SystemSetting Screen Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="SystemSettingIncomingCall" purpose="SystemSetting IncomingCall Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="Security" purpose="Security Test">
+        <description>
+          <pre_condition/>
+       <!--   <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="DeviceAPISecurity" purpose="DeviceAPISecurity Test">
+        <description>
+          <pre_condition/>
+          <post_condition/> -->
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Notification" purpose="Notification Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="FullScreen" purpose="Full Screen Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Web Runtime">
+     <!-- <testcase component="behavior" execution_type="manual" id="ApplicationLifecycle" purpose="ApplicationLifecycle Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="ApplicationInvisible" purpose="Application Invisible Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="DynamicBox" purpose="Dynamic Box Test">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="CSP" purpose="CSP Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase component="behavior" execution_type="manual" id="WRTUI" purpose="User Interface Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--      <testcase component="behavior" execution_type="manual" id="WRTSupport" purpose="Application Runtime Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>   -->
+<!--      <testcase component="behavior" execution_type="manual" id="ConfigurationExtension" purpose="Configuration Extension Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="PackageManagement" purpose="Package Management Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Stability" purpose="Stability Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="UserAgentString" purpose="User Agent String Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Cordova Support">
+      <testcase component="behavior" execution_type="manual" id="CordovaSupport" purpose="Cordova Support Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/css/style.css b/mobile/tct-behavior-tests/tests/2D3DAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..4bd6a6c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 7px 0px;
+   width: 100%;
+}
+
+#viewArea {
+    width: 100%;
+    border: 1px solid black;
+}
+
+#mainTester {
+    position: relative;
+    width: 330px;
+    height: 300px;
+    margin: 0px auto;
+}
+
+.containing-element {padding-top: 20px;}
+
+.containing-element .ui-slider-switch { width: 100%;}
+
+.containing-element .ui-controlgroup-controls { width: 100%;}
+
+.ui-radio { width: 50%;}
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/index.html b/mobile/tct-behavior-tests/tests/2D3DAnimation/index.html
new file mode 100755 (executable)
index 0000000..e4f558a
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/SpinningBox.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+    <script src="js/khronos/webgl-utils.js"></script>
+    <script src="js/khronos/webgl-debug.js"></script>
+    <script src="js/khronos/J3DI.js"></script>
+    <script src="js/khronos/J3DIMath.js"></script>
+    <script id="vshader" type="x-shader/x-vertex">
+        uniform mat4 u_modelViewProjMatrix;
+        uniform mat4 u_normalMatrix;
+        uniform vec3 lightDir;
+
+        attribute vec3 vNormal;
+        attribute vec4 vColor;
+        attribute vec4 vPosition;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_Position = u_modelViewProjMatrix * vPosition;
+        v_Color = vColor;
+        vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
+        v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
+        }
+    </script>
+    <script id="fshader" type="x-shader/x-fragment">
+        precision mediump float;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_FragColor = vec4(v_Color.xyz * v_Dot, v_Color.a);
+        }
+    </script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="header">
+    <h1 id="main_page_title"></h1>
+</div>
+<div data-role= "content">
+    <div id="viewArea">
+        <div id="mainTester">
+            <canvas id="canvas" width="330" height="300">
+                Not support the &lt;canvas&gt;&gt; element. Ouch! failed!
+            </canvas>
+        </div>
+    </div>
+    <div class="containing-element">
+        <label for="flip-1">Status</label>
+        <select name="flip-1" id="flip-1" data-role="slider">
+            <option value="paused">Pause</option>
+            <option value="running" selected>Play</option>
+        </select>
+        <fieldset data-role="controlgroup" data-type="horizontal">
+            <legend>Direction</legend>
+            <input type="radio" name="radio-choice-2" id="direction-1" value="right" checked="checked" />
+            <label for="direction-1">To-Right</label>
+            <input type="radio" name="radio-choice-2" id="direction-2" value="left" />
+            <label for="direction-2">To-Left</label>
+        </fieldset>
+        <label for="slider-1">Size</label>
+        <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="1" max="5" value="3" data-show-value="true" class="hideButton">
+        <label for="speed-1">Speed</label>
+        <input type="range" name="speed-1" id="speed-1" data-highlight="true" min="1" max="10" value="5" data-show-value="true" class="hideButton">
+    </div>
+</div>
+<div data-role="footer" data-position="fixed">
+</div>
+<div data-role="popup" id="popup_info">
+  <font class="fontSize">
+    <p>Test Purpose: </p>
+    <p>Verifies the 3D cube is drawn with red, yellow, blue, green and light blue colors, rotate smoothly and correctly. And tests the functionality of play and pause, rotate direction left or right, size of the cube from 1 to 5, rotate speed from 1 to 10 levels.</p>
+    <p>Test Step: </p>
+    <ol>
+      <li>Click the "Status" slider to play or pause the animation.</li>
+      <li>Click the "Direction" buttons to change the rotation direction.</li>
+      <li>Click the "Size" slider to change the animation size.</li>
+      <li>Click the "Speed" slider to change the rotation speed.</li>
+    </ol>
+    <p>Expected Result: </p>
+    <p>Test passes if all the check points work well during rotation.</p>
+  </font>
+</div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/COPYING b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..c009395
--- /dev/null
@@ -0,0 +1,94 @@
+The SpinningBox.js comes from
+https://github.com/KhronosGroup/WebGL
+with some modifications.
+
++    var incAngle = 0;
++    var currentAngle = 0;
++    var bakAngle = 0;
++    var viewDistance = 18;
++    var requestId;
++    var canvas;
+
+     function reshape(gl)
+     {
+-        var canvas = document.getElementById('example');
++        var canvas = document.getElementById('canvas');
+-        var windowWidth = window.innerWidth - 20;
+-        var windowHeight = window.innerHeight - 40;
+-        if (windowWidth == width && windowHeight == height)
+-            return;
+
+-        width = windowWidth;
+-        height = windowHeight;
+-        canvas.width = width;
+-        canvas.height = height;
+
+-        gl.viewport(0, 0, width, height);
++        gl.viewport(0, 0, canvas.width, canvas.height);
+         g.perspectiveMatrix = new J3DIMatrix4();
+-        g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
++        g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+-        g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
++        g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+
+The jquery extension code of main.js(line 251~376) comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
++            setSize(value);
++            if (parseInt(newValue, 10) != 3) {
++                testFlag.size = true;
++                checkEnable();
++            }
++        } else if (ID == "speed-1") {
++            setSpeed(parseInt(newValue, 10));
++            if (parseInt(newValue, 10) != 5) {
++                testFlag.speed = true;
++                checkEnable();
++            }
++        } else if (ID == "flip-1") {
++            if (newValue == "0") {
++                stop();
++                $("input[type='radio']").checkboxradio('disable');
++                $("#slider-1").slider('disable');
++                $("#speed-1").slider('disable');
++                testFlag.status = true;
++                checkEnable();
++            } else if (newValue == "1"){
++                if (!isInit) {
++                    reStart();
++                    $("input[type='radio']").checkboxradio('enable');
++                    $("#slider-1").slider('enable');
++                    $("#speed-1").slider('enable');
++                } else {
++                    isInit = false;
++                }
++            }
++        }
+
+        if ( o.popupEnabled ) {
+            this._positionPopup();
+-           this._popup.html( newValue );
++           this._popup.html( Math.round(newValue) );
+        }
+
+        if ( o.showValue ) {
+-           this._handleText.html( newValue );
++           this._handleText.html( Math.round(newValue) );
+        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
+
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js
new file mode 100755 (executable)
index 0000000..7494f86
--- /dev/null
@@ -0,0 +1,141 @@
+var g = {}; // globals
+
+var incAngle = 0;
+var currentAngle = 0;
+var bakAngle = 0;
+var viewDistance = 18;
+var requestId;
+
+var canvas;
+
+
+function init() {
+    // Initialize
+    var gl = initWebGL(
+        // The id of the Canvas Element
+        "canvas");
+    if (!gl) {
+        return;
+    }
+
+    g.program = simpleSetup(
+        gl,
+        // The ids of the vertex and fragment shaders
+        "vshader", "fshader",
+        // The vertex attribute names used by the shaders.
+        // The order they appear here corresponds to their index
+        // used later.
+        [ "vNormal", "vColor", "vPosition"],
+        // The clear color and depth values
+        [ 0, 0, 0, 1 ], 10000);
+
+    // Set up a uniform variable for the shaders
+    gl.uniform3f(gl.getUniformLocation(g.program, "lightDir"), 0, 0, 1);
+
+    // Create a box. On return 'gl' contains a 'box' property with
+    // the BufferObjects containing the arrays for vertices,
+    // normals, texture coords, and indices.
+    g.box = makeBox(gl);
+
+    // Set up the array of colors for the cube's faces
+    var colors = new Uint8Array(
+        [  0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,     // v0-v1-v2-v3 front
+        1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,     // v0-v3-v4-v5 right
+        0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,     // v0-v5-v6-v1 top
+        1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,     // v1-v6-v7-v2 left
+        1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,     // v7-v4-v3-v2 bottom
+        0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1 ]    // v4-v7-v6-v5 back
+        );
+
+    // Set up the vertex buffer for the colors
+    g.box.colorObject = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+
+    // Create some matrices to use later and save their locations in the shaders
+    g.mvMatrix = new J3DIMatrix4();
+    g.u_normalMatrixLoc = gl.getUniformLocation(g.program, "u_normalMatrix");
+    g.normalMatrix = new J3DIMatrix4();
+    g.u_modelViewProjMatrixLoc =
+    gl.getUniformLocation(g.program, "u_modelViewProjMatrix");
+    g.mvpMatrix = new J3DIMatrix4();
+
+    // Enable all of the vertex attribute arrays.
+    gl.enableVertexAttribArray(0);
+    gl.enableVertexAttribArray(1);
+    gl.enableVertexAttribArray(2);
+
+    // Set up all the vertex attributes for vertices, normals and colors
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.vertexObject);
+    gl.vertexAttribPointer(2, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.normalObject);
+    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, false, 0, 0);
+
+    // Bind the index array
+    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g.box.indexObject);
+
+    return gl;
+}
+
+//width = -1;
+//height = -1;
+//var requestId;
+
+function reshape(gl) {
+    //var canvas = document.getElementById('example');
+    var canvas = document.getElementById('canvas');
+    //var windowWidth = window.innerWidth - 20;
+    //var windowHeight = window.innerHeight - 40;
+    //if (windowWidth == width && windowHeight == height)
+    //    return;
+
+    //width = windowWidth;
+    //height = windowHeight;
+    //canvas.width = width;
+    //canvas.height = height;
+
+    // Set the viewport and projection matrix for the scene
+    //gl.viewport(0, 0, width, height);
+    gl.viewport(0, 0, canvas.width, canvas.height);
+    g.perspectiveMatrix = new J3DIMatrix4();
+    //g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
+    g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+    //g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
+    g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+}
+
+function drawPicture(gl) {
+    // Make sure the canvas is sized correctly.
+    reshape(gl);
+
+    gl.clearColor(1.0, 1.0, 1.0, 1.0);
+    // Clear the canvas
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+    // Make a model/view matrix.
+    g.mvMatrix.makeIdentity();
+    g.mvMatrix.rotate(20, 1, 0, 0);
+    g.mvMatrix.rotate(currentAngle, 0, 1, 0);
+
+    // Construct the normal matrix from the model-view matrix and pass it in
+    g.normalMatrix.load(g.mvMatrix);
+    g.normalMatrix.invert();
+    g.normalMatrix.transpose();
+    g.normalMatrix.setUniform(gl, g.u_normalMatrixLoc, false);
+
+    // Construct the model-view * projection matrix and pass it in
+    g.mvpMatrix.load(g.perspectiveMatrix);
+    g.mvpMatrix.multiply(g.mvMatrix);
+    g.mvpMatrix.setUniform(gl, g.u_modelViewProjMatrixLoc, false);
+
+    // Draw the cube
+    gl.drawElements(gl.TRIANGLES, g.box.numIndices, gl.UNSIGNED_BYTE, 0);
+
+    currentAngle += incAngle;
+    if (currentAngle > 360)
+    currentAngle -= 360;
+}
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING
new file mode 100755 (executable)
index 0000000..5b85dfd
--- /dev/null
@@ -0,0 +1,26 @@
+The files come from https://www.khronos.org/registry/webgl/sdk/demos/webkit/resources/
+
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js
new file mode 100755 (executable)
index 0000000..597417b
--- /dev/null
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+//
+// initWebGL
+//
+// Initialize the Canvas element with the passed name as a WebGL object and return the
+// WebGLRenderingContext.
+function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    var canvas = document.getElementById(canvasName);
+    return gl = WebGLUtils.setupWebGL(canvas);
+}
+
+function log(msg) {
+    if (window.console && window.console.log) {
+        window.console.log(msg);
+    }
+}
+
+// Load shaders with the passed names and create a program with them. Return this program
+// in the 'program' property of the returned context.
+//
+// For each string in the passed attribs array, bind an attrib with that name at that index.
+// Once the attribs are bound, link the program and then use it.
+//
+// Set the clear color to the passed array (4 values) and set the clear depth to the passed value.
+// Enable depth testing and blending with a blend func of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA)
+//
+// A console function is added to the context: console(string). This can be replaced
+// by the caller. By default, it maps to the window.console() function on WebKit and to
+// an empty function on other browsers.
+//
+function simpleSetup(gl, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    // create our shaders
+    var vertexShader = loadShader(gl, vshader);
+    var fragmentShader = loadShader(gl, fshader);
+
+    // Create the program object
+    var program = gl.createProgram();
+
+    // Attach our two shaders to the program
+    gl.attachShader (program, vertexShader);
+    gl.attachShader (program, fragmentShader);
+
+    // Bind attributes
+    for (var i = 0; i < attribs.length; ++i)
+        gl.bindAttribLocation (program, i, attribs[i]);
+
+    // Link the program
+    gl.linkProgram(program);
+
+    // Check the link status
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked && !gl.isContextLost()) {
+        // something went wrong with the link
+        var error = gl.getProgramInfoLog (program);
+        log("Error in program linking:"+error);
+
+        gl.deleteProgram(program);
+        gl.deleteProgram(fragmentShader);
+        gl.deleteProgram(vertexShader);
+
+        return null;
+    }
+
+    gl.useProgram(program);
+
+    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
+    gl.clearDepth(clearDepth);
+
+    gl.enable(gl.DEPTH_TEST);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+    return program;
+}
+
+//
+// loadShader
+//
+// 'shaderId' is the id of a <script> element containing the shader source string.
+// Load this shader and return the WebGLShader object corresponding to it.
+//
+function loadShader(ctx, shaderId)
+{
+    var shaderScript = document.getElementById(shaderId);
+    if (!shaderScript) {
+        log("*** Error: shader script '"+shaderId+"' not found");
+        return null;
+    }
+
+    if (shaderScript.type == "x-shader/x-vertex")
+        var shaderType = ctx.VERTEX_SHADER;
+    else if (shaderScript.type == "x-shader/x-fragment")
+        var shaderType = ctx.FRAGMENT_SHADER;
+    else {
+        log("*** Error: shader script '"+shaderId+"' of undefined type '"+shaderScript.type+"'");
+        return null;
+    }
+
+    // Create the shader object
+    var shader = ctx.createShader(shaderType);
+
+    // Load the shader source
+    ctx.shaderSource(shader, shaderScript.text);
+
+    // Compile the shader
+    ctx.compileShader(shader);
+
+    // Check the compile status
+    var compiled = ctx.getShaderParameter(shader, ctx.COMPILE_STATUS);
+    if (!compiled && !ctx.isContextLost()) {
+        // Something went wrong during compilation; get the error
+        var error = ctx.getShaderInfoLog(shader);
+        log("*** Error compiling shader '"+shaderId+"':"+error);
+        ctx.deleteShader(shader);
+        return null;
+    }
+
+    return shader;
+}
+
+//
+// makeBox
+//
+// Create a box with vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeBox(ctx)
+{
+    // box
+    //    v6----- v5
+    //   /|      /|
+    //  v1------v0|
+    //  | |     | |
+    //  | |v7---|-|v4
+    //  |/      |/
+    //  v2------v3
+    //
+    // vertex coords array
+    var vertices = new Float32Array(
+        [  1, 1, 1,  -1, 1, 1,  -1,-1, 1,   1,-1, 1,    // v0-v1-v2-v3 front
+           1, 1, 1,   1,-1, 1,   1,-1,-1,   1, 1,-1,    // v0-v3-v4-v5 right
+           1, 1, 1,   1, 1,-1,  -1, 1,-1,  -1, 1, 1,    // v0-v5-v6-v1 top
+          -1, 1, 1,  -1, 1,-1,  -1,-1,-1,  -1,-1, 1,    // v1-v6-v7-v2 left
+          -1,-1,-1,   1,-1,-1,   1,-1, 1,  -1,-1, 1,    // v7-v4-v3-v2 bottom
+           1,-1,-1,  -1,-1,-1,  -1, 1,-1,   1, 1,-1 ]   // v4-v7-v6-v5 back
+    );
+
+    // normal array
+    var normals = new Float32Array(
+        [  0, 0, 1,   0, 0, 1,   0, 0, 1,   0, 0, 1,     // v0-v1-v2-v3 front
+           1, 0, 0,   1, 0, 0,   1, 0, 0,   1, 0, 0,     // v0-v3-v4-v5 right
+           0, 1, 0,   0, 1, 0,   0, 1, 0,   0, 1, 0,     // v0-v5-v6-v1 top
+          -1, 0, 0,  -1, 0, 0,  -1, 0, 0,  -1, 0, 0,     // v1-v6-v7-v2 left
+           0,-1, 0,   0,-1, 0,   0,-1, 0,   0,-1, 0,     // v7-v4-v3-v2 bottom
+           0, 0,-1,   0, 0,-1,   0, 0,-1,   0, 0,-1 ]    // v4-v7-v6-v5 back
+       );
+
+
+    // texCoord array
+    var texCoords = new Float32Array(
+        [  1, 1,   0, 1,   0, 0,   1, 0,    // v0-v1-v2-v3 front
+           0, 1,   0, 0,   1, 0,   1, 1,    // v0-v3-v4-v5 right
+           1, 0,   1, 1,   0, 1,   0, 0,    // v0-v5-v6-v1 top
+           1, 1,   0, 1,   0, 0,   1, 0,    // v1-v6-v7-v2 left
+           0, 0,   1, 0,   1, 1,   0, 1,    // v7-v4-v3-v2 bottom
+           0, 0,   1, 0,   1, 1,   0, 1 ]   // v4-v7-v6-v5 back
+       );
+
+    // index array
+    var indices = new Uint8Array(
+        [  0, 1, 2,   0, 2, 3,    // front
+           4, 5, 6,   4, 6, 7,    // right
+           8, 9,10,   8,10,11,    // top
+          12,13,14,  12,14,15,    // left
+          16,17,18,  16,18,19,    // bottom
+          20,21,22,  20,22,23 ]   // back
+      );
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, normals, ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, texCoords, ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, vertices, ctx.STATIC_DRAW);
+
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, indices, ctx.STATIC_DRAW);
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+
+    retval.numIndices = indices.length;
+
+    return retval;
+}
+
+//
+// makeSphere
+//
+// Create a sphere with the passed number of latitude and longitude bands and the passed radius.
+// Sphere has vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeSphere(ctx, radius, lats, longs)
+{
+    var geometryData = [ ];
+    var normalData = [ ];
+    var texCoordData = [ ];
+    var indexData = [ ];
+
+    for (var latNumber = 0; latNumber <= lats; ++latNumber) {
+        for (var longNumber = 0; longNumber <= longs; ++longNumber) {
+            var theta = latNumber * Math.PI / lats;
+            var phi = longNumber * 2 * Math.PI / longs;
+            var sinTheta = Math.sin(theta);
+            var sinPhi = Math.sin(phi);
+            var cosTheta = Math.cos(theta);
+            var cosPhi = Math.cos(phi);
+
+            var x = cosPhi * sinTheta;
+            var y = cosTheta;
+            var z = sinPhi * sinTheta;
+            var u = 1-(longNumber/longs);
+            var v = latNumber/lats;
+
+            normalData.push(x);
+            normalData.push(y);
+            normalData.push(z);
+            texCoordData.push(u);
+            texCoordData.push(v);
+            geometryData.push(radius * x);
+            geometryData.push(radius * y);
+            geometryData.push(radius * z);
+        }
+    }
+
+    for (var latNumber = 0; latNumber < lats; ++latNumber) {
+        for (var longNumber = 0; longNumber < longs; ++longNumber) {
+            var first = (latNumber * (longs+1)) + longNumber;
+            var second = first + longs + 1;
+            indexData.push(first);
+            indexData.push(second);
+            indexData.push(first+1);
+
+            indexData.push(second);
+            indexData.push(second+1);
+            indexData.push(first+1);
+        }
+    }
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
+
+    retval.numIndices = indexData.length;
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
+
+    return retval;
+}
+
+// Array of Objects curently loading
+var g_loadingObjects = [];
+
+// Clears all the Objects currently loading.
+// This is used to handle context lost events.
+function clearLoadingObjects() {
+    for (var ii = 0; ii < g_loadingObjects.length; ++ii) {
+        g_loadingObjects[ii].onreadystatechange = undefined;
+    }
+    g_loadingObjects = [];
+}
+
+//
+// loadObj
+//
+// Load a .obj file from the passed URL. Return an object with a 'loaded' property set to false.
+// When the object load is complete, the 'loaded' property becomes true and the following
+// properties are set:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function loadObj(ctx, url)
+{
+    var obj = { loaded : false };
+    obj.ctx = ctx;
+    var req = new XMLHttpRequest();
+    req.obj = obj;
+    g_loadingObjects.push(req);
+    req.onreadystatechange = function () { processLoadObj(req) };
+    req.open("GET", url, true);
+    req.send(null);
+    return obj;
+}
+
+function processLoadObj(req)
+{
+    log("req="+req)
+    // only if req shows "complete"
+    if (req.readyState == 4) {
+        g_loadingObjects.splice(g_loadingObjects.indexOf(req), 1);
+        doLoadObj(req.obj, req.responseText);
+    }
+}
+
+function doLoadObj(obj, text)
+{
+    vertexArray = [ ];
+    normalArray = [ ];
+    textureArray = [ ];
+    indexArray = [ ];
+
+    var vertex = [ ];
+    var normal = [ ];
+    var texture = [ ];
+    var facemap = { };
+    var index = 0;
+
+    // This is a map which associates a range of indices with a name
+    // The name comes from the 'g' tag (of the form "g NAME"). Indices
+    // are part of one group until another 'g' tag is seen. If any indices
+    // come before a 'g' tag, it is given the group name "_unnamed"
+    // 'group' is an object whose property names are the group name and
+    // whose value is a 2 element array with [<first index>, <num indices>]
+    var groups = { };
+    var currentGroup = [-1, 0];
+    groups["_unnamed"] = currentGroup;
+
+    var lines = text.split("\n");
+    for (var lineIndex in lines) {
+        var line = lines[lineIndex].replace(/[ \t]+/g, " ").replace(/\s\s*$/, "");
+
+        // ignore comments
+        if (line[0] == "#")
+            continue;
+
+        var array = line.split(" ");
+        if (array[0] == "g") {
+            // new group
+            currentGroup = [indexArray.length, 0];
+            groups[array[1]] = currentGroup;
+        }
+        else if (array[0] == "v") {
+            // vertex
+            vertex.push(parseFloat(array[1]));
+            vertex.push(parseFloat(array[2]));
+            vertex.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "vt") {
+            // normal
+            texture.push(parseFloat(array[1]));
+            texture.push(parseFloat(array[2]));
+        }
+        else if (array[0] == "vn") {
+            // normal
+            normal.push(parseFloat(array[1]));
+            normal.push(parseFloat(array[2]));
+            normal.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "f") {
+            // face
+            if (array.length != 4) {
+                log("*** Error: face '"+line+"' not handled");
+                continue;
+            }
+
+            for (var i = 1; i < 4; ++i) {
+                if (!(array[i] in facemap)) {
+                    // add a new entry to the map and arrays
+                    var f = array[i].split("/");
+                    var vtx, nor, tex;
+
+                    if (f.length == 1) {
+                        vtx = parseInt(f[0]) - 1;
+                        nor = vtx;
+                        tex = vtx;
+                    }
+                    else if (f.length = 3) {
+                        vtx = parseInt(f[0]) - 1;
+                        tex = parseInt(f[1]) - 1;
+                        nor = parseInt(f[2]) - 1;
+                    }
+                    else {
+                        obj.ctx.console.log("*** Error: did not understand face '"+array[i]+"'");
+                        return null;
+                    }
+
+                    // do the vertices
+                    var x = 0;
+                    var y = 0;
+                    var z = 0;
+                    if (vtx * 3 + 2 < vertex.length) {
+                        x = vertex[vtx*3];
+                        y = vertex[vtx*3+1];
+                        z = vertex[vtx*3+2];
+                    }
+                    vertexArray.push(x);
+                    vertexArray.push(y);
+                    vertexArray.push(z);
+
+                    // do the textures
+                    x = 0;
+                    y = 0;
+                    if (tex * 2 + 1 < texture.length) {
+                        x = texture[tex*2];
+                        y = texture[tex*2+1];
+                    }
+                    textureArray.push(x);
+                    textureArray.push(y);
+
+                    // do the normals
+                    x = 0;
+                    y = 0;
+                    z = 1;
+                    if (nor * 3 + 2 < normal.length) {
+                        x = normal[nor*3];
+                        y = normal[nor*3+1];
+                        z = normal[nor*3+2];
+                    }
+                    normalArray.push(x);
+                    normalArray.push(y);
+                    normalArray.push(z);
+
+                    facemap[array[i]] = index++;
+                }
+
+                indexArray.push(facemap[array[i]]);
+                currentGroup[1]++;
+            }
+        }
+    }
+
+    // set the VBOs
+    obj.normalObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.normalObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(normalArray), obj.ctx.STATIC_DRAW);
+
+    obj.texCoordObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.texCoordObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(textureArray), obj.ctx.STATIC_DRAW);
+
+    obj.vertexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.vertexObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(vertexArray), obj.ctx.STATIC_DRAW);
+
+    obj.numIndices = indexArray.length;
+    obj.indexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ELEMENT_ARRAY_BUFFER, obj.indexObject);
+    obj.ctx.bufferData(obj.ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexArray), obj.ctx.STREAM_DRAW);
+
+    obj.groups = groups;
+
+    obj.loaded = true;
+}
+
+// Array of images curently loading
+var g_loadingImages = [];
+
+// Clears all the images currently loading.
+// This is used to handle context lost events.
+function clearLoadingImages() {
+    for (var ii = 0; ii < g_loadingImages.length; ++ii) {
+        g_loadingImages[ii].onload = undefined;
+    }
+    g_loadingImages = [];
+}
+
+//
+// loadImageTexture
+//
+// Load the image at the passed url, place it in a new WebGLTexture object and return the WebGLTexture.
+//
+function loadImageTexture(ctx, url)
+{
+    var texture = ctx.createTexture();
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(ctx.TEXTURE_2D, 0, ctx.RGBA, 1, 1, 0, ctx.RGBA, ctx.UNSIGNED_BYTE, null);
+    var image = new Image();
+    g_loadingImages.push(image);
+    image.onload = function() { doLoadImageTexture(ctx, image, texture) }
+    image.src = url;
+    return texture;
+}
+
+function doLoadImageTexture(ctx, image, texture)
+{
+    g_loadingImages.splice(g_loadingImages.indexOf(image), 1);
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(
+        ctx.TEXTURE_2D, 0, ctx.RGBA, ctx.RGBA, ctx.UNSIGNED_BYTE, image);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MAG_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MIN_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.CLAMP_TO_EDGE);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.CLAMP_TO_EDGE);
+    //ctx.generateMipmap(ctx.TEXTURE_2D)
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+}
+
+//
+// Framerate object
+//
+// This object keeps track of framerate and displays it as the innerHTML text of the
+// HTML element with the passed id. Once created you call snapshot at the end
+// of every rendering cycle. Every 500ms the framerate is updated in the HTML element.
+//
+Framerate = function(id)
+{
+    this.numFramerates = 10;
+    this.framerateUpdateInterval = 500;
+    this.id = id;
+
+    this.renderTime = -1;
+    this.framerates = [ ];
+    self = this;
+    var fr = function() { self.updateFramerate() }
+    setInterval(fr, this.framerateUpdateInterval);
+}
+
+Framerate.prototype.updateFramerate = function()
+{
+    var tot = 0;
+    for (var i = 0; i < this.framerates.length; ++i)
+        tot += this.framerates[i];
+
+    var framerate = tot / this.framerates.length;
+    framerate = Math.round(framerate);
+    document.getElementById(this.id).innerHTML = "Framerate:"+framerate+"fps";
+}
+
+Framerate.prototype.snapshot = function()
+{
+    if (this.renderTime < 0)
+        this.renderTime = new Date().getTime();
+    else {
+        var newTime = new Date().getTime();
+        var t = newTime - this.renderTime;
+        if (t == 0)
+            return;
+        var framerate = 1000/t;
+        this.framerates.push(framerate);
+        while (this.framerates.length > this.numFramerates)
+            this.framerates.shift();
+        this.renderTime = newTime;
+    }
+}
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js
new file mode 100755 (executable)
index 0000000..b3e5b64
--- /dev/null
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ // J3DI (Jedi) - A support library for WebGL.
+
+/*
+    J3DI Math Classes. Currently includes:
+
+        J3DIMatrix4 - A 4x4 Matrix
+*/
+
+/*
+    J3DIMatrix4 class
+
+    This class implements a 4x4 matrix. It has functions which duplicate the
+    functionality of the OpenGL matrix stack and glut functions. On browsers
+    that support it, CSSMatrix is used to accelerate operations.
+
+    IDL:
+
+    [
+        Constructor(in J3DIMatrix4 matrix),                 // copy passed matrix into new J3DIMatrix4
+        Constructor(in sequence<float> array)               // create new J3DIMatrix4 with 16 floats (row major)
+        Constructor()                                       // create new J3DIMatrix4 with identity matrix
+    ]
+    interface J3DIMatrix4 {
+        void load(in J3DIMatrix4 matrix);                   // copy the values from the passed matrix
+        void load(in sequence<float> array);                // copy 16 floats into the matrix
+        sequence<float> getAsArray();                       // return the matrix as an array of 16 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void setUniform(in WebGLRenderingContext ctx,       // Send the matrix to the passed uniform location in the passed context
+                        in WebGLUniformLocation loc,
+                        in boolean transpose);
+        void makeIdentity();                                // replace the matrix with identity
+        void transpose();                                   // replace the matrix with its transpose
+        void invert();                                      // replace the matrix with its inverse
+
+        void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right
+        void translate(in J3DVector3 v);                    // multiply the matrix by passed translation values on the right
+        void scale(in float x, in float y, in float z);     // multiply the matrix by passed scale values on the right
+        void scale(in J3DVector3 v);                        // multiply the matrix by passed scale values on the right
+        void rotate(in float angle,                         // multiply the matrix by passed rotation values on the right
+                    in float x, in float y, in float z);    // (angle is in degrees)
+        void rotate(in float angle, in J3DVector3 v);       // multiply the matrix by passed rotation values on the right
+                                                            // (angle is in degrees)
+        void multiply(in CanvasMatrix matrix);              // multiply the matrix by the passed matrix on the right
+        void divide(in float divisor);                      // divide the matrix by the passed divisor
+        void ortho(in float left, in float right,           // multiply the matrix by the passed ortho values on the right
+                   in float bottom, in float top,
+                   in float near, in float far);
+        void frustum(in float left, in float right,         // multiply the matrix by the passed frustum values on the right
+                     in float bottom, in float top,
+                     in float near, in float far);
+        void perspective(in float fovy, in float aspect,    // multiply the matrix by the passed perspective values on the right
+                         in float zNear, in float zFar);
+        void lookat(in J3DVector3 eye,                      // multiply the matrix by the passed lookat
+                in J3DVector3 center,  in J3DVector3 up);   // values on the right
+         bool decompose(in J3DVector3 translate,            // decompose the matrix into the passed vector
+                        in J3DVector3 rotate,
+                        in J3DVector3 scale,
+                        in J3DVector3 skew,
+                        in sequence<float> perspective);
+    }
+
+    [
+        Constructor(in J3DVector3 vector),                  // copy passed vector into new J3DVector3
+        Constructor(in sequence<float> array)               // create new J3DVector3 with 3 floats from array
+        Constructor(in float x, in float y, in float z)     // create new J3DVector3 with 3 floats
+        Constructor()                                       // create new J3DVector3 with (0,0,0)
+    ]
+    interface J3DVector3 {
+        void load(in J3DVector3 vector);                    // copy the values from the passed vector
+        void load(in sequence<float> array);                // copy 3 floats into the vector from array
+        void load(in float x, in float y, in float z);      // copy 3 floats into the vector
+        sequence<float> getAsArray();                       // return the vector as an array of 3 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void multMatrix(in J3DIMatrix4 matrix);             // multiply the vector by the passed matrix (on the right)
+        float vectorLength();                               // return the length of the vector
+        float dot();                                        // return the dot product of the vector
+        void cross(in J3DVector3 v);                        // replace the vector with vector x v
+        void divide(in float divisor);                      // divide the vector by the passed divisor
+    }
+*/
+
+J3DIHasCSSMatrix = false;
+J3DIHasCSSMatrixCopy = false;
+/*
+if ("WebKitCSSMatrix" in window && ("media" in window && window.media.matchMedium("(-webkit-transform-3d)")) ||
+                                   ("styleMedia" in window && window.styleMedia.matchMedium("(-webkit-transform-3d)"))) {
+    J3DIHasCSSMatrix = true;
+    if ("copy" in WebKitCSSMatrix.prototype)
+        J3DIHasCSSMatrixCopy = true;
+}
+*/
+
+//  console.log("J3DIHasCSSMatrix="+J3DIHasCSSMatrix);
+//  console.log("J3DIHasCSSMatrixCopy="+J3DIHasCSSMatrixCopy);
+
+//
+// J3DIMatrix4
+//
+J3DIMatrix4 = function(m)
+{
+    if (J3DIHasCSSMatrix)
+        this.$matrix = new WebKitCSSMatrix;
+    else
+        this.$matrix = new Object;
+
+    if (typeof m == 'object') {
+        if ("length" in m && m.length >= 16) {
+            this.load(m);
+            return;
+        }
+        else if (m instanceof J3DIMatrix4) {
+            this.load(m);
+            return;
+        }
+    }
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.load = function()
+{
+    if (arguments.length == 1 && typeof arguments[0] == 'object') {
+        var matrix;
+
+        if (arguments[0] instanceof J3DIMatrix4) {
+            matrix = arguments[0].$matrix;
+
+            this.$matrix.m11 = matrix.m11;
+            this.$matrix.m12 = matrix.m12;
+            this.$matrix.m13 = matrix.m13;
+            this.$matrix.m14 = matrix.m14;
+
+            this.$matrix.m21 = matrix.m21;
+            this.$matrix.m22 = matrix.m22;
+            this.$matrix.m23 = matrix.m23;
+            this.$matrix.m24 = matrix.m24;
+
+            this.$matrix.m31 = matrix.m31;
+            this.$matrix.m32 = matrix.m32;
+            this.$matrix.m33 = matrix.m33;
+            this.$matrix.m34 = matrix.m34;
+
+            this.$matrix.m41 = matrix.m41;
+            this.$matrix.m42 = matrix.m42;
+            this.$matrix.m43 = matrix.m43;
+            this.$matrix.m44 = matrix.m44;
+            return;
+        }
+        else
+            matrix = arguments[0];
+
+        if ("length" in matrix && matrix.length >= 16) {
+            this.$matrix.m11 = matrix[0];
+            this.$matrix.m12 = matrix[1];
+            this.$matrix.m13 = matrix[2];
+            this.$matrix.m14 = matrix[3];
+
+            this.$matrix.m21 = matrix[4];
+            this.$matrix.m22 = matrix[5];
+            this.$matrix.m23 = matrix[6];
+            this.$matrix.m24 = matrix[7];
+
+            this.$matrix.m31 = matrix[8];
+            this.$matrix.m32 = matrix[9];
+            this.$matrix.m33 = matrix[10];
+            this.$matrix.m34 = matrix[11];
+
+            this.$matrix.m41 = matrix[12];
+            this.$matrix.m42 = matrix[13];
+            this.$matrix.m43 = matrix[14];
+            this.$matrix.m44 = matrix[15];
+            return;
+        }
+    }
+
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.getAsArray = function()
+{
+    return [
+        this.$matrix.m11, this.$matrix.m12, this.$matrix.m13, this.$matrix.m14,
+        this.$matrix.m21, this.$matrix.m22, this.$matrix.m23, this.$matrix.m24,
+        this.$matrix.m31, this.$matrix.m32, this.$matrix.m33, this.$matrix.m34,
+        this.$matrix.m41, this.$matrix.m42, this.$matrix.m43, this.$matrix.m44
+    ];
+}
+
+J3DIMatrix4.prototype.getAsFloat32Array = function()
+{
+    if (J3DIHasCSSMatrixCopy) {
+        var array = new Float32Array(16);
+        this.$matrix.copy(array);
+        return array;
+    }
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIMatrix4.prototype.setUniform = function(ctx, loc, transpose)
+{
+    if (J3DIMatrix4.setUniformArray == undefined) {
+        J3DIMatrix4.setUniformWebGLArray = new Float32Array(16);
+        J3DIMatrix4.setUniformArray = new Array(16);
+    }
+
+    if (J3DIHasCSSMatrixCopy)
+        this.$matrix.copy(J3DIMatrix4.setUniformWebGLArray);
+    else {
+        J3DIMatrix4.setUniformArray[0] = this.$matrix.m11;
+        J3DIMatrix4.setUniformArray[1] = this.$matrix.m12;
+        J3DIMatrix4.setUniformArray[2] = this.$matrix.m13;
+        J3DIMatrix4.setUniformArray[3] = this.$matrix.m14;
+        J3DIMatrix4.setUniformArray[4] = this.$matrix.m21;
+        J3DIMatrix4.setUniformArray[5] = this.$matrix.m22;
+        J3DIMatrix4.setUniformArray[6] = this.$matrix.m23;
+        J3DIMatrix4.setUniformArray[7] = this.$matrix.m24;
+        J3DIMatrix4.setUniformArray[8] = this.$matrix.m31;
+        J3DIMatrix4.setUniformArray[9] = this.$matrix.m32;
+        J3DIMatrix4.setUniformArray[10] = this.$matrix.m33;
+        J3DIMatrix4.setUniformArray[11] = this.$matrix.m34;
+        J3DIMatrix4.setUniformArray[12] = this.$matrix.m41;
+        J3DIMatrix4.setUniformArray[13] = this.$matrix.m42;
+        J3DIMatrix4.setUniformArray[14] = this.$matrix.m43;
+        J3DIMatrix4.setUniformArray[15] = this.$matrix.m44;
+
+        J3DIMatrix4.setUniformWebGLArray.set(J3DIMatrix4.setUniformArray);
+    }
+
+    ctx.uniformMatrix4fv(loc, transpose, J3DIMatrix4.setUniformWebGLArray);
+}
+
+J3DIMatrix4.prototype.makeIdentity = function()
+{
+    this.$matrix.m11 = 1;
+    this.$matrix.m12 = 0;
+    this.$matrix.m13 = 0;
+    this.$matrix.m14 = 0;
+
+    this.$matrix.m21 = 0;
+    this.$matrix.m22 = 1;
+    this.$matrix.m23 = 0;
+    this.$matrix.m24 = 0;
+
+    this.$matrix.m31 = 0;
+    this.$matrix.m32 = 0;
+    this.$matrix.m33 = 1;
+    this.$matrix.m34 = 0;
+
+    this.$matrix.m41 = 0;
+    this.$matrix.m42 = 0;
+    this.$matrix.m43 = 0;
+    this.$matrix.m44 = 1;
+}
+
+J3DIMatrix4.prototype.transpose = function()
+{
+    var tmp = this.$matrix.m12;
+    this.$matrix.m12 = this.$matrix.m21;
+    this.$matrix.m21 = tmp;
+
+    tmp = this.$matrix.m13;
+    this.$matrix.m13 = this.$matrix.m31;
+    this.$matrix.m31 = tmp;
+
+    tmp = this.$matrix.m14;
+    this.$matrix.m14 = this.$matrix.m41;
+    this.$matrix.m41 = tmp;
+
+    tmp = this.$matrix.m23;
+    this.$matrix.m23 = this.$matrix.m32;
+    this.$matrix.m32 = tmp;
+
+    tmp = this.$matrix.m24;
+    this.$matrix.m24 = this.$matrix.m42;
+    this.$matrix.m42 = tmp;
+
+    tmp = this.$matrix.m34;
+    this.$matrix.m34 = this.$matrix.m43;
+    this.$matrix.m43 = tmp;
+}
+
+J3DIMatrix4.prototype.invert = function()
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.inverse();
+        return;
+    }
+
+    // Calculate the 4x4 determinant
+    // If the determinant is zero,
+    // then the inverse matrix is not unique.
+    var det = this._determinant4x4();
+
+    if (Math.abs(det) < 1e-8)
+        return null;
+
+    this._makeAdjoint();
+
+    // Scale the adjoint matrix to get the inverse
+    this.$matrix.m11 /= det;
+    this.$matrix.m12 /= det;
+    this.$matrix.m13 /= det;
+    this.$matrix.m14 /= det;
+
+    this.$matrix.m21 /= det;
+    this.$matrix.m22 /= det;
+    this.$matrix.m23 /= det;
+    this.$matrix.m24 /= det;
+
+    this.$matrix.m31 /= det;
+    this.$matrix.m32 /= det;
+    this.$matrix.m33 /= det;
+    this.$matrix.m34 /= det;
+
+    this.$matrix.m41 /= det;
+    this.$matrix.m42 /= det;
+    this.$matrix.m43 /= det;
+    this.$matrix.m44 /= det;
+}
+
+J3DIMatrix4.prototype.translate = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 0;
+        if (y == undefined)
+            y = 0;
+        if (z == undefined)
+            z = 0;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.translate(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m41 = x;
+    matrix.$matrix.m42 = y;
+    matrix.$matrix.m43 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.scale = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 1;
+        if (z == undefined) {
+            if (y == undefined) {
+                y = x;
+                z = x;
+            }
+            else
+                z = 1;
+        }
+        else if (y == undefined)
+            y = x;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.scale(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = x;
+    matrix.$matrix.m22 = y;
+    matrix.$matrix.m33 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.rotate = function(angle,x,y,z)
+{
+    // Forms are (angle, x,y,z), (angle,vector), (angleX, angleY, angleZ), (angle)
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (arguments.length == 1) {
+            x = 0;
+            y = 0;
+            z = 1;
+        }
+        else if (arguments.length == 3) {
+            this.rotate(angle, 1,0,0); // about X axis
+            this.rotate(x, 0,1,0); // about Y axis
+            this.rotate(y, 0,0,1); // about Z axis
+            return;
+        }
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.rotateAxisAngle(x, y, z, angle);
+        return;
+    }
+
+    // angles are in degrees. Switch to radians
+    angle = angle / 180 * Math.PI;
+
+    angle /= 2;
+    var sinA = Math.sin(angle);
+    var cosA = Math.cos(angle);
+    var sinA2 = sinA * sinA;
+
+    // normalize
+    var len = Math.sqrt(x * x + y * y + z * z);
+    if (len == 0) {
+        // bad vector, just use something reasonable
+        x = 0;
+        y = 0;
+        z = 1;
+    } else if (len != 1) {
+        x /= len;
+        y /= len;
+        z /= len;
+    }
+
+    var mat = new J3DIMatrix4();
+
+    // optimize case where axis is along major axis
+    if (x == 1 && y == 0 && z == 0) {
+        mat.$matrix.m11 = 1;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 2 * sinA * cosA;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = -2 * sinA * cosA;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 1 && z == 0) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = -2 * sinA * cosA;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 2 * sinA * cosA;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 0 && z == 1) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 2 * sinA * cosA;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = -2 * sinA * cosA;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else {
+        var x2 = x*x;
+        var y2 = y*y;
+        var z2 = z*z;
+
+        mat.$matrix.m11 = 1 - 2 * (y2 + z2) * sinA2;
+        mat.$matrix.m12 = 2 * (x * y * sinA2 + z * sinA * cosA);
+        mat.$matrix.m13 = 2 * (x * z * sinA2 - y * sinA * cosA);
+        mat.$matrix.m21 = 2 * (y * x * sinA2 - z * sinA * cosA);
+        mat.$matrix.m22 = 1 - 2 * (z2 + x2) * sinA2;
+        mat.$matrix.m23 = 2 * (y * z * sinA2 + x * sinA * cosA);
+        mat.$matrix.m31 = 2 * (z * x * sinA2 + y * sinA * cosA);
+        mat.$matrix.m32 = 2 * (z * y * sinA2 - x * sinA * cosA);
+        mat.$matrix.m33 = 1 - 2 * (x2 + y2) * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    }
+    this.multiply(mat);
+}
+
+J3DIMatrix4.prototype.multiply = function(mat)
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.multiply(mat.$matrix);
+        return;
+    }
+
+    var m11 = (mat.$matrix.m11 * this.$matrix.m11 + mat.$matrix.m12 * this.$matrix.m21
+               + mat.$matrix.m13 * this.$matrix.m31 + mat.$matrix.m14 * this.$matrix.m41);
+    var m12 = (mat.$matrix.m11 * this.$matrix.m12 + mat.$matrix.m12 * this.$matrix.m22
+               + mat.$matrix.m13 * this.$matrix.m32 + mat.$matrix.m14 * this.$matrix.m42);
+    var m13 = (mat.$matrix.m11 * this.$matrix.m13 + mat.$matrix.m12 * this.$matrix.m23
+               + mat.$matrix.m13 * this.$matrix.m33 + mat.$matrix.m14 * this.$matrix.m43);
+    var m14 = (mat.$matrix.m11 * this.$matrix.m14 + mat.$matrix.m12 * this.$matrix.m24
+               + mat.$matrix.m13 * this.$matrix.m34 + mat.$matrix.m14 * this.$matrix.m44);
+
+    var m21 = (mat.$matrix.m21 * this.$matrix.m11 + mat.$matrix.m22 * this.$matrix.m21
+               + mat.$matrix.m23 * this.$matrix.m31 + mat.$matrix.m24 * this.$matrix.m41);
+    var m22 = (mat.$matrix.m21 * this.$matrix.m12 + mat.$matrix.m22 * this.$matrix.m22
+               + mat.$matrix.m23 * this.$matrix.m32 + mat.$matrix.m24 * this.$matrix.m42);
+    var m23 = (mat.$matrix.m21 * this.$matrix.m13 + mat.$matrix.m22 * this.$matrix.m23
+               + mat.$matrix.m23 * this.$matrix.m33 + mat.$matrix.m24 * this.$matrix.m43);
+    var m24 = (mat.$matrix.m21 * this.$matrix.m14 + mat.$matrix.m22 * this.$matrix.m24
+               + mat.$matrix.m23 * this.$matrix.m34 + mat.$matrix.m24 * this.$matrix.m44);
+
+    var m31 = (mat.$matrix.m31 * this.$matrix.m11 + mat.$matrix.m32 * this.$matrix.m21
+               + mat.$matrix.m33 * this.$matrix.m31 + mat.$matrix.m34 * this.$matrix.m41);
+    var m32 = (mat.$matrix.m31 * this.$matrix.m12 + mat.$matrix.m32 * this.$matrix.m22
+               + mat.$matrix.m33 * this.$matrix.m32 + mat.$matrix.m34 * this.$matrix.m42);
+    var m33 = (mat.$matrix.m31 * this.$matrix.m13 + mat.$matrix.m32 * this.$matrix.m23
+               + mat.$matrix.m33 * this.$matrix.m33 + mat.$matrix.m34 * this.$matrix.m43);
+    var m34 = (mat.$matrix.m31 * this.$matrix.m14 + mat.$matrix.m32 * this.$matrix.m24
+               + mat.$matrix.m33 * this.$matrix.m34 + mat.$matrix.m34 * this.$matrix.m44);
+
+    var m41 = (mat.$matrix.m41 * this.$matrix.m11 + mat.$matrix.m42 * this.$matrix.m21
+               + mat.$matrix.m43 * this.$matrix.m31 + mat.$matrix.m44 * this.$matrix.m41);
+    var m42 = (mat.$matrix.m41 * this.$matrix.m12 + mat.$matrix.m42 * this.$matrix.m22
+               + mat.$matrix.m43 * this.$matrix.m32 + mat.$matrix.m44 * this.$matrix.m42);
+    var m43 = (mat.$matrix.m41 * this.$matrix.m13 + mat.$matrix.m42 * this.$matrix.m23
+               + mat.$matrix.m43 * this.$matrix.m33 + mat.$matrix.m44 * this.$matrix.m43);
+    var m44 = (mat.$matrix.m41 * this.$matrix.m14 + mat.$matrix.m42 * this.$matrix.m24
+               + mat.$matrix.m43 * this.$matrix.m34 + mat.$matrix.m44 * this.$matrix.m44);
+
+    this.$matrix.m11 = m11;
+    this.$matrix.m12 = m12;
+    this.$matrix.m13 = m13;
+    this.$matrix.m14 = m14;
+
+    this.$matrix.m21 = m21;
+    this.$matrix.m22 = m22;
+    this.$matrix.m23 = m23;
+    this.$matrix.m24 = m24;
+
+    this.$matrix.m31 = m31;
+    this.$matrix.m32 = m32;
+    this.$matrix.m33 = m33;
+    this.$matrix.m34 = m34;
+
+    this.$matrix.m41 = m41;
+    this.$matrix.m42 = m42;
+    this.$matrix.m43 = m43;
+    this.$matrix.m44 = m44;
+}
+
+J3DIMatrix4.prototype.divide = function(divisor)
+{
+    this.$matrix.m11 /= divisor;
+    this.$matrix.m12 /= divisor;
+    this.$matrix.m13 /= divisor;
+    this.$matrix.m14 /= divisor;
+
+    this.$matrix.m21 /= divisor;
+    this.$matrix.m22 /= divisor;
+    this.$matrix.m23 /= divisor;
+    this.$matrix.m24 /= divisor;
+
+    this.$matrix.m31 /= divisor;
+    this.$matrix.m32 /= divisor;
+    this.$matrix.m33 /= divisor;
+    this.$matrix.m34 /= divisor;
+
+    this.$matrix.m41 /= divisor;
+    this.$matrix.m42 /= divisor;
+    this.$matrix.m43 /= divisor;
+    this.$matrix.m44 /= divisor;
+
+}
+
+J3DIMatrix4.prototype.ortho = function(left, right, bottom, top, near, far)
+{
+    var tx = (left + right) / (left - right);
+    var ty = (top + bottom) / (top - bottom);
+    var tz = (far + near) / (far - near);
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = 2 / (left - right);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+    matrix.$matrix.m31 = 0;
+    matrix.$matrix.m32 = 0;
+    matrix.$matrix.m33 = -2 / (far - near);
+    matrix.$matrix.m34 = 0;
+    matrix.$matrix.m41 = tx;
+    matrix.$matrix.m42 = ty;
+    matrix.$matrix.m43 = tz;
+    matrix.$matrix.m44 = 1;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.frustum = function(left, right, bottom, top, near, far)
+{
+    var matrix = new J3DIMatrix4();
+    var A = (right + left) / (right - left);
+    var B = (top + bottom) / (top - bottom);
+    var C = -(far + near) / (far - near);
+    var D = -(2 * far * near) / (far - near);
+
+    matrix.$matrix.m11 = (2 * near) / (right - left);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 * near / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = A;
+    matrix.$matrix.m32 = B;
+    matrix.$matrix.m33 = C;
+    matrix.$matrix.m34 = -1;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = D;
+    matrix.$matrix.m44 = 0;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar)
+{
+    var top = Math.tan(fovy * Math.PI / 360) * zNear;
+    var bottom = -top;
+    var left = aspect * bottom;
+    var right = aspect * top;
+    this.frustum(left, right, bottom, top, zNear, zFar);
+}
+
+J3DIMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz)
+{
+    if (typeof eyez == 'object' && "length" in eyez) {
+        var t = eyez;
+        upx = t[0];
+        upy = t[1];
+        upz = t[2];
+
+        t = eyey;
+        centerx = t[0];
+        centery = t[1];
+        centerz = t[2];
+
+        t = eyex;
+        eyex = t[0];
+        eyey = t[1];
+        eyez = t[2];
+    }
+
+    var matrix = new J3DIMatrix4();
+
+    // Make rotation matrix
+
+    // Z vector
+    var zx = eyex - centerx;
+    var zy = eyey - centery;
+    var zz = eyez - centerz;
+    var mag = Math.sqrt(zx * zx + zy * zy + zz * zz);
+    if (mag) {
+        zx /= mag;
+        zy /= mag;
+        zz /= mag;
+    }
+
+    // Y vector
+    var yx = upx;
+    var yy = upy;
+    var yz = upz;
+
+    // X vector = Y cross Z
+    xx =  yy * zz - yz * zy;
+    xy = -yx * zz + yz * zx;
+    xz =  yx * zy - yy * zx;
+
+    // Recompute Y = Z cross X
+    yx = zy * xz - zz * xy;
+    yy = -zx * xz + zz * xx;
+    yx = zx * xy - zy * xx;
+
+    // cross product gives area of parallelogram, which is < 1.0 for
+    // non-perpendicular unit-length vectors; so normalize x, y here
+
+    mag = Math.sqrt(xx * xx + xy * xy + xz * xz);
+    if (mag) {
+        xx /= mag;
+        xy /= mag;
+        xz /= mag;
+    }
+
+    mag = Math.sqrt(yx * yx + yy * yy + yz * yz);
+    if (mag) {
+        yx /= mag;
+        yy /= mag;
+        yz /= mag;
+    }
+
+    matrix.$matrix.m11 = xx;
+    matrix.$matrix.m12 = xy;
+    matrix.$matrix.m13 = xz;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = yx;
+    matrix.$matrix.m22 = yy;
+    matrix.$matrix.m23 = yz;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = zx;
+    matrix.$matrix.m32 = zy;
+    matrix.$matrix.m33 = zz;
+    matrix.$matrix.m34 = 0;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = 0;
+    matrix.$matrix.m44 = 1;
+    matrix.translate(-eyex, -eyey, -eyez);
+
+    this.multiply(matrix);
+}
+
+// Returns true on success, false otherwise. All params are Array objects
+J3DIMatrix4.prototype.decompose = function(_translate, _rotate, _scale, _skew, _perspective)
+{
+    // Normalize the matrix.
+    if (this.$matrix.m44 == 0)
+        return false;
+
+    // Gather the params
+    var translate, rotate, scale, skew, perspective;
+
+    var translate = (_translate == undefined || !("length" in _translate)) ? new J3DIVector3 : _translate;
+    var rotate = (_rotate == undefined || !("length" in _rotate)) ? new J3DIVector3 : _rotate;
+    var scale = (_scale == undefined || !("length" in _scale)) ? new J3DIVector3 : _scale;
+    var skew = (_skew == undefined || !("length" in _skew)) ? new J3DIVector3 : _skew;
+    var perspective = (_perspective == undefined || !("length" in _perspective)) ? new Array(4) : _perspective;
+
+    var matrix = new J3DIMatrix4(this);
+
+    matrix.divide(matrix.$matrix.m44);
+
+    // perspectiveMatrix is used to solve for perspective, but it also provides
+    // an easy way to test for singularity of the upper 3x3 component.
+    var perspectiveMatrix = new J3DIMatrix4(matrix);
+
+    perspectiveMatrix.$matrix.m14 = 0;
+    perspectiveMatrix.$matrix.m24 = 0;
+    perspectiveMatrix.$matrix.m34 = 0;
+    perspectiveMatrix.$matrix.m44 = 1;
+
+    if (perspectiveMatrix._determinant4x4() == 0)
+        return false;
+
+    // First, isolate perspective.
+    if (matrix.$matrix.m14 != 0 || matrix.$matrix.m24 != 0 || matrix.$matrix.m34 != 0) {
+        // rightHandSide is the right hand side of the equation.
+        var rightHandSide = [ matrix.$matrix.m14, matrix.$matrix.m24, matrix.$matrix.m34, matrix.$matrix.m44 ];
+
+        // Solve the equation by inverting perspectiveMatrix and multiplying
+        // rightHandSide by the inverse.
+        var inversePerspectiveMatrix = new J3DIMatrix4(perspectiveMatrix);
+        inversePerspectiveMatrix.invert();
+        var transposedInversePerspectiveMatrix = new J3DIMatrix4(inversePerspectiveMatrix);
+        transposedInversePerspectiveMatrix.transpose();
+        transposedInversePerspectiveMatrix.multVecMatrix(perspective, rightHandSide);
+
+        // Clear the perspective partition
+        matrix.$matrix.m14 = matrix.$matrix.m24 = matrix.$matrix.m34 = 0
+        matrix.$matrix.m44 = 1;
+    }
+    else {
+        // No perspective.
+        perspective[0] = perspective[1] = perspective[2] = 0;
+        perspective[3] = 1;
+    }
+
+    // Next take care of translation
+    translate[0] = matrix.$matrix.m41
+    matrix.$matrix.m41 = 0
+    translate[1] = matrix.$matrix.m42
+    matrix.$matrix.m42 = 0
+    translate[2] = matrix.$matrix.m43
+    matrix.$matrix.m43 = 0
+
+    // Now get scale and shear. 'row' is a 3 element array of 3 component vectors
+    var row0 = new J3DIVector3(matrix.$matrix.m11, matrix.$matrix.m12, matrix.$matrix.m13);
+    var row1 = new J3DIVector3(matrix.$matrix.m21, matrix.$matrix.m22, matrix.$matrix.m23);
+    var row2 = new J3DIVector3(matrix.$matrix.m31, matrix.$matrix.m32, matrix.$matrix.m33);
+
+    // Compute X scale factor and normalize first row.
+    scale[0] = row0.vectorLength();
+    row0.divide(scale[0]);
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    skew[0] = row0.dot(row1);
+    row1.combine(row0, 1.0, -skew[0]);
+
+    // Now, compute Y scale and normalize 2nd row.
+    scale[1] = row1.vectorLength();
+    row1.divide(scale[1]);
+    skew[0] /= scale[1];
+
+    // Compute XZ and YZ shears, orthogonalize 3rd row
+    skew[1] = row1.dot(row2);
+    row2.combine(row0, 1.0, -skew[1]);
+    skew[2] = row1.dot(row2);
+    row2.combine(row1, 1.0, -skew[2]);
+
+    // Next, get Z scale and normalize 3rd row.
+    scale[2] = row2.vectorLength();
+    row2.divide(scale[2]);
+    skew[1] /= scale[2];
+    skew[2] /= scale[2];
+
+    // At this point, the matrix (in rows) is orthonormal.
+    // Check for a coordinate system flip.  If the determinant
+    // is -1, then negate the matrix and the scaling factors.
+    var pdum3 = new J3DIVector3(row1);
+    pdum3.cross(row2);
+    if (row0.dot(pdum3) < 0) {
+        for (i = 0; i < 3; i++) {
+            scale[i] *= -1;
+            row[0][i] *= -1;
+            row[1][i] *= -1;
+            row[2][i] *= -1;
+        }
+    }
+
+    // Now, get the rotations out
+    rotate[1] = Math.asin(-row0[2]);
+    if (Math.cos(rotate[1]) != 0) {
+        rotate[0] = Math.atan2(row1[2], row2[2]);
+        rotate[2] = Math.atan2(row0[1], row0[0]);
+    }
+    else {
+        rotate[0] = Math.atan2(-row2[0], row1[1]);
+        rotate[2] = 0;
+    }
+
+    // Convert rotations to degrees
+    var rad2deg = 180 / Math.PI;
+    rotate[0] *= rad2deg;
+    rotate[1] *= rad2deg;
+    rotate[2] *= rad2deg;
+
+    return true;
+}
+
+J3DIMatrix4.prototype._determinant2x2 = function(a, b, c, d)
+{
+    return a * d - b * c;
+}
+
+J3DIMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3)
+{
+    return a1 * this._determinant2x2(b2, b3, c2, c3)
+         - b1 * this._determinant2x2(a2, a3, c2, c3)
+         + c1 * this._determinant2x2(a2, a3, b2, b3);
+}
+
+J3DIMatrix4.prototype._determinant4x4 = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4)
+         - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4)
+         + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4)
+         - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+}
+
+J3DIMatrix4.prototype._makeAdjoint = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    // Row column labeling reversed since we transpose rows & columns
+    this.$matrix.m11  =   this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m21  = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m31  =   this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
+    this.$matrix.m41  = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+
+    this.$matrix.m12  = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m22  =   this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m32  = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
+    this.$matrix.m42  =   this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
+
+    this.$matrix.m13  =   this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m23  = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m33  =   this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
+    this.$matrix.m43  = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
+
+    this.$matrix.m14  = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m24  =   this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m34  = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
+    this.$matrix.m44  =   this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
+}
+
+//
+// J3DIVector3
+//
+J3DIVector3 = function(x,y,z)
+{
+    this.load(x,y,z);
+}
+
+J3DIVector3.prototype.load = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        this[0] = x[0];
+        this[1] = x[1];
+        this[2] = x[2];
+    }
+    else if (typeof x == 'number') {
+        this[0] = x;
+        this[1] = y;
+        this[2] = z;
+    }
+    else {
+        this[0] = 0;
+        this[1] = 0;
+        this[2] = 0;
+    }
+}
+
+J3DIVector3.prototype.getAsArray = function()
+{
+    return [ this[0], this[1], this[2] ];
+}
+
+J3DIVector3.prototype.getAsFloat32Array = function()
+{
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIVector3.prototype.vectorLength = function()
+{
+    return Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);
+}
+
+J3DIVector3.prototype.divide = function(divisor)
+{
+    this[0] /= divisor; this[1] /= divisor; this[2] /= divisor;
+}
+
+J3DIVector3.prototype.cross = function(v)
+{
+    this[0] =  this[1] * v[2] - this[2] * v[1];
+    this[1] = -this[0] * v[2] + this[2] * v[0];
+    this[2] =  this[0] * v[1] - this[1] * v[0];
+}
+
+J3DIVector3.prototype.dot = function(v)
+{
+    return this[0] * v[0] + this[1] * v[1] + this[2] * v[2];
+}
+
+J3DIVector3.prototype.combine = function(v, ascl, bscl)
+{
+    this[0] = (ascl * this[0]) + (bscl * v[0]);
+    this[1] = (ascl * this[1]) + (bscl * v[1]);
+    this[2] = (ascl * this[2]) + (bscl * v[2]);
+}
+
+J3DIVector3.prototype.multVecMatrix = function(matrix)
+{
+    var x = this[0];
+    var y = this[1];
+    var z = this[2];
+
+    this[0] = matrix.$matrix.m41 + x * matrix.$matrix.m11 + y * matrix.$matrix.m21 + z * matrix.$matrix.m31;
+    this[1] = matrix.$matrix.m42 + x * matrix.$matrix.m12 + y * matrix.$matrix.m22 + z * matrix.$matrix.m32;
+    this[2] = matrix.$matrix.m43 + x * matrix.$matrix.m13 + y * matrix.$matrix.m23 + z * matrix.$matrix.m33;
+    var w = matrix.$matrix.m44 + x * matrix.$matrix.m14 + y * matrix.$matrix.m24 + z * matrix.$matrix.m34;
+    if (w != 1 && w != 0) {
+        this[0] /= w;
+        this[1] /= w;
+        this[2] /= w;
+    }
+}
+
+J3DIVector3.prototype.toString = function()
+{
+    return "["+this[0]+","+this[1]+","+this[2]+"]";
+}
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js
new file mode 100755 (executable)
index 0000000..26a8872
--- /dev/null
@@ -0,0 +1,875 @@
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+// Various functions for helping debug WebGL apps.
+
+WebGLDebugUtils = function() {
+
+/**
+ * Wrapped logging function.
+ * @param {string} msg Message to log.
+ */
+var log = function(msg) {
+  if (window.console && window.console.log) {
+    window.console.log(msg);
+  }
+};
+
+/**
+ * Wrapped error logging function.
+ * @param {string} msg Message to log.
+ */
+var error = function(msg) {
+  if (window.console && window.console.error) {
+    window.console.error(msg);
+  } else {
+    log(msg);
+  }
+};
+
+/**
+ * Which arguements are enums.
+ * @type {!Object.<number, string>}
+ */
+var glValidEnumContexts = {
+
+  // Generic setters and getters
+
+  'enable': { 0:true },
+  'disable': { 0:true },
+  'getParameter': { 0:true },
+
+  // Rendering
+
+  'drawArrays': { 0:true },
+  'drawElements': { 0:true, 2:true },
+
+  // Shaders
+
+  'createShader': { 0:true },
+  'getShaderParameter': { 1:true },
+  'getProgramParameter': { 1:true },
+
+  // Vertex attributes
+
+  'getVertexAttrib': { 1:true },
+  'vertexAttribPointer': { 2:true },
+
+  // Textures
+
+  'bindTexture': { 0:true },
+  'activeTexture': { 0:true },
+  'getTexParameter': { 0:true, 1:true },
+  'texParameterf': { 0:true, 1:true },
+  'texParameteri': { 0:true, 1:true, 2:true },
+  'texImage2D': { 0:true, 2:true, 6:true, 7:true },
+  'texSubImage2D': { 0:true, 6:true, 7:true },
+  'copyTexImage2D': { 0:true, 2:true },
+  'copyTexSubImage2D': { 0:true },
+  'generateMipmap': { 0:true },
+
+  // Buffer objects
+
+  'bindBuffer': { 0:true },
+  'bufferData': { 0:true, 2:true },
+  'bufferSubData': { 0:true },
+  'getBufferParameter': { 0:true, 1:true },
+
+  // Renderbuffers and framebuffers
+
+  'pixelStorei': { 0:true, 1:true },
+  'readPixels': { 4:true, 5:true },
+  'bindRenderbuffer': { 0:true },
+  'bindFramebuffer': { 0:true },
+  'checkFramebufferStatus': { 0:true },
+  'framebufferRenderbuffer': { 0:true, 1:true, 2:true },
+  'framebufferTexture2D': { 0:true, 1:true, 2:true },
+  'getFramebufferAttachmentParameter': { 0:true, 1:true, 2:true },
+  'getRenderbufferParameter': { 0:true, 1:true },
+  'renderbufferStorage': { 0:true, 1:true },
+
+  // Frame buffer operations (clear, blend, depth test, stencil)
+
+  'clear': { 0:true },
+  'depthFunc': { 0:true },
+  'blendFunc': { 0:true, 1:true },
+  'blendFuncSeparate': { 0:true, 1:true, 2:true, 3:true },
+  'blendEquation': { 0:true },
+  'blendEquationSeparate': { 0:true, 1:true },
+  'stencilFunc': { 0:true },
+  'stencilFuncSeparate': { 0:true, 1:true },
+  'stencilMaskSeparate': { 0:true },
+  'stencilOp': { 0:true, 1:true, 2:true },
+  'stencilOpSeparate': { 0:true, 1:true, 2:true, 3:true },
+
+  // Culling
+
+  'cullFace': { 0:true },
+  'frontFace': { 0:true },
+};
+
+/**
+ * Map of numbers to names.
+ * @type {Object}
+ */
+var glEnums = null;
+
+/**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ *    you have more than one context it doesn't matter which one
+ *    you pass in, it is only used to pull out constants.
+ */
+function init(ctx) {
+  if (glEnums == null) {
+    glEnums = { };
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'number') {
+        glEnums[ctx[propertyName]] = propertyName;
+      }
+    }
+  }
+}
+
+/**
+ * Checks the utils have been initialized.
+ */
+function checkInit() {
+  if (glEnums == null) {
+    throw 'WebGLDebugUtils.init(ctx) not called';
+  }
+}
+
+/**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+function mightBeEnum(value) {
+  checkInit();
+  return (glEnums[value] !== undefined);
+}
+
+/**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+function glEnumToString(value) {
+  checkInit();
+  var name = glEnums[value];
+  return (name !== undefined) ? name :
+      ("*UNKNOWN WebGL ENUM (0x" + value.toString(16) + ")");
+}
+
+/**
+ * Returns the string version of a WebGL argument.
+ * Attempts to convert enum arguments to strings.
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+function glFunctionArgToString(functionName, argumentIndex, value) {
+  var funcInfo = glValidEnumContexts[functionName];
+  if (funcInfo !== undefined) {
+    if (funcInfo[argumentIndex]) {
+      return glEnumToString(value);
+    }
+  }
+  if (value === null) {
+    return "null";
+  } else if (value === undefined) {
+    return "undefined";
+  } else {
+    return value.toString();
+  }
+}
+
+/**
+ * Converts the arguments of a WebGL function to a string.
+ * Attempts to convert enum arguments to strings.
+ *
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} args The arguments.
+ * @return {string} The arguments as a string.
+ */
+function glFunctionArgsToString(functionName, args) {
+  // apparently we can't do args.join(",");
+  var argStr = "";
+  for (var ii = 0; ii < args.length; ++ii) {
+    argStr += ((ii == 0) ? '' : ', ') +
+        glFunctionArgToString(functionName, ii, args[ii]);
+  }
+  return argStr;
+};
+
+
+function makePropertyWrapper(wrapper, original, propertyName) {
+  //log("wrap prop: " + propertyName);
+  wrapper.__defineGetter__(propertyName, function() {
+    return original[propertyName];
+  });
+  // TODO(gmane): this needs to handle properties that take more than
+  // one value?
+  wrapper.__defineSetter__(propertyName, function(value) {
+    //log("set: " + propertyName);
+    original[propertyName] = value;
+  });
+}
+
+// Makes a function that calls a function on another object.
+function makeFunctionWrapper(original, functionName) {
+  //log("wrap fn: " + functionName);
+  var f = original[functionName];
+  return function() {
+    //log("call: " + functionName);
+    var result = f.apply(original, arguments);
+    return result;
+  };
+}
+
+/**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not gl.NO_ERROR.
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ *        wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
+ *        The function to call when gl.getError returns an
+ *        error. If not specified the default function calls
+ *        console.log with a message.
+ * @param {!function(funcName, args): void} opt_onFunc The
+ *        function to call when each webgl function is called.
+ *        You can use this to log all calls for example.
+ */
+function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc) {
+  init(ctx);
+  opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
+        // apparently we can't do args.join(",");
+        var argStr = "";
+        for (var ii = 0; ii < args.length; ++ii) {
+          argStr += ((ii == 0) ? '' : ', ') +
+              glFunctionArgToString(functionName, ii, args[ii]);
+        }
+        error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
+              "(" + argStr + ")");
+      };
+
+  // Holds booleans for each GL error so after we get the error ourselves
+  // we can still return it to the client app.
+  var glErrorShadow = { };
+
+  // Makes a function that calls a WebGL function and then calls getError.
+  function makeErrorWrapper(ctx, functionName) {
+    return function() {
+      if (opt_onFunc) {
+        opt_onFunc(functionName, arguments);
+      }
+      var result = ctx[functionName].apply(ctx, arguments);
+      var err = ctx.getError();
+      if (err != 0) {
+        glErrorShadow[err] = true;
+        opt_onErrorFunc(err, functionName, arguments);
+      }
+      return result;
+    };
+  }
+
+  // Make a an object that has a copy of every property of the WebGL context
+  // but wraps all functions.
+  var wrapper = {};
+  for (var propertyName in ctx) {
+    if (typeof ctx[propertyName] == 'function') {
+       wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
+     } else {
+       makePropertyWrapper(wrapper, ctx, propertyName);
+     }
+  }
+
+  // Override the getError function with one that returns our saved results.
+  wrapper.getError = function() {
+    for (var err in glErrorShadow) {
+      if (glErrorShadow.hasOwnProperty(err)) {
+        if (glErrorShadow[err]) {
+          glErrorShadow[err] = false;
+          return err;
+        }
+      }
+    }
+    return ctx.NO_ERROR;
+  };
+
+  return wrapper;
+}
+
+function resetToInitialState(ctx) {
+  var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
+  var tmp = ctx.createBuffer();
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
+  for (var ii = 0; ii < numAttribs; ++ii) {
+    ctx.disableVertexAttribArray(ii);
+    ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
+    ctx.vertexAttrib1f(ii, 0);
+  }
+  ctx.deleteBuffer(tmp);
+
+  var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
+  for (var ii = 0; ii < numTextureUnits; ++ii) {
+    ctx.activeTexture(ctx.TEXTURE0 + ii);
+    ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+  }
+
+  ctx.activeTexture(ctx.TEXTURE0);
+  ctx.useProgram(null);
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+  ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+  ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
+  ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
+  ctx.disable(ctx.BLEND);
+  ctx.disable(ctx.CULL_FACE);
+  ctx.disable(ctx.DEPTH_TEST);
+  ctx.disable(ctx.DITHER);
+  ctx.disable(ctx.SCISSOR_TEST);
+  ctx.blendColor(0, 0, 0, 0);
+  ctx.blendEquation(ctx.FUNC_ADD);
+  ctx.blendFunc(ctx.ONE, ctx.ZERO);
+  ctx.clearColor(0, 0, 0, 0);
+  ctx.clearDepth(1);
+  ctx.clearStencil(-1);
+  ctx.colorMask(true, true, true, true);
+  ctx.cullFace(ctx.BACK);
+  ctx.depthFunc(ctx.LESS);
+  ctx.depthMask(true);
+  ctx.depthRange(0, 1);
+  ctx.frontFace(ctx.CCW);
+  ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
+  ctx.lineWidth(1);
+  ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
+  ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
+  // TODO: Delete this IF.
+  if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
+    ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
+  }
+  ctx.polygonOffset(0, 0);
+  ctx.sampleCoverage(1, false);
+  ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
+  ctx.stencilMask(0xFFFFFFFF);
+  ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
+  ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
+
+  // TODO: This should NOT be needed but Firefox fails with 'hint'
+  while(ctx.getError());
+}
+
+function makeLostContextSimulatingCanvas(canvas) {
+  var unwrappedContext_;
+  var wrappedContext_;
+  var onLost_ = [];
+  var onRestored_ = [];
+  var wrappedContext_ = {};
+  var contextId_ = 1;
+  var contextLost_ = false;
+  var resourceId_ = 0;
+  var resourceDb_ = [];
+  var numCallsToLoseContext_ = 0;
+  var numCalls_ = 0;
+  var canRestore_ = false;
+  var restoreTimeout_ = 0;
+
+  // Holds booleans for each GL error so can simulate errors.
+  var glErrorShadow_ = { };
+
+  canvas.getContext = function(f) {
+    return function() {
+      var ctx = f.apply(canvas, arguments);
+      // Did we get a context and is it a WebGL context?
+      if (ctx instanceof WebGLRenderingContext) {
+        if (ctx != unwrappedContext_) {
+          if (unwrappedContext_) {
+            throw "got different context"
+          }
+          unwrappedContext_ = ctx;
+          wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
+        }
+        return wrappedContext_;
+      }
+      return ctx;
+    }
+  }(canvas.getContext);
+
+  function wrapEvent(listener) {
+    if (typeof(listener) == "function") {
+      return listener;
+    } else {
+      return function(info) {
+        listener.handleEvent(info);
+      }
+    }
+  }
+
+  var addOnContextLostListener = function(listener) {
+    onLost_.push(wrapEvent(listener));
+  };
+
+  var addOnContextRestoredListener = function(listener) {
+    onRestored_.push(wrapEvent(listener));
+  };
+
+
+  function wrapAddEventListener(canvas) {
+    var f = canvas.addEventListener;
+    canvas.addEventListener = function(type, listener, bubble) {
+      switch (type) {
+        case 'webglcontextlost':
+          addOnContextLostListener(listener);
+          break;
+        case 'webglcontextrestored':
+          addOnContextRestoredListener(listener);
+          break;
+        default:
+          f.apply(canvas, arguments);
+      }
+    };
+  }
+
+  wrapAddEventListener(canvas);
+
+  canvas.loseContext = function() {
+    if (!contextLost_) {
+      contextLost_ = true;
+      numCallsToLoseContext_ = 0;
+      ++contextId_;
+      while (unwrappedContext_.getError());
+      clearErrors();
+      glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
+      var event = makeWebGLContextEvent("context lost");
+      var callbacks = onLost_.slice();
+      setTimeout(function() {
+          //log("numCallbacks:" + callbacks.length);
+          for (var ii = 0; ii < callbacks.length; ++ii) {
+            //log("calling callback:" + ii);
+            callbacks[ii](event);
+          }
+          if (restoreTimeout_ >= 0) {
+            setTimeout(function() {
+                canvas.restoreContext();
+              }, restoreTimeout_);
+          }
+        }, 0);
+    }
+  };
+
+  canvas.restoreContext = function() {
+    if (contextLost_) {
+      if (onRestored_.length) {
+        setTimeout(function() {
+            if (!canRestore_) {
+              throw "can not restore. webglcontestlost listener did not call event.preventDefault";
+            }
+            freeResources();
+            resetToInitialState(unwrappedContext_);
+            contextLost_ = false;
+            numCalls_ = 0;
+            canRestore_ = false;
+            var callbacks = onRestored_.slice();
+            var event = makeWebGLContextEvent("context restored");
+            for (var ii = 0; ii < callbacks.length; ++ii) {
+              callbacks[ii](event);
+            }
+          }, 0);
+      }
+    }
+  };
+
+  canvas.loseContextInNCalls = function(numCalls) {
+    if (contextLost_) {
+      throw "You can not ask a lost contet to be lost";
+    }
+    numCallsToLoseContext_ = numCalls_ + numCalls;
+  };
+
+  canvas.getNumCalls = function() {
+    return numCalls_;
+  };
+
+  canvas.setRestoreTimeout = function(timeout) {
+    restoreTimeout_ = timeout;
+  };
+
+  function isWebGLObject(obj) {
+    //return false;
+    return (obj instanceof WebGLBuffer ||
+            obj instanceof WebGLFramebuffer ||
+            obj instanceof WebGLProgram ||
+            obj instanceof WebGLRenderbuffer ||
+            obj instanceof WebGLShader ||
+            obj instanceof WebGLTexture);
+  }
+
+  function checkResources(args) {
+    for (var ii = 0; ii < args.length; ++ii) {
+      var arg = args[ii];
+      if (isWebGLObject(arg)) {
+        return arg.__webglDebugContextLostId__ == contextId_;
+      }
+    }
+    return true;
+  }
+
+  function clearErrors() {
+    var k = Object.keys(glErrorShadow_);
+    for (var ii = 0; ii < k.length; ++ii) {
+      delete glErrorShadow_[k];
+    }
+  }
+
+  function loseContextIfTime() {
+    ++numCalls_;
+    if (!contextLost_) {
+      if (numCallsToLoseContext_ == numCalls_) {
+        canvas.loseContext();
+      }
+    }
+  }
+
+  // Makes a function that simulates WebGL when out of context.
+  function makeLostContextFunctionWrapper(ctx, functionName) {
+    var f = ctx[functionName];
+    return function() {
+      // log("calling:" + functionName);
+      // Only call the functions if the context is not lost.
+      loseContextIfTime();
+      if (!contextLost_) {
+        //if (!checkResources(arguments)) {
+        //  glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
+        //  return;
+        //}
+        var result = f.apply(ctx, arguments);
+        return result;
+      }
+    };
+  }
+
+  function freeResources() {
+    for (var ii = 0; ii < resourceDb_.length; ++ii) {
+      var resource = resourceDb_[ii];
+      if (resource instanceof WebGLBuffer) {
+        unwrappedContext_.deleteBuffer(resource);
+      } else if (resource instanceof WebGLFramebuffer) {
+        unwrappedContext_.deleteFramebuffer(resource);
+      } else if (resource instanceof WebGLProgram) {
+        unwrappedContext_.deleteProgram(resource);
+      } else if (resource instanceof WebGLRenderbuffer) {
+        unwrappedContext_.deleteRenderbuffer(resource);
+      } else if (resource instanceof WebGLShader) {
+        unwrappedContext_.deleteShader(resource);
+      } else if (resource instanceof WebGLTexture) {
+        unwrappedContext_.deleteTexture(resource);
+      }
+    }
+  }
+
+  function makeWebGLContextEvent(statusMessage) {
+    return {
+      statusMessage: statusMessage,
+      preventDefault: function() {
+          canRestore_ = true;
+        }
+    };
+  }
+
+  return canvas;
+
+  function makeLostContextSimulatingContext(ctx) {
+    // copy all functions and properties to wrapper
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'function') {
+         wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
+             ctx, propertyName);
+       } else {
+         makePropertyWrapper(wrappedContext_, ctx, propertyName);
+       }
+    }
+
+    // Wrap a few functions specially.
+    wrappedContext_.getError = function() {
+      loseContextIfTime();
+      if (!contextLost_) {
+        var err;
+        while (err = unwrappedContext_.getError()) {
+          glErrorShadow_[err] = true;
+        }
+      }
+      for (var err in glErrorShadow_) {
+        if (glErrorShadow_[err]) {
+          delete glErrorShadow_[err];
+          return err;
+        }
+      }
+      return wrappedContext_.NO_ERROR;
+    };
+
+    var creationFunctions = [
+      "createBuffer",
+      "createFramebuffer",
+      "createProgram",
+      "createRenderbuffer",
+      "createShader",
+      "createTexture"
+    ];
+    for (var ii = 0; ii < creationFunctions.length; ++ii) {
+      var functionName = creationFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          var obj = f.apply(ctx, arguments);
+          obj.__webglDebugContextLostId__ = contextId_;
+          resourceDb_.push(obj);
+          return obj;
+        };
+      }(ctx[functionName]);
+    }
+
+    var functionsThatShouldReturnNull = [
+      "getActiveAttrib",
+      "getActiveUniform",
+      "getBufferParameter",
+      "getContextAttributes",
+      "getAttachedShaders",
+      "getFramebufferAttachmentParameter",
+      "getParameter",
+      "getProgramParameter",
+      "getProgramInfoLog",
+      "getRenderbufferParameter",
+      "getShaderParameter",
+      "getShaderInfoLog",
+      "getShaderSource",
+      "getTexParameter",
+      "getUniform",
+      "getUniformLocation",
+      "getVertexAttrib"
+    ];
+    for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
+      var functionName = functionsThatShouldReturnNull[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    var isFunctions = [
+      "isBuffer",
+      "isEnabled",
+      "isFramebuffer",
+      "isProgram",
+      "isRenderbuffer",
+      "isShader",
+      "isTexture"
+    ];
+    for (var ii = 0; ii < isFunctions.length; ++ii) {
+      var functionName = isFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return false;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    wrappedContext_.checkFramebufferStatus = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.checkFramebufferStatus);
+
+    wrappedContext_.getAttribLocation = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return -1;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getAttribLocation);
+
+    wrappedContext_.getVertexAttribOffset = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return 0;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getVertexAttribOffset);
+
+    wrappedContext_.isContextLost = function() {
+      return contextLost_;
+    };
+
+    return wrappedContext_;
+  }
+}
+
+return {
+    /**
+     * Initializes this module. Safe to call more than once.
+     * @param {!WebGLRenderingContext} ctx A WebGL context. If
+    }
+   *    you have more than one context it doesn't matter which one
+   *    you pass in, it is only used to pull out constants.
+   */
+  'init': init,
+
+  /**
+   * Returns true or false if value matches any WebGL enum
+   * @param {*} value Value to check if it might be an enum.
+   * @return {boolean} True if value matches one of the WebGL defined enums
+   */
+  'mightBeEnum': mightBeEnum,
+
+  /**
+   * Gets an string version of an WebGL enum.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+   *
+   * @param {number} value Value to return an enum for
+   * @return {string} The string version of the enum.
+   */
+  'glEnumToString': glEnumToString,
+
+  /**
+   * Converts the argument of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 0, gl.TEXTURE_2D);
+   *
+   * would return 'TEXTURE_2D'
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} argumentIndx the index of the argument.
+   * @param {*} value The value of the argument.
+   * @return {string} The value as a string.
+   */
+  'glFunctionArgToString': glFunctionArgToString,
+
+  /**
+   * Converts the arguments of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} args The arguments.
+   * @return {string} The arguments as a string.
+   */
+  'glFunctionArgsToString': glFunctionArgsToString,
+
+  /**
+   * Given a WebGL context returns a wrapped context that calls
+   * gl.getError after every command and calls a function if the
+   * result is not NO_ERROR.
+   *
+   * You can supply your own function if you want. For example, if you'd like
+   * an exception thrown on any GL error you could do this
+   *
+   *    function throwOnGLError(err, funcName, args) {
+   *      throw WebGLDebugUtils.glEnumToString(err) +
+   *            " was caused by call to " + funcName;
+   *    };
+   *
+   *    ctx = WebGLDebugUtils.makeDebugContext(
+   *        canvas.getContext("webgl"), throwOnGLError);
+   *
+   * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+   * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
+   *     to call when gl.getError returns an error. If not specified the default
+   *     function calls console.log with a message.
+   * @param {!function(funcName, args): void} opt_onFunc The
+   *     function to call when each webgl function is called. You
+   *     can use this to log all calls for example.
+   */
+  'makeDebugContext': makeDebugContext,
+
+  /**
+   * Given a canvas element returns a wrapped canvas element that will
+   * simulate lost context. The canvas returned adds the following functions.
+   *
+   * loseContext:
+   *   simulates a lost context event.
+   *
+   * restoreContext:
+   *   simulates the context being restored.
+   *
+   * lostContextInNCalls:
+   *   loses the context after N gl calls.
+   *
+   * getNumCalls:
+   *   tells you how many gl calls there have been so far.
+   *
+   * setRestoreTimeout:
+   *   sets the number of milliseconds until the context is restored
+   *   after it has been lost. Defaults to 0. Pass -1 to prevent
+   *   automatic restoring.
+   *
+   * @param {!Canvas} canvas The canvas element to wrap.
+   */
+  'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
+
+  /**
+   * Resets a context to the initial state.
+   * @param {!WebGLRenderingContext} ctx The webgl context to
+   *     reset.
+   */
+  'resetToInitialState': resetToInitialState
+};
+
+}();
+
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js
new file mode 100755 (executable)
index 0000000..4f14f7f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/**
+ * @fileoverview This file contains functions every webgl program will need
+ * a version of one way or another.
+ *
+ * Instead of setting up a context manually it is recommended to
+ * use. This will check for success or failure. On failure it
+ * will attempt to present an approriate message to the user.
+ *
+ *       gl = WebGLUtils.setupWebGL(canvas);
+ *
+ * For animated WebGL apps use of setTimeout or setInterval are
+ * discouraged. It is recommended you structure your rendering
+ * loop like this.
+ *
+ *       function render() {
+ *         window.requestAnimFrame(render, canvas);
+ *
+ *         // do rendering
+ *         ...
+ *       }
+ *       render();
+ *
+ * This will call your rendering function up to the refresh rate
+ * of your display but will stop rendering if your app is not
+ * visible.
+ */
+
+WebGLUtils = function() {
+
+/**
+ * Creates the HTLM for a failure message
+ * @param {string} canvasContainerId id of container of th
+ *        canvas.
+ * @return {string} The html.
+ */
+var makeFailHTML = function(msg) {
+  return '' +
+    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
+    '<td align="center">' +
+    '<div style="display: table-cell; vertical-align: middle;">' +
+    '<div style="">' + msg + '</div>' +
+    '</div>' +
+    '</td></tr></table>';
+};
+
+/**
+ * Mesasge for getting a webgl browser
+ * @type {string}
+ */
+var GET_A_WEBGL_BROWSER = '' +
+  'This page requires a browser that supports WebGL.<br/>' +
+  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
+
+/**
+ * Mesasge for need better hardware
+ * @type {string}
+ */
+var OTHER_PROBLEM = '' +
+  "It doesn't appear your computer can support WebGL.<br/>" +
+  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
+
+/**
+ * Creates a webgl context. If creation fails it will
+ * change the contents of the container of the <canvas>
+ * tag to an error message with the correct links for WebGL.
+ * @param {Element} canvas. The canvas element to create a
+ *     context from.
+ * @param {WebGLContextCreationAttirbutes} opt_attribs Any
+ *     creation attributes you want to pass in.
+ * @return {WebGLRenderingContext} The created context.
+ */
+var setupWebGL = function(canvas, opt_attribs) {
+  function showLink(str) {
+    var container = canvas.parentNode;
+    if (container) {
+      container.innerHTML = makeFailHTML(str);
+    }
+  };
+
+  if (!window.WebGLRenderingContext) {
+    showLink(GET_A_WEBGL_BROWSER);
+    return null;
+  }
+
+  var context = create3DContext(canvas, opt_attribs);
+  if (!context) {
+    showLink(OTHER_PROBLEM);
+  }
+  return context;
+};
+
+/**
+ * Creates a webgl context.
+ * @param {!Canvas} canvas The canvas tag to get context
+ *     from. If one is not passed in one will be created.
+ * @return {!WebGLContext} The created context.
+ */
+var create3DContext = function(canvas, opt_attribs) {
+  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
+  var context = null;
+  for (var ii = 0; ii < names.length; ++ii) {
+    try {
+      context = canvas.getContext(names[ii], opt_attribs);
+    } catch(e) {}
+    if (context) {
+      break;
+    }
+  }
+  return context;
+}
+
+return {
+  create3DContext: create3DContext,
+  setupWebGL: setupWebGL
+};
+}();
+
+/**
+ * Provides requestAnimationFrame in a cross browser way.
+ */
+window.requestAnimFrame = (function() {
+  return window.requestAnimationFrame ||
+         window.webkitRequestAnimationFrame ||
+         window.mozRequestAnimationFrame ||
+         window.oRequestAnimationFrame ||
+         window.msRequestAnimationFrame ||
+         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
+           return window.setTimeout(callback, 1000/60);
+         };
+})();
+
+/**
+ * Provides cancelAnimationFrame in a cross browser way.
+ */
+window.cancelAnimFrame = (function() {
+  return window.cancelAnimationFrame ||
+         window.webkitCancelAnimationFrame ||
+         window.mozCancelAnimationFrame ||
+         window.oCancelAnimationFrame ||
+         window.msCancelAnimationFrame ||
+         window.clearTimeout;
+})();
+
+
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/main.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/main.js
new file mode 100755 (executable)
index 0000000..41563d0
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var ORIGIN_SPEED = 0.5;
+var multiple = 5;
+var isRunning = false;
+var isInit = true;
+var testFlag = {
+    status: false,
+    direction: false,
+    size:false,
+    speed:false
+};
+
+function start() {
+    var c = document.getElementById("canvas");
+    canvas = c;
+
+    var gl = init();
+    if (!gl) {
+        return;
+    }
+    incAngle = ORIGIN_SPEED*multiple;
+    currentAngle = 0;
+
+    f();
+    isRunning = true;
+}
+var f = function() {
+    drawPicture(gl);
+    requestId = window.requestAnimFrame(f, canvas);
+};
+
+function handleContextLost(event) {
+    if (event) {
+        event.preventDefault();
+    }
+    if (requestId !== undefined) {
+        window.cancelAnimFrame(requestId);
+        requestId = undefined;
+    }
+}
+
+function handleContextRestored() {
+    init();
+    f();
+}
+
+function reStart() {
+    if (isRunning) {
+        return;
+    }
+    incAngle = bakAngle;
+    handleContextRestored();
+    isRunning = true;
+}
+
+function stop(event) {
+    if (!isRunning) {
+        return;
+    }
+    bakAngle = incAngle;
+    incAngle = 0;
+    handleContextLost(event);
+    isRunning = false;
+}
+
+function resume() {
+    if(!isRunning) {
+        return;
+    }
+    stop();
+    reStart();
+}
+
+function setToRight() {
+    if(incAngle < 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setToLeft() {
+    if(incAngle > 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setSize(value) {
+    if(value < 7 || value > 30) {
+        return;
+    }
+    if (value != viewDistance){
+        viewDistance = value;
+    };
+    resume();
+}
+
+function setSpeed(value) {
+    if(value <= 0 || value > 10) {
+        return;
+    }
+    if(incAngle > 0) {
+        incAngle = ORIGIN_SPEED*value;
+    } else {
+        incAngle = -ORIGIN_SPEED*value;
+    }
+    resume();
+}
+
+function checkEnable() {
+    if (testFlag.status && testFlag.direction
+        && testFlag.size && testFlag.speed) {
+        EnablePassButton();
+    }
+}
+
+$(document).ready(function(){
+    start();
+    // animation-left-right status changes
+    $("input[type='radio']").bind( "change", function(event, ui) {
+        if (this.value == "left") {
+            setToLeft();
+            testFlag.direction = true;
+            checkEnable();
+        } else {
+            setToRight();
+        }
+    });
+    DisablePassButton();
+});
diff --git a/mobile/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..59672db
--- /dev/null
@@ -0,0 +1,155 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
+            setSize(value);
+            if (parseInt(newValue, 10) != 3) {
+                testFlag.size = true;
+                checkEnable();
+            }
+        } else if (ID == "speed-1") {
+            setSpeed(parseInt(newValue, 10));
+            if (parseInt(newValue, 10) != 5) {
+                testFlag.speed = true;
+                checkEnable();
+            }
+        } else if (ID == "flip-1") {
+            if (newValue == "0") {
+                stop();
+                $("input[type='radio']").checkboxradio('disable');
+                $("#slider-1").slider('disable');
+                $("#speed-1").slider('disable');
+                testFlag.status = true;
+                checkEnable();
+            } else if (newValue == "1"){
+                if (!isInit) {
+                    reStart();
+                    $("input[type='radio']").checkboxradio('enable');
+                    $("#slider-1").slider('enable');
+                    $("#speed-1").slider('enable');
+                } else {
+                    isInit = false;
+                }
+            }
+        }
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       //this._popup.html( newValue );
+            this._popup.html( Math.round(newValue) );
+               }
+
+               if ( o.showValue ) {
+                       //this._handleText.html( newValue );
+            this._handleText.html( Math.round(newValue) );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/Accelerometer/index.html b/mobile/tct-behavior-tests/tests/Accelerometer/index.html
new file mode 100755 (executable)
index 0000000..e4f6d53
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style type="text/css">
+        .d{
+            border: 1px solid #000;
+            width:100%;
+            height:200px;
+        }
+        .d li{
+            margin: 10px 5px;
+        }
+        .d p{
+            margin: 10px 25px;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <div class="d">
+        <ul id="coordinate">
+          <li id="x">X:</li>
+          <li id="y">Y:</li>
+          <li id="z">Z:</li>
+        </ul>
+        <p>X, Y, Z will be changed while moving the device, otherwise they will be zero</p>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionality of Accelerometer. And detects the device moving direction is x axis or y axis or z axis.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the detected direction reflects the actual device moving direction.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Accelerometer/js/main.js b/mobile/tct-behavior-tests/tests/Accelerometer/js/main.js
new file mode 100755 (executable)
index 0000000..af52a3e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+window.addEventListener(
+    "devicemotion",
+    function(evt) {
+        var coordinate = evt.acceleration;
+        jQuery("#x").text("X: " + Math.round(coordinate.x-0));
+        jQuery("#y").text("Y: " + Math.round(coordinate.y-0));
+        jQuery("#z").text("Z: " + Math.round(coordinate.z-0));
+    }, false);
diff --git a/mobile/tct-behavior-tests/tests/Alarm/NOTICE b/mobile/tct-behavior-tests/tests/Alarm/NOTICE
new file mode 100755 (executable)
index 0000000..5e383b8
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestAlarm :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/Alarm/index.html b/mobile/tct-behavior-tests/tests/Alarm/index.html
new file mode 100755 (executable)
index 0000000..2fe5884
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AlarmTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">AlarmTest Install</div>
+                </li>
+                <li data-role="list-divider">Alarm List</li>
+            </ul>
+            <ul data-role="listview" id="alarm-all-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Absolute Alarm Time</li>
+                <li>
+                    <input type="datetime" name="alarm-time" id="alarm-time" value="0000-00-00T00:00Z" />
+                </li>
+                <li data-role="list-divider">Absolute Alarm Repeat interval(sec)</li>
+                <li><input id="absolute-alarm-period" name="absolute-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Absolute Alarm Add</li>
+                <li>
+                    <div data-role="button" id="absolute-alarm-save">Absolute Save</div>
+                </li>
+                <li data-role="list-divider">Relative Alarm Delay(sec)</li>
+                <li><input id="relative-alarm-delay" name="relative-alarm-delay" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Repeat interval(sec)</li>
+                <li><input id="relative-alarm-period" name="relative-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Add</li>
+                <li>
+                    <div data-role="button" id="relative-alarm-save">Relative Save</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Alarm Delete</li>
+                <li>
+                    <div data-role="button" id="alarm-remove-all">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+              <font style="font-size:85%">
+                <p>Check if an application is launched on time</p><br>
+                <p>1. Install AlarmTest</p>
+                <p>2. Set absolute time</p>
+                <p>3. Set an interval</p>
+                <p>4. Save an absolute button</p>
+                <p>5. Watch AlarmTest is launched on time</p>
+                <p>6. Watch AlarmTest is launched after the interval</p>
+                <p>7. Remove the alarm</p>
+                <p>8. Set delay</p>
+                <p>9. Set an interval</p>
+                <p>10. Save a relative alarm</p>
+                <p>11. Watch AlarmTest is launched on time</p>
+                <p>12. Watch AlarmTest is launched after the interval</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Alarm/js/main.js b/mobile/tct-behavior-tests/tests/Alarm/js/main.js
new file mode 100755 (executable)
index 0000000..7f3ade3
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    $("#alarm-remove-all").bind("vclick", function() {
+        removeAll();
+        return false;
+    });
+    $("#alarm-all-list").delegate("li", "vclick", function() {
+        alarmInfo($(this).data("id"));
+        return false;
+    });
+    $("#alarm-all-list").delegate("div", "vclick", function() {
+        removeAlarm($(this).parent().data("id"));
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install_(installUrl);
+        $("#absolute-alarm-save").removeClass("ui-disabled");
+        $("#relative-alarm-save").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").bind("vclick", function() {
+        addAlarmAbsolute();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#relative-alarm-save").bind("vclick", function() {
+        addAlarmRelative();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").addClass("ui-disabled");
+    $("#relative-alarm-save").addClass("ui-disabled");
+    $("#alarm-remove-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    displayAlarms();
+    alarmPre();
+});
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'file://' + RESOURCE_DIR + '/Documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function displayAlarms() {
+    var alarmsArray = tizen.alarm.getAll();
+    var period, str = "";
+
+    for (var i = 0; i < alarmsArray.length; i++) {
+        if (alarmsArray[i].period) {
+            period = alarmsArray[i].period + " sec";
+        } else {
+            period = "none";
+        }
+
+        if (alarmsArray[i] instanceof tizen.AlarmAbsolute) {
+            var d = alarmsArray[i].date,
+            m = d.getMinutes();
+
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + (d.getMonth() + 1)
+                + '/'
+                + d.getDate()
+                + '/'
+                + d.getFullYear()
+                + ' '
+                + d.getHours()
+                + ':'
+                + ((m < 10) ? "0" + m : m)
+                + ' Absolute alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else if (alarmsArray[i] instanceof tizen.AlarmRelative) {
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + alarmsArray[i].delay
+                + ' sec Relative alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else {
+            alert("Wrong alarm instance");
+            break;
+        }
+    }
+    $("#alarm-all-list").html(str).trigger("create").listview("refresh");
+}
+
+function addAlarm(alarm) {
+    var arg;
+    arg = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view",
+            null,
+            null,
+            null,
+            [new tizen.ApplicationControlData("id", ["bhvtcalarm.AlarmTest"])]);
+
+    try {
+        tizen.alarm.add(alarm, "bhvtcalarm.AlarmTest", arg);
+    } catch (e) {
+        alert("error: " + e.message);
+    }
+}
+
+function addAlarmAbsolute() {
+    var period = parseInt($("#absolute-alarm-period").prop("value")),
+    time = $("#alarm-time").prop("value"),
+    year, month, date, hours, minutes, splits, d, t;
+
+    if (time === null || time === "" || period < 0) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        splits = time.split("T");
+        d = splits[0].split("-");
+        t = splits[1].split(":");
+
+        year = parseInt(d[0]);
+        month = parseInt(d[1]) - 1;
+        date = parseInt(d[2]);
+        hours = parseInt(t[0]);
+        minutes = parseInt(t[1]);
+
+        var inputDate = new Date(year, month, date, hours, minutes, 0, 0);
+        var myAlarm = new tizen.AlarmAbsolute(inputDate, (period > 0 ? period : null));
+
+        addAlarm(myAlarm);
+        alert("Absolute Alarm Added");
+        displayAlarms();
+    }
+}
+
+function addAlarmRelative() {
+    var period = parseInt($("#relative-alarm-period").prop("value")),
+    delay = parseInt($("#relative-alarm-delay").prop("value"));
+
+    if ((delay < 0) || (period < 0)) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        var myAlarm = new tizen.AlarmRelative(delay, period);
+
+        addAlarm(myAlarm);
+        alert("Relative Alarm Added");
+        displayAlarms();
+    }
+}
+
+function removeAll() {
+    tizen.alarm.removeAll();
+    alert("Alarm delete all");
+    displayAlarms();
+}
+
+function removeAlarm(id) {
+    try {
+        tizen.alarm.remove(id);
+        alert("Alarm delete");
+    } catch (e) {
+        alert("Alarm remove failed. The once alarm might be already removed automatically");
+    }
+    displayAlarms();
+}
+
+function alarmInfo(id) {
+    var alarm = tizen.alarm.get(id);
+
+    if (alarm) {
+        if (alarm instanceof tizen.AlarmAbsolute) {
+            alert("Next scheduled alarm is " + alarm.getNextScheduledDate());
+        } else {
+            alert("Remaining seconds is " + alarm.getRemainingSeconds() + " SECS");
+        }
+    } else {
+        alert("Alarm info retrieving failed<br/>This once alarm might be already removed automatically");
+        displayAlarms();
+    }
+}
+
+function install_(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                $("#install").addClass("ui-disabled");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">AlarmTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            install_flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            install_flag = false;
+        }
+};
+
+function alarmPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestAlarm.wgt",
+                    false,
+                    function() {
+                        console.log("Alarm Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Alarm/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/Alarm/res/TestAlarm b/mobile/tct-behavior-tests/tests/Alarm/res/TestAlarm
new file mode 100755 (executable)
index 0000000..34a2dbe
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Alarm/res/TestAlarm differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/index.html b/mobile/tct-behavior-tests/tests/AppControl/index.html
new file mode 100755 (executable)
index 0000000..838adeb
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="actList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test App Control</li>
+                <li id="csp-none">
+                    <a href="javascript:goToApp('res/app-control-complex-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-complex-wgt</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:goToApp('res/appcontrol-operation-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-operation-wgt</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of App Control worked well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/AppControl/js/main1.js b/mobile/tct-behavior-tests/tests/AppControl/js/main1.js
new file mode 100755 (executable)
index 0000000..c01f954
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0003.unittestforappcontrol";
+
+var wgt_names = new Array('app-control-complex-wgt-1.wgt',
+                          'app-control-complex-wgt-2.wgt',
+                          'app-control-complex-wgt-3.wgt',
+                          'app-control-complex-wgt-4.wgt',
+                          'app-control-complex-wgt-5.wgt',
+                          'unit-test-for-app-control.wgt');
+
+var package_ids = new Array('wrt2act066',
+                            'wrt2act067',
+                            'wrt2act068',
+                            'wrt2act069',
+                            'wrt1nj0032',
+                            'wrt1nj0003');
+
+var id_maps = {'app-control-complex-wgt-1.wgt':        'wrt2act066',
+               'app-control-complex-wgt-2.wgt':        'wrt2act067',
+               'app-control-complex-wgt-3.wgt':        'wrt2act068',
+               'app-control-complex-wgt-4.wgt':        'wrt2act069',
+               'app-control-complex-wgt-5.wgt':        'wrt1nj0032',
+               'unit-test-for-app-control.wgt':        'wrt1nj0003'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    /**gettpkInfoByPlatForm();**/
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+function goToApp(path) {
+    window.open(path);
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/AppControl/js/main2.js b/mobile/tct-behavior-tests/tests/AppControl/js/main2.js
new file mode 100755 (executable)
index 0000000..b60b084
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0009.appcontrolTestApp";
+
+var wgt_names = new Array('appcontrol-operation-content.wgt',
+                          'appcontrol-operation-createcontent-video.wgt',
+                          'appcontrol-operation-default.wgt',
+                          'appcontrol-operation-dial.wgt',
+                          'appcontrol-operation-dial-null.wgt',
+                          'appcontrol-operation-call.wgt',
+                          'appcontrol-operation-call-null.wgt',
+                          'appcontrol-operation-edit.wgt',
+                          'appcontrol-operation-multi_share.wgt',
+                          'appcontrol-operation-nfc-empty.wgt',
+                          'appcontrol-operation-nfc-mime.wgt',
+                          'appcontrol-operation-nfc-uri.wgt',
+                          'appcontrol-operation-nfc-wellknow.wgt',
+                          'appcontrol-operation-pick.wgt',
+                          'appcontrol-operation-pick-audio.wgt',
+                          'appcontrol-operation-pick-video.wgt',
+                          'appcontrol-operation-search.wgt',
+                          'appcontrol-operation-send.wgt',
+                          'appcontrol-operation-share.wgt',
+                          'appcontrol-operation-view.wgt',
+                          'appcontrol-operation-view-3gpp.wgt',
+                          'appcontrol-operation-view-aac.wgt',
+                          'appcontrol-operation-view-amr.wgt',
+                          'appcontrol-operation-view-bmp.wgt',
+                          'appcontrol-operation-view-gif.wgt',
+                          'appcontrol-operation-view-jpeg.wgt',
+                          'appcontrol-operation-view-mp3.wgt',
+                          'appcontrol-operation-view-mp4.wgt',
+                          'appcontrol-operation-view-png.wgt',
+                          'appcontrol-operation-view-wav.wgt',
+                          'appcontrol-test-app.wgt');
+
+var package_ids = new Array('wrt2aoc011',
+                            'wrt1nj0027',
+                            'wrt2aod012',
+                            'wrt2aod013',
+                            'wrt1nj0029',
+                            'wrt1nj0024',
+                            'wrt1nj0025',
+                            'wrt2aoe014',
+                            'wrt1nj0031',
+                            'wrt2aon015',
+                            'wrt2aon016',
+                            'wrt2aon017',
+                            'wrt2aon018',
+                            'wrt2aop019',
+                            'wrt1nj0021',
+                            'wrt1nj0023',
+                            'wrt2aos020',
+                            'wrt2aos021',
+                            'wrt1nj0030',
+                            'wrt2aov022',
+                            'wrt1nj0018',
+                            'wrt1nj0014',
+                            'wrt1nj0015',
+                            'wrt1nj0011',
+                            'wrt1nj0012',
+                            'wrt1nj0010',
+                            'wrt1nj0016',
+                            'wrt1nj0019',
+                            'wrt1nj0013',
+                            'wrt1nj0017',
+                            'wrt1nj0009');
+
+var id_maps = {'appcontrol-operation-content.wgt':                'wrt2aoc011',
+               'appcontrol-operation-createcontent-video.wgt':    'wrt1nj0027',
+               'appcontrol-operation-default.wgt':                'wrt2aod012',
+               'appcontrol-operation-dial.wgt':                   'wrt2aod013',
+               'appcontrol-operation-dial-null.wgt':              'wrt1nj0029',
+               'appcontrol-operation-call.wgt':                   'wrt1nj0024',
+               'appcontrol-operation-call-null.wgt':              'wrt1nj0025',
+               'appcontrol-operation-edit.wgt':                   'wrt2aoe014',
+               'appcontrol-operation-multi_share.wgt':            'wrt1nj0031',
+               'appcontrol-operation-nfc-empty.wgt':              'wrt2aon015',
+               'appcontrol-operation-nfc-mime.wgt':               'wrt2aon016',
+               'appcontrol-operation-nfc-uri.wgt':                'wrt2aon017',
+               'appcontrol-operation-nfc-wellknow.wgt':           'wrt2aon018',
+               'appcontrol-operation-pick.wgt':                   'wrt2aop019',
+               'appcontrol-operation-pick-audio.wgt':             'wrt2aos021',
+               'appcontrol-operation-pick-video.wgt':             'wrt1nj0023',
+               'appcontrol-operation-search.wgt':                 'wrt2aos020',
+               'appcontrol-operation-send.wgt':                   'wrt2aos021',
+               'appcontrol-operation-share.wgt':                  'wrt1nj0030',
+               'appcontrol-operation-view.wgt':                   'wrt2aov022',
+               'appcontrol-operation-view-3gpp.wgt':              'wrt1nj0018',
+               'appcontrol-operation-view-aac.wgt':               'wrt1nj0014',
+               'appcontrol-operation-view-amr.wgt':               'wrt1nj0015',
+               'appcontrol-operation-view-bmp.wgt':               'wrt1nj0011',
+               'appcontrol-operation-view-gif.wgt':               'wrt1nj0012',
+               'appcontrol-operation-view-jpeg.wgt':              'wrt1nj0010',
+               'appcontrol-operation-view-mp3.wgt':               'wrt1nj0016',
+               'appcontrol-operation-view-mp4.wgt':               'wrt1nj0019',
+               'appcontrol-operation-view-png.wgt':               'wrt1nj0013',
+               'appcontrol-operation-view-wav.wgt':               'wrt1nj0017',
+               'appcontrol-test-app.wgt':                         'wrt1nj0009'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    //gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt
new file mode 100755 (executable)
index 0000000..10bd4e3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html b/mobile/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html
new file mode 100755 (executable)
index 0000000..7d2a2e4
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main1.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"app-control-complex-one-uri" test Step: </p>
+            <ol>
+              <li>Press button "open7".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A "PASS" displayed on the screen, then jumped to another page, the new page auto closed in 5 seconds, finally a "PASS" and a "close" button displayed on the screen.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt
new file mode 100755 (executable)
index 0000000..c187e82
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt
new file mode 100755 (executable)
index 0000000..db6a809
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt
new file mode 100755 (executable)
index 0000000..c2e1bc6
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt
new file mode 100755 (executable)
index 0000000..21e7bfc
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt
new file mode 100755 (executable)
index 0000000..80ffaa5
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt
new file mode 100755 (executable)
index 0000000..c4c5b12
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt
new file mode 100755 (executable)
index 0000000..156a90c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt
new file mode 100755 (executable)
index 0000000..2270fda
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt
new file mode 100755 (executable)
index 0000000..1d79f16
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt
new file mode 100755 (executable)
index 0000000..820d407
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt
new file mode 100755 (executable)
index 0000000..050e78b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt
new file mode 100755 (executable)
index 0000000..85a3b37
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt
new file mode 100755 (executable)
index 0000000..0e8e8d5
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt
new file mode 100755 (executable)
index 0000000..5b07dc2
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt
new file mode 100755 (executable)
index 0000000..9719d2c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt
new file mode 100755 (executable)
index 0000000..e81b261
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt
new file mode 100755 (executable)
index 0000000..a382abd
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt
new file mode 100755 (executable)
index 0000000..2a08518
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html
new file mode 100755 (executable)
index 0000000..f3e0753
--- /dev/null
@@ -0,0 +1,323 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main2.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"appcontrol-operation-view-3gpp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/3gpp, URI is "Videos/3gpp.3gpp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-3gpp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-aac" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/aac, URI is "Sounds/aac.aac" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-aac" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-amr" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/amr, URI is "Sounds/amr.amr" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-amr" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-bmp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/bmp, URI is "Images/bmp.bmp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-bmp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-gif" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/gif, URI is "Images/gif.gif" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-gif" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-jpeg" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/jpeg, URI is "Images/jpg.jpg" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-jpeg" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp3" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/mp3, URI is "Sounds/mp3.mp3" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp3" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp4" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/mp4, URI is "Videos/mp4.mp4" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp4" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-png" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/png, URI is "Images/png.png" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-png" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-wav" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/wav, URI is "Sounds/wav.wav" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-wav" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-createcontent-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is create_content, MIME is video/*,URI is any video in the list. then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-createcontent-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-dial-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is dial, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-dial-null" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel, URI is "tel:10010" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-call-tel" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-call-nulluri" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-audio" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is audio/*,URI is any audio file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-audio" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is video/*,URI is any video file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-multi_share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is multi_share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-multi_share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt
new file mode 100755 (executable)
index 0000000..0223a8d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt b/mobile/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt
new file mode 100755 (executable)
index 0000000..3eba38c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControlExtending/index.html b/mobile/tct-behavior-tests/tests/AppControlExtending/index.html
new file mode 100755 (executable)
index 0000000..a9a0904
--- /dev/null
@@ -0,0 +1,90 @@
+6<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Test the custom feature</li>
+                <li>
+                    <div data-role="button" id="install1" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Test the regular feature</li>
+                <li>
+                    <div data-role="button" id="install2" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Packages Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of launching the Application which control by user instead of system. Tests the two test Applications could be launched by App ID or customized AppControl's "operation" attribute by user.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the custom package.</li>
+              <li>Click the "Launch" button to launch the custom package.</li>
+              <li>Click the "Install" button to install the regular package.</li>
+              <li>Click the "Launch" button to launch the regular package.</li>
+              <li>Click the "Uninstall" button to uninstall the two widgets.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the test Applications launch successfully.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/AppControlExtending/js/main.js b/mobile/tct-behavior-tests/tests/AppControlExtending/js/main.js
new file mode 100755 (executable)
index 0000000..fec6f02
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+var installUrl1;
+var installUrl2;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install1").bind("vclick", function() {
+        install(installUrl1, "install1");
+    });
+    $("#install2").bind("vclick", function() {
+        install(installUrl2, "install2");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch("app-control1");
+        if(checkInstalledPkg("apcontrol2")) {
+            $("#install2").addClass("ui-disabled");
+            $("#launch2").removeClass("ui-disabled");
+        } else {
+            $("#install2").removeClass("ui-disabled");
+        }
+    });
+    $("#launch2").bind("vclick", function() {
+        launch("app-control2");
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        ["apcontrol1", "apcontrol2"].forEach(function(package_id) {
+            if(checkInstalledPkg(package_id)) {
+                setTimeout(function() {
+                    uninstall(package_id);
+                }, 1000);
+            }
+        });
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#install2").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("apcontrol1")) {
+        $("#install1").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        alert("The package " + packageId + " is uninstalled");
+    }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl1 = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "app_control_regular_wgt.wgt")
+            {
+                var Url2 = files[i].toURI();
+                installUrl2 = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            if(type == "install1") {
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+            if(type == "install2") {
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(type == "install1") {
+                $("#install1").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Install</div>');
+            }
+            if(type == "install2") {
+                $("#install2").addClass("ui-disabled");
+                $("#launch2").removeClass("ui-disabled");
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Install</div>');
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+
+    var onUninstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            if(packageId == "apcontrol1") {
+                $("#launch1").addClass("ui-disabled");
+            }
+            if(packageId == "apcontrol2") {
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(option) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        if (option == "app-control1"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl1_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, null, onSuccess, onError, null);
+        }else if (option == "app-control2"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl2_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, "apcontrol2.AppcontrolRegularWgt", onSuccess, onError, null);
+        }
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/app_control_custom_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_custom_wgt Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "app_control_regular_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/app_control_regular_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_regular_wgt Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControlExtending/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt b/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt
new file mode 100755 (executable)
index 0000000..e91f5e3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt differ
diff --git a/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt b/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt
new file mode 100755 (executable)
index 0000000..54a67f7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt differ
diff --git a/mobile/tct-behavior-tests/tests/Application/NOTICE b/mobile/tct-behavior-tests/tests/Application/NOTICE
new file mode 100755 (executable)
index 0000000..cd11443
--- /dev/null
@@ -0,0 +1,23 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/audio.acc,
+res/audio.amr,
+res/audio.mp3,
+res/audio.wav,
+res/iconA.png,
+res/iconV.png,
+res/image.bmp,
+res/image.gif,
+res/image.jpeg,
+res/image.png,
+res/video.3gp,
+res/video.mp4 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/Application/index.html b/mobile/tct-behavior-tests/tests/Application/index.html
new file mode 100755 (executable)
index 0000000..a153343
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#image ul, li {list-style:none;}
+#audio ul, li {list-style:none;}
+#video ul, li {list-style:none;}
+#image img {margin:5px; width:65px; height:70px}
+#audio img {margin:5px; width:70px; height:70px}
+#video img {margin:5px; width:70px; height:70px}
+</style>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Image</li>
+            </ul>
+            <ul data-role="listview" id="image"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Audio</li>
+            </ul>
+            <ul data-role="listview" id="audio"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Video</li>
+            </ul>
+            <ul data-role="listview" id="video"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl File</li>
+                <li id="allFile">All File</li>
+                <li id="imageFile">Image File</li>
+                <li id="audioFile">Audio File</li>
+                <li id="videoFile">Video File</li>
+                <li data-role="list-divider">AppControl Browser</li>
+                <li id="tizen">https://www.tizen.org</li>
+                <li><input type="text" id="url" value="http://"/><div data-role="button" id="browser">Browser</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if AppControls are supported</p><br>
+                <p>1. Select a thumbnail in the AppControl Image category</p>
+                <p>2. Check if the original image is displayed</p>
+                <p>3. Select a music file in the AppControl Audio category</p>
+                <p>4. Check if the music file is played</p>
+                <p>5. Select a video file in the AppControl Video category</p>
+                <p>6. Check if the video file is played</p>
+                <p>5. Select or Input the URL in the AppControl Browser category</p>
+                <p>6. Check if the URL is browsed</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Application/js/main.js b/mobile/tct-behavior-tests/tests/Application/js/main.js
new file mode 100755 (executable)
index 0000000..131be5a
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path = "", mime = "", name = "", Url = "";
+var thumAudio = "", thumVideo = "";
+var sharedDir;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#image").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlImage(path, mime, name);
+        return false;
+    });
+    $("#audio").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlAudio(path, mime, name);
+        return false;
+    });
+    $("#video").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlVideo(path, mime, name);
+        return false;
+    });
+    $("#allFile").bind("vclick", function() {
+        setAppControlFile("*/*");
+        return false;
+    });
+    $("#imageFile").bind("vclick", function() {
+        setAppControlFile("image/*");
+        return false;
+    });
+    $("#videoFile").bind("vclick", function() {
+        setAppControlFile("video/*");
+        return false;
+    });
+    $("#audioFile").bind("vclick", function() {
+        setAppControlFile("audio/*");
+        return false;
+    });
+    $("#tizen").bind("vclick", function() {
+        setAppControlBrowser("https://www.tizen.org");
+        return false;
+    });
+    $("#browser").bind("vclick", function() {
+        var url = $("#url").val();
+        setAppControlBrowser(url);
+        return false;
+    });
+    applicationPre();
+    file();
+});
+
+function file() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            var text = files[i].name.substring(0, 5);
+            if(text == "iconA")
+            {
+                thumAudio = files[i].toURI();
+                thumAudio = thumAudio.replace("file:///", "/");
+            }
+            if(text == "iconV")
+            {
+                thumVideo = files[i].toURI();
+                thumVideo = thumVideo.replace("file:///", "/");
+            }
+        }
+        file2();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function file2() {
+    var documentsDir, strImage = "", strVideo = "", strAudio = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var mime = files[i].name.replace(".", "/");
+                var text = files[i].name.substring(0, 5);
+                var file = files[i].name;
+                Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                if(text == "image")
+                    strImage += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + Url + '" alt="" />' + file + '</li>';
+                if(text == "audio")
+                    strAudio += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumAudio + '" alt="" />' + file + '</li>';
+                if(text == "video")
+                    strVideo += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumVideo + '" alt="" />' + file + '</li>';
+            }
+        }
+        $("#image").html(strImage).trigger("create").listview("refresh");
+        $("#audio").html(strAudio).trigger("create").listview("refresh");
+        $("#video").html(strVideo).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function setAppControlImage(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlAudio(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlVideo(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlFile(mime) {
+    var app = {attach:[]};
+    app.attach = [];
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/pick",
+            null,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+                app.attach.push(data[0].value[0]);
+                alert("Select File : " + app.attach[0]);
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlBrowser(url) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            url,
+            null);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function applicationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            sharedDir = tizen.application.getAppSharedURI();
+            sharedDir = sharedDir.replace("file:///", "/");
+            documentsDir.copyTo(
+                files[i].fullPath,
+                sharedDir+"/data/"+files[i].name,
+                true,
+                function() {
+                    console.log("PKGID/shared/data/ File Copy");
+                },
+                function(e){
+                    console.log("Error : " + e.name);
+                });
+        }
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Application/res',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/Application/res/audio.aac b/mobile/tct-behavior-tests/tests/Application/res/audio.aac
new file mode 100755 (executable)
index 0000000..dea42a8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/audio.aac differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/audio.amr b/mobile/tct-behavior-tests/tests/Application/res/audio.amr
new file mode 100755 (executable)
index 0000000..81093ff
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/audio.amr differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/audio.mp3 b/mobile/tct-behavior-tests/tests/Application/res/audio.mp3
new file mode 100755 (executable)
index 0000000..2b62d4c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/audio.mp3 differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/audio.wav b/mobile/tct-behavior-tests/tests/Application/res/audio.wav
new file mode 100755 (executable)
index 0000000..f336ec8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/audio.wav differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/iconA.png b/mobile/tct-behavior-tests/tests/Application/res/iconA.png
new file mode 100755 (executable)
index 0000000..394dfa3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/iconA.png differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/iconV.png b/mobile/tct-behavior-tests/tests/Application/res/iconV.png
new file mode 100755 (executable)
index 0000000..a809e1e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/iconV.png differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/image.bmp b/mobile/tct-behavior-tests/tests/Application/res/image.bmp
new file mode 100755 (executable)
index 0000000..2bc4bb5
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/image.bmp differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/image.gif b/mobile/tct-behavior-tests/tests/Application/res/image.gif
new file mode 100755 (executable)
index 0000000..c2d950d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/image.gif differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/image.jpeg b/mobile/tct-behavior-tests/tests/Application/res/image.jpeg
new file mode 100755 (executable)
index 0000000..bce27ff
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/image.jpeg differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/image.png b/mobile/tct-behavior-tests/tests/Application/res/image.png
new file mode 100755 (executable)
index 0000000..ee90c37
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/image.png differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/video.3gp b/mobile/tct-behavior-tests/tests/Application/res/video.3gp
new file mode 100755 (executable)
index 0000000..0e98843
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/video.3gp differ
diff --git a/mobile/tct-behavior-tests/tests/Application/res/video.mp4 b/mobile/tct-behavior-tests/tests/Application/res/video.mp4
new file mode 100755 (executable)
index 0000000..e203ae2
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Application/res/video.mp4 differ
diff --git a/mobile/tct-behavior-tests/tests/ApplicationInvisible/css/main.css b/mobile/tct-behavior-tests/tests/ApplicationInvisible/css/main.css
new file mode 100755 (executable)
index 0000000..5296294
--- /dev/null
@@ -0,0 +1,211 @@
+body{
+
+}
+.container {
+    padding: 50px;
+    text-align: center;
+}
+
+.timer {
+    padding: 10px;
+    background: -webkit-linear-gradient(top, #222, #444);
+    background: -moz-linear-gradient(top, #222, #444);
+    background: -ms-linear-gradient(top, #222, #444);
+    background: -o-linear-gradient(top, #222, #444);
+    background: linear-gradient(top, #222, #444);
+    overflow: hidden;
+    display: inline-block;
+    border: 7px solid #efefef;
+    border-radius: 5px;
+    position: relative;
+    box-shadow: inset 0 -2px 10px 1px rgba(0, 0, 0, 0.75), 0 5px 20px -10px rgba(0, 0, 0, 1);
+}
+
+.cell1 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.cell2 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.numbers {
+    width: 0.6em;
+    line-height: 40px;
+    font-family: digital, arial, verdana;
+    text-align: center;
+    color: #fff;
+    position: absolute;
+    top: 0;
+    left: 0;
+
+}
+
+
+#start:checked~.timer .numbers {
+  -webkit-animation-play-state: running;
+  -moz-animation-play-state: running;
+  -o-animation-play-state: running;
+  -ms-animation-play-state: running;
+  animation-play-state: running;
+}
+
+.moveten {
+
+    -webkit-animation: moveten 1s steps(10, end) infinite;
+    -moz-animation: moveten 1s steps(10, end) infinite;
+    -o-animation: moveten 1s steps(10, end) infinite;
+    -ms-animation: moveten 1s steps(10, end) infinite;
+    animation: moveten 1s steps(10, end) infinite;
+
+}
+.movesix {
+    -webkit-animation: movesix 1s steps(6, end) infinite;
+    -moz-animation: movesix 1s steps(6, end) infinite;
+    -o-animation: movesix 1s steps(6, end) infinite;
+    -ms-animation: movesix 1s steps(6, end) infinite;
+    animation: movesix 1s steps(6, end) infinite;
+}
+
+
+.second {
+ -webkit-animation-duration: 10s;
+ -moz-animation-duration: 10s;
+ -o-animation-duration: 10s;
+ -ms-animation-duration: 10s;
+ animation-duration: 10s;
+}
+.tensecond {
+  /*60 times .second*/
+  -webkit-animation-duration: 60s;
+  -moz-animation-duration: 60s;
+  -o-animation-duration: 60s;
+  -ms-animation-duration: 60s;
+  animation-duration: 60s;
+}
+
+.milisecond {
+  /*1/10th of .second*/
+  -webkit-animation-duration: 1s;
+    -moz-animation-duration: 1s;
+    -o-animation-duration: 1s;
+    -ms-animation-duration: 1s;
+    animation-duration: 1s;
+}
+.tenmilisecond {
+  -webkit-animation-duration: 0.1s;
+  -moz-animation-duration: 0.1s;
+  -ms-animation-duration: 0.1s;
+  -o-animation-duration: 0.1s;
+  animation-duration: 0.1s;
+}
+.hundredmilisecond {
+  -webkit-animation-duration: 0.01s;
+  -moz-animation-duration: 0.01s;
+  -o-animation-duration: 0.01s;
+  -ms-animation-duration: 0.01s;
+  animation-duration: 0.01s;
+}
+
+.minute {
+  /*60 times .second*/
+  -webkit-animation-duration: 600s;
+    -moz-animation-duration: 600s;
+    -o-animation-duration: 600s;
+    -ms-animation-duration: 600s;
+    animation-duration: 600s;
+}
+.tenminute {
+  /*60 times .minute*/
+  -webkit-animation-duration: 3600s;
+    -moz-animation-duration: 3600s;
+    -ms-animation-duration: 3600s;
+    -o-animation-duration: 3600s;
+    animation-duration: 3600s;
+}
+
+.hour {
+  /*60 times .minute*/
+  -webkit-animation-duration: 36000s;
+    -moz-animation-duration: 36000s;
+    -ms-animation-duration: 36000s;
+    -o-animation-duration: 36000s;
+    animation-duration: 36000s;
+}
+.tenhour {
+  /*10 times .hour*/
+  -webkit-animation-duration: 360000s;
+    -moz-animation-duration: 360000s;
+    -o-animation-duration: 360000s;
+    -ms-animation-duration: 360000s;
+    animation-duration: 360000s;
+}
+
+@-webkit-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-webkit-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+
+@-moz-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-moz-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-o-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-o-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-ms-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-ms-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
diff --git a/mobile/tct-behavior-tests/tests/ApplicationInvisible/index.html b/mobile/tct-behavior-tests/tests/ApplicationInvisible/index.html
new file mode 100755 (executable)
index 0000000..b1478a0
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <title>ApplicationInvisible</title>
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+  <link rel="stylesheet" type="text/css" href="css/main.css" />
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider"><div>Enter time</div></li><li><div>
+                    <span id="en_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Current time</div></li><li><div>
+                    <span id="current_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Difference time</div></li><li><div>
+                    <span id="diff_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>JS time</div></li><li><div>
+        <div class="container">
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers" id="js_time_tensecond"></div>
+                </div>
+                                <div class="cell2">
+                    <div class="numbers" id="js_time_second"></div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+                <li data-role="list-divider"><div>Animation time :</div></li><li><div>
+        <div class="container">
+            <!-- time to add the controls -->
+            <input id="start" name="controls" type="radio" checked hidden />
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers tensecond movesix">0 1 2 3 4 5 6</div>
+                </div>
+                <div class="cell2">
+                    <div class="numbers second moveten">0 1 2 3 4 5 6 7 8 9</div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies js and css animation will suspend when application goes invisible.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Press the "Home" button on device to return to the menu.</li>
+              <li>Long press "Home" button to start the "Task switcher" and select "tct-behavior-tests".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "JS time" is different from the "Difference time".</li>
+              <li>The "Animation time" is different from the "Difference time".</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationInvisible/js/main.js b/mobile/tct-behavior-tests/tests/ApplicationInvisible/js/main.js
new file mode 100755 (executable)
index 0000000..64d5bf1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+var systime = new Date();
+var timer = systime.getTime();
+var timer2 = systime.toString().substr(15, 16);
+// Time interval
+var t = 1000;
+//Counter of js
+var Num = 0;
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    Refresh();
+    setInterval("Refresh();", t);
+    //The time when entry this page timer2
+    $("#en_time").html(timer2);
+    DisablePassButton();
+    document.addEventListener(visibilitychange, notification);
+});
+
+function Refresh() {
+    Num = Num + 1;
+    //The current time
+    var curtime = new Date();
+    var timer3 = curtime.toString().substr(15, 16);
+    $("#current_time").html(timer3);
+    //The true timer: NowTime - entryTime
+    $("#diff_time").html(Math.floor((new Date().getTime()-timer)/t) % 60);
+    //The timer of js
+    $("#js_time_tensecond").html((Num-1) / 10);
+    $("#js_time_second").html((Num-1) % 10);
+    if(Num == 60){
+        Num = 0;
+    }
+}
+
+function notification() {
+    EnablePassButton();
+}
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/index.html b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/index.html
new file mode 100755 (executable)
index 0000000..06ac0b7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="lifecycle-background-foreground-nosevice">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-nosevice.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-nosevice</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-background-foreground-service">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-service.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-service</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-page-visibility-visibilitychange">
+                    <a href="javascript:goToApp('res/lifecycle-page-visibility-visibilitychange.html')" data-transition="slide" style="">
+                        <h2>lifecycle-page-visibility-visibilitychange</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-powerfailure-reinstall">
+                    <a href="javascript:goToApp('res/lifecycle-powerfailure-reinstall.html')" data-transition="slide" style="">
+                        <h2>lifecycle-powerfailure-reinstall</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies for applications whose execution was suspended the WRT must resume JavaScript execution and rendering(including CSS animations) when Web Application enters visible state.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js
new file mode 100755 (executable)
index 0000000..b990feb
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt3css172',
+                    'wrt3css171',
+                    'wrt3css170',
+                    'wrt1nj0035',
+                    'wrt1nj0036',
+                    'wrt1nj0033',
+                    'wrt1nj0037',
+                    'wrt3lrj019');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ApplicationLifecycle";
+var RESULT_FILE_NAME = "tct-behavior-child.applicationlifecycle.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js
new file mode 100755 (executable)
index 0000000..ab10dea
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ApplicationLifecycle/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html
new file mode 100755 (executable)
index 0000000..cc99047
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-nosevice">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-nosevice"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0035.lifecycleBackgroundForegroundNoservice"/>
+                <input type="hidden" id="package_id" value="wrt1nj0035"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt
new file mode 100755 (executable)
index 0000000..c45067f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html
new file mode 100755 (executable)
index 0000000..22c8057
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-service">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-service"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0036.lifecycleBackgroundForegroundService"/>
+                <input type="hidden" id="package_id" value="wrt1nj0036"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt
new file mode 100755 (executable)
index 0000000..29b6524
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html
new file mode 100755 (executable)
index 0000000..cc46910
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-page-visibility-visibilitychange">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-page-visibility-visibilitychange"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0033.lifecyclePageVisibilitychange"/>
+                <input type="hidden" id="package_id" value="wrt1nj0033"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt
new file mode 100755 (executable)
index 0000000..4637c12
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html
new file mode 100755 (executable)
index 0000000..8db4e4f
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-powerfailure-reinstall">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-powerfailure-reinstall"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0037.lifecyclepowerfailurereinstall"/>
+                <input type="hidden" id="package_id" value="wrt1nj0037"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+                         <li>Use another device with same image and same behavior tool to test.</li>
+              <li>In another device, click the "Install" button to install the widget.</li>
+              <li>In another device, remove battery soon after install the test widget.</li>
+                         <li>Reboot another device and goto behavior to reinstall widget by click the "Install" button.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+                         <li>Another device have installed same version behavior tool</li>
+              <li>The widget installed successfully</li>
+              <li>Device power off, widget install fail</li>
+              <li>Web Application recover to its original state prior, can re-install the application</li>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt
new file mode 100755 (executable)
index 0000000..ac90c7e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/Bluetooth/NOTICE b/mobile/tct-behavior-tests/tests/Bluetooth/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/Bluetooth/index.html b/mobile/tct-behavior-tests/tests/Bluetooth/index.html
new file mode 100755 (executable)
index 0000000..049508a
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Bluetooth Select(Server or Client)</li>
+                <li><div data-role="button" id="server">Server</div></li>
+                <li><div data-role="button" id="client">Client</div></li>
+                <li data-role="list-divider">Write Message</li>
+                <li><input type="text" id="wmsg" value=""/></li>
+                <li><div data-role="button" id="send">Send Message</div></li>
+                <li data-role="list-divider">Receive Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">Bluetooth Disconnect</li>
+                <li><div data-role="button" id="disconnect">Disconnect</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Bluetooth communication between devices supported</p><br>
+                <p>1. You must install the TCT-behavior Test both on the Server device and the Client device</p>
+                <p>2. The one side device selects a Server and the other side device selects a Client</p>
+                <p>3. Establishing a connection between two Bluetooth devices</p>
+                <p>4. Fill in Message and Click Send Message</p>
+                <p>5. Check the message on the other device</p>
+                <p>6. Click the Disconnect button and Check if the Bluetooth disconnected</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Bluetooth/js/main.js b/mobile/tct-behavior-tests/tests/Bluetooth/js/main.js
new file mode 100755 (executable)
index 0000000..cb6d662
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var serverConnected = false;
+var clientConnected = false;
+var globalSocket = null;
+var adapter = null;
+var type = null;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#server").bind("vclick", function() {
+        setListener();
+        startServer();
+        $("#client").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "server";
+    });
+    $("#client").bind("vclick", function() {
+        setListener();
+        connectToServer();
+        $("#server").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "client";
+    });
+    $("#send").bind("vclick", function() {
+        if(type == "server")
+            sendMsgS();
+        if(type == "client")
+            sendMsgC();
+    });
+    $("#disconnect").bind("vclick", function() {
+        adapter.unsetChangeListener();
+        disconnect();
+        serverConnected = false;
+        clientConnected = false;
+        type = null;
+        $("#server").removeClass("ui-disabled");
+        $("#client").removeClass("ui-disabled");
+        $("#disconnect").addClass("ui-disabled");
+        $("#send").addClass("ui-disabled");
+    });
+    $("#send").addClass("ui-disabled");
+    $("#disconnect").addClass("ui-disabled");
+});
+
+function setListener() {
+    var changeListener = {
+        onstatechanged: function(powered) {
+            console.log ("Power state is changed into: " + powered);
+        },
+        onnamechanged: function(name) {
+            console.log("Name is changed to: " + name);
+        },
+        onvisibilitychanged: function(visible) {
+            console.log("Visibility is changed into: " + visible);
+        }
+    };
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    adapter.setChangeListener(changeListener);
+}
+
+function startServer() {
+    if (clientConnected) {
+        alert("Already connected");
+        return;
+    }
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    console.log("StartServer Name : " + "BehaviorBT");
+    function registerSuccessCallback(handler) {
+        chatServiceHandler = handler;
+        alert("Wait for client...");
+        console.log("Chat service register success");
+        chatServiceHandler.onconnect = function(socket) {
+            globalSocket = socket;
+            var peerDevice = socket.peer;
+            alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+            console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+            clientConnected = true;
+            $("#send").removeClass("ui-disabled");
+            socket.onmessage = function() {
+                var data = socket.readData();
+                var recvmsg = "";
+                for (var i = 0; i < data.length;i++) {
+                    recvmsg += String.fromCharCode(data[i]);
+                }
+                recvmsg = decodeURIComponent(recvmsg);
+                document.getElementById("rmsg").innerHTML = "Client : " + recvmsg;
+                alert("Client : " + recvmsg);
+            };
+            socket.onerror = function(e) {
+                console.log("Socket error");
+                clientConnected = false;
+                socket.close();
+            };
+            socket.onclose = function() {
+                clientConnected = false;
+                console.log("Socket disconnected");
+            };
+        };
+    };
+    function onError(e) {
+        console.log("Operation error");
+        clientConnected = false;
+    }
+    function setVisibleAndRegister() {
+        adapter.setVisible(true, function() {
+            adapter.registerRFCOMMServiceByUUID(
+                    "5BCE9431-6C75-32AB-AFE0-2EC108A30860",
+                    "My service",
+                    registerSuccessCallback,
+                    onError
+            );
+        });
+    }
+    function setNameWithTimer() {
+        adapter.setName("BehaviorBT", function() {
+            console.log("Set name ok");
+            setVisibleAndRegister();
+        }, onError);
+    }
+    function onSuccess() {
+        console.log("Turn on success");
+        setTimeout(setNameWithTimer, 3000);
+    }
+    adapter.setPowered(true, onSuccess, function() {
+        console.log("Device is busy");
+        onError();
+    });
+}
+
+function connectToServer() {
+    if (serverConnected) {
+        alert("Already connected");
+        return;
+    }
+    console.log("Connect to Server " + "BehaviorBT");
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    function onSocketConnected(socket) {
+        globalSocket = socket;
+        var peerDevice = socket.peer;
+        alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+        console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+        serverConnected = true;
+        $("#send").removeClass("ui-disabled");
+        socket.onmessage = function() {
+            var data = socket.readData();
+            var recvmsg = "";
+            for (var i = 0; i < data.length;i++) {
+                recvmsg += String.fromCharCode(data[i]);
+            }
+            recvmsg = decodeURIComponent(recvmsg);
+            document.getElementById("rmsg").innerHTML = "Server : " + recvmsg;
+            alert("Server : " + recvmsg);
+        };
+        socket.onerror = function(e) {
+            console.log("Socket error");
+            serverConnected = false;
+            socket.close();
+        };
+        socket.onclose = function() {
+            serverConnected = false;
+            console.log("Socket disconnected");
+        };
+    }
+    function onSocketError(e) {
+        console.log("Socket error: " + e.message);
+        serverConnected = false;
+    }
+    function onError(e) {
+        console.log("Operation error");
+        serverConnected = false;
+    }
+    function getDeviceSuccessCB(device) {
+        if (device != null) {
+            console.log("Get device and then try to connect: " + "5BCE9431-6C75-32AB-AFE0-2EC108A30860");
+            device.connectToServiceByUUID("5BCE9431-6C75-32AB-AFE0-2EC108A30860", onSocketConnected, onSocketError);
+        }
+        else
+            console.log("Get device infomration error");
+    }
+    function bondSuccess(device) {
+        console.log("Bond success!");
+        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+    }
+    var discoverDevicesSuccessCallback = {
+            onstarted : function() {
+                alert("Device discovery start!");
+            },
+            ondevicefound: function (device) {
+                var msg = device.name + "("+ device.address + ")";
+                if (device.name == "BehaviorBT") {
+                    adapter.stopDiscovery(function() {});
+                    console.log("Try to connect");
+                    if (device.isBonded == true) {
+                        console.log("Try to get device information");
+                        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+                    }
+                    else {
+                        console.log("Try to bond");
+                        adapter.createBonding(device.address, bondSuccess, onError);
+                    }
+                }
+                else
+                    console.log(msg + " found");
+            },
+            ondevicedisappeared: function(device) {},
+            onfinished : function (devices) {
+                alert("Discovery finished");
+            }
+    };
+    function onSuccess() {
+        console.log("Turn on success");
+        adapter.discoverDevices(discoverDevicesSuccessCallback, onError);
+    }
+    console.log("Try to turn on");
+    adapter.setPowered(true, onSuccess, onError);
+}
+
+function sendMsgS() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && clientConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function sendMsgC() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && serverConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function disconnect() {
+    if (serverConnected == true && globalSocket != null) {
+        try {
+            globalSocket.close();
+            alert("Disconnected");
+        }
+        catch(e) {
+            console.log(e.message);
+        }
+    }
+    try {
+        if (adapter != null)
+            adapter.setPowered(
+                    false,
+                    function() {
+                        alert("Bluetooth Power Off");
+                        globalSocket = null;
+                        serverConnected = false;
+                        clientConnected = false;
+                        adapter = null;
+                        type = null;
+                    }, function(e) {
+                        console.log(e.message);
+                    }
+            );
+    }
+    catch(e) {
+        console.log(e.message);
+    }
+}
diff --git a/mobile/tct-behavior-tests/tests/CSP/index.html b/mobile/tct-behavior-tests/tests/CSP/index.html
new file mode 100755 (executable)
index 0000000..afb641c
--- /dev/null
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="csp-none">
+                    <a href="javascript:goToApp('res/csp-none.html')" data-transition="slide" style="">
+                        <h2>csp-none</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:goToApp('res/csp-self.html')" data-transition="slide" style="">
+                        <h2>csp-self</h2>
+                    </a>
+                </li>
+                <li id="csp-asterisk">
+                    <a href="javascript:goToApp('res/csp-asterisk.html')" data-transition="slide" style="">
+                        <h2>csp-asterisk</h2>
+                    </a>
+                </li>
+                <li id="csp-cross-origin">
+                    <a href="javascript:goToApp('res/csp-cross-origin.html')" data-transition="slide" style="">
+                        <h2>csp-cross-origin</h2>
+                    </a>
+                </li>
+                <li id="default-policy-by-directives-csp">
+                    <a href="javascript:goToApp('res/default-policy-by-directives-csp.html')" data-transition="slide" style="">
+                        <h2>default-policy-by-directives-csp</h2>
+                    </a>
+                </li>
+                <li id="default-policy-by-directives-report-only">
+                    <a href="javascript:goToApp('res/default-policy-by-directives-report-only.html')" data-transition="slide" style="">
+                        <h2>default-policy-by-directives-report-only</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test default-src directive</li>
+                <li id="default-src_none">
+                    <a href="javascript:goToApp('res/default-src_none.html')" data-transition="slide" style="">
+                        <h2>default-src-none</h2>
+                    </a>
+                </li>
+                <li id="default-src_self">
+                    <a href="javascript:goToApp('res/default-src_self.html')" data-transition="slide" style="">
+                        <h2>default-src-self</h2>
+                    </a>
+                </li>
+                <li id="default-src_asterisk">
+                    <a href="javascript:goToApp('res/default-src_asterisk.html')" data-transition="slide" style="">
+                        <h2>default-src-asterisk</h2>
+                    </a>
+                </li>
+                <li id="default-src_cross_origin">
+                    <a href="javascript:goToApp('res/default-src_cross_origin.html')" data-transition="slide" style="">
+                        <h2>default-src-cross-origin</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test sandbox directive</li>
+                <li id="sandbox-empty-ext">
+                    <a href="javascript:goToApp('res/sandbox-empty-ext.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-ext</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-int">
+                    <a href="javascript:goToApp('res/sandbox-empty-int.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-int</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-inline">
+                    <a href="javascript:goToApp('res/sandbox-empty-inline.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-inline</h2>
+                    </a>
+                </li>
+                <li id="sandbox-same-origin-allow-scripts">
+                    <a href="javascript:goToApp('res/sandbox-same-origin-allow-scripts.html')" data-transition="slide" style="">
+                        <h2>sandbox-same-origin-allow-scripts</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test script-src directive</li>
+                <li id="script-src_none">
+                    <a href="javascript:goToApp('res/script-src_none.html')" data-transition="slide" style="">
+                        <h2>script-src-none</h2>
+                    </a>
+                </li>
+                <li id="script-src_inline_eval">
+                    <a href="javascript:goToApp('res/script-src_inline_eval.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-eval</h2>
+                    </a>
+                </li>
+                <!--<li id="script-src-inline-allow">
+                    <a href="javascript:goToApp('res/script-src-inline-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-block">
+                    <a href="javascript:goToApp('res/script-src-inline-block.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-allow">
+                    <a href="javascript:goToApp('res/script-src-eval-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-block">
+                    <a href="javascript:goToApp('res/script-src-eval-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-constructor-block">
+                    <a href="javascript:goToApp('res/script-src-eval-constructor-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-constructor-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-constructor-allow">
+                    <a href="javascript:goToApp('res/script-src-eval-constructor-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-constructor-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-timeout-block">
+                    <a href="javascript:goToApp('res/script-src-eval-timeout-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-timeout-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-interval-block">
+                    <a href="javascript:goToApp('res/script-src-eval-interval-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-interval-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-without-uri">
+                    <a href="javascript:goToApp('res/script-src-inline-without-uri.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-without-uri</h2>
+                    </a>
+                </li>
+                 <li id="script-src-inline-with-uri">
+                    <a href="javascript:goToApp('res/script-src-inline-with-uri.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-with-uri</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-with-uri-constructor">
+                    <a href="javascript:goToApp('res/script-src-inline-with-uri-constructor.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-with-uri-constructor</h2>
+                    </a>
+                </li>
+                <li id="script-src-self-config-block">
+                    <a href="javascript:goToApp('res/script-src-self-config-block.html')" data-transition="slide" style="">
+                        <h2>script-src-self-config-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-self-http-config-block">
+                    <a href="javascript:goToApp('res/script-src-self-http-config-block.html')" data-transition="slide" style="">
+                        <h2>script-src-self-http-config-block</h2>
+                    </a>
+                </li>-->
+                <li data-role="list-divider" role="heading">Test style-src directive</li>
+                <li id="style-src_self">
+                    <a href="javascript:goToApp('res/style-src_self.html')" data-transition="slide" style="">
+                        <h2>style-src-self</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of CSP worked well.</p>
+            <p>Test Pre-condition: </p>
+            <p>Tinyweb server launched with the command: "tinyweb -ssl_certificate /usr/share/tinyweb/server.pem -document_root / -listening_ports 80,8080,8081,8082,8083,8443s".</p>
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of CSP worked well when script-src, object-src, style-src, img-src, media-src, frame-src, font-src, connect-src directives set different values.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/js/main.js b/mobile/tct-behavior-tests/tests/CSP/js/main.js
new file mode 100755 (executable)
index 0000000..8d38733
--- /dev/null
@@ -0,0 +1,317 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('beh1csp001',
+                    'beh1csp002',
+                    'beh1csp003',
+                    'beh1csp004',
+                    'beh1csp005',
+                    'beh1csp006',
+                    'beh1csp007',
+                    'beh1csp008',
+                    'beh1csp009',
+                    'beh1csp010',
+                    'beh1csp011',
+                    'beh1csp012',
+                    'beh1csp013',
+                    'beh1csp014',
+                    'beh1csp015',
+                    'beh1csp016',
+                    'beh1csp017',
+                    'WRTCSP0002',
+                    'WRTCSP0003',
+                    'WRTCSP0004',
+                    'WRTCSP0005',
+                    'WRTCSP0006',
+                    'WRTCSP0007',
+                    'WRTCSP0008',
+                    'WRTCSP0010',
+                    'WRTCSP0012',
+                    'WRTCSP0013',
+                    'WRTCSP0014',
+                    'WRTCSP0018',
+                    'WRTCSP0019');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CSP";
+var RESULT_FILE_NAME = "tct-behavior-child.csp.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/CSP/js/tests.js b/mobile/tct-behavior-tests/tests/CSP/js/tests.js
new file mode 100755 (executable)
index 0000000..7a1ab1e
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CSP/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.html b/mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.html
new file mode 100755 (executable)
index 0000000..ea1eed6
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp001.cspasterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+               <li>$ web-tct_2.3/tools/python tct-config-device.py --check proc=tinyweb</li>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt b/mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt
new file mode 100755 (executable)
index 0000000..7ea4d84
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html b/mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html
new file mode 100755 (executable)
index 0000000..15baea4
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-cross-origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-cross-origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp002.cspcrossorigin"/>
+                <input type="hidden" id="package_id" value="beh1csp002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...8, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt b/mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt
new file mode 100755 (executable)
index 0000000..5c3d3ef
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-none.html b/mobile/tct-behavior-tests/tests/CSP/res/csp-none.html
new file mode 100755 (executable)
index 0000000..6c943e2
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-none"/>
+                <input type="hidden" id="app_id"  value="beh1csp003.cspnone"/>
+                <input type="hidden" id="package_id" value="beh1csp003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-none.wgt b/mobile/tct-behavior-tests/tests/CSP/res/csp-none.wgt
new file mode 100755 (executable)
index 0000000..d4327ca
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/csp-none.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-self.html b/mobile/tct-behavior-tests/tests/CSP/res/csp-self.html
new file mode 100755 (executable)
index 0000000..4ed8eec
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-self"/>
+                <input type="hidden" id="app_id"  value="beh1csp004.cspself"/>
+                <input type="hidden" id="package_id" value="beh1csp004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/csp-self.wgt b/mobile/tct-behavior-tests/tests/CSP/res/csp-self.wgt
new file mode 100755 (executable)
index 0000000..82f7733
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/csp-self.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html
new file mode 100755 (executable)
index 0000000..2aa72e7
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-csp">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-csp"/>
+                <input type="hidden" id="app_id"  value="beh1csp016.DefaultPolicyByDirectivesCsp"/>
+                <input type="hidden" id="package_id" value="beh1csp016"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt
new file mode 100755 (executable)
index 0000000..3f406d4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html
new file mode 100755 (executable)
index 0000000..9a0f395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-report-only">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-report-only"/>
+                <input type="hidden" id="app_id"  value="beh1csp017.DefaultPolicyByDirectivesReportOnly"/>
+                <input type="hidden" id="package_id" value="beh1csp017"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt
new file mode 100755 (executable)
index 0000000..e2ed746
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html b/mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html
new file mode 100755 (executable)
index 0000000..9365374
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp015.defaultSrcAsterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt
new file mode 100755 (executable)
index 0000000..c63485c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html b/mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html
new file mode 100755 (executable)
index 0000000..ebe5e6e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_cross_origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_cross_origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp014.defaultSrcCrossOrigin"/>
+                <input type="hidden" id="package_id" value="beh1csp014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...2, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt
new file mode 100755 (executable)
index 0000000..cdc834c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_none.html b/mobile/tct-behavior-tests/tests/CSP/res/default-src_none.html
new file mode 100755 (executable)
index 0000000..1b2d0c3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp013.defaultSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_none.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-src_none.wgt
new file mode 100755 (executable)
index 0000000..062c2e7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-src_none.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_self.html b/mobile/tct-behavior-tests/tests/CSP/res/default-src_self.html
new file mode 100755 (executable)
index 0000000..f8eab61
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp012.defaultSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...5, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/default-src_self.wgt b/mobile/tct-behavior-tests/tests/CSP/res/default-src_self.wgt
new file mode 100755 (executable)
index 0000000..f7cc414
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/default-src_self.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/movie_5.mp4 b/mobile/tct-behavior-tests/tests/CSP/res/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/movie_5.mp4 differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html
new file mode 100755 (executable)
index 0000000..5479c3b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-ext">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-ext"/>
+                <input type="hidden" id="app_id"  value="beh1csp011.sandboxemptyext"/>
+                <input type="hidden" id="package_id" value="beh1csp011"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt
new file mode 100755 (executable)
index 0000000..8e31a1a
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html
new file mode 100755 (executable)
index 0000000..bb14fbb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-inline">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-inline"/>
+                <input type="hidden" id="app_id"  value="beh1csp010.sandboxemptyinline"/>
+                <input type="hidden" id="package_id" value="beh1csp010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt
new file mode 100755 (executable)
index 0000000..c6f5937
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html
new file mode 100755 (executable)
index 0000000..2f5f0fe
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-int">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-int"/>
+                <input type="hidden" id="app_id"  value="beh1csp009.sandboxemptyint"/>
+                <input type="hidden" id="package_id" value="beh1csp009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt
new file mode 100755 (executable)
index 0000000..0f826a3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html
new file mode 100755 (executable)
index 0000000..f2b474f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-same-origin-allow-scripts">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-same-origin-allow-scripts"/>
+                <input type="hidden" id="app_id"  value="beh1csp008.sandboxsameoriginallowscripts"/>
+                <input type="hidden" id="package_id" value="beh1csp008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are three "Pass" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt
new file mode 100755 (executable)
index 0000000..611e293
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html
new file mode 100755 (executable)
index 0000000..3d73b31
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-only-allow">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0005.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt
new file mode 100755 (executable)
index 0000000..9028f6f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html
new file mode 100755 (executable)
index 0000000..38b3884
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0004.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt
new file mode 100755 (executable)
index 0000000..da7c5cf
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html
new file mode 100755 (executable)
index 0000000..82e4e67
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-constructor_only-allow">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-constructor-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0007.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt
new file mode 100755 (executable)
index 0000000..b14abe1
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html
new file mode 100755 (executable)
index 0000000..1a41fd1
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-constructor_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-constructor-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0006.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt
new file mode 100755 (executable)
index 0000000..b37c060
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html
new file mode 100755 (executable)
index 0000000..5254a26
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-interval_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-interval-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0010.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt
new file mode 100755 (executable)
index 0000000..24d8243
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html
new file mode 100755 (executable)
index 0000000..7ba4c5c
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-timeout_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-timeout-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0008.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt
new file mode 100755 (executable)
index 0000000..93bd674
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html
new file mode 100755 (executable)
index 0000000..19a799f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="CSP_02">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0002.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt
new file mode 100755 (executable)
index 0000000..309ce09
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html
new file mode 100755 (executable)
index 0000000..61dfd96
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="CSP_02">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0003.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt
new file mode 100755 (executable)
index 0000000..d80e3e7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html
new file mode 100755 (executable)
index 0000000..b8e90b1
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-with-uri-constructor">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-with-uri-constructor"/>
+                <input type="hidden" id="app_id" value="WRTCSP0014.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt
new file mode 100755 (executable)
index 0000000..d53cb62
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html
new file mode 100755 (executable)
index 0000000..924bf4b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-with-uri">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-with-uri"/>
+                <input type="hidden" id="app_id" value="WRTCSP0013.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt
new file mode 100755 (executable)
index 0000000..61c0c8c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html
new file mode 100755 (executable)
index 0000000..8fee5c5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-without-uri">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-without-uri"/>
+                <input type="hidden" id="app_id" value="WRTCSP0012.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt
new file mode 100755 (executable)
index 0000000..93bb826
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html
new file mode 100755 (executable)
index 0000000..7a07405
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-self-config-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-self-config-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0019.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0019"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt
new file mode 100755 (executable)
index 0000000..cb82f13
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html
new file mode 100755 (executable)
index 0000000..78d5437
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-self-http-config-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-self-http-config-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0018.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0018"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt
new file mode 100755 (executable)
index 0000000..035277f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html
new file mode 100755 (executable)
index 0000000..f5f8120
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_inline_eval">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_inline_eval"/>
+                <input type="hidden" id="app_id" value="beh1csp006.scriptSrcInlineEval"/>
+                <input type="hidden" id="package_id" value="beh1csp006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt
new file mode 100755 (executable)
index 0000000..228f2bf
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src_none.html b/mobile/tct-behavior-tests/tests/CSP/res/script-src_none.html
new file mode 100755 (executable)
index 0000000..b7dfbe8
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp007.scriptSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/script-src_none.wgt b/mobile/tct-behavior-tests/tests/CSP/res/script-src_none.wgt
new file mode 100755 (executable)
index 0000000..2cfaeee
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/script-src_none.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/style-src_self.html b/mobile/tct-behavior-tests/tests/CSP/res/style-src_self.html
new file mode 100755 (executable)
index 0000000..70c21eb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="style-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="style-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp005.styleSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" under a blue square.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSP/res/style-src_self.wgt b/mobile/tct-behavior-tests/tests/CSP/res/style-src_self.wgt
new file mode 100755 (executable)
index 0000000..dd062b5
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CSP/res/style-src_self.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css b/mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css
new file mode 100755 (executable)
index 0000000..8da8d40
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        li, cici <cici.x.li@intel.com>
+
+*/
+
+@keyframes cssAnimate
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-webkit-keyframes cssAnimate /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-moz-keyframes cssAnimate /* Firefox */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-o-keyframes cssAnimate /* Opera */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@keyframes cssAnimate2
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink; }
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-webkit-keyframes cssAnimate2 /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-moz-keyframes cssAnimate2 /* Firefox */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-o-keyframes cssAnimate2 /* Opera */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+#testbox1
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate 10s 1;
+        -webkit-animation:cssAnimate 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate 10s 1; /* Firefox */
+        -o-animation:cssAnimate 10s 1; /* Opera */
+        border-radius:5px;
+        -webkit-border-radius:5px;
+}
+
+#testbox2
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate2 10s 1;
+        -webkit-animation:cssAnimate2 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate2 10s 1; /* Firefox */
+        -o-animation:cssAnimate2 10s 1; /* Opera */
+        border-radius:15px;
+        -webkit-border-radius:100px;
+}
+
+#box {
+        height: 100%;
+        width: 80%;
+        margin: 5px auto;
+        box-shadow: 10px 10px 5px #888888;
+        border:5px #92B901 outset;
+        border-radius:20px;
+        transition: border 1s linear;
+        -webkit-transition: border 1s linear;
+}
+
+#box.final {
+        border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+        width: 100%;
+        height: 300px;
+        padding: 30px 0px;
+        border: 3px  #000;
+}
diff --git a/mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html b/mobile/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html
new file mode 100755 (executable)
index 0000000..ed29533
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script type="text/javascript">
+          function reloadTest() {
+                document.location.reload();
+          }
+        </script>
+
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testbox1" style="color:black; top:25%"> SQUARE </div>
+          <div id="testbox2" style="color:white; top:25%"> CIRCLE </div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS two boxes: </p>
+        <p>1. Color is changing in order of green, pink, blue, green, red, green; </p>
+        <p>2. Square/Circle move with 20 degree direction from left to right; </p>
+        <p>3. About rotate direction from left to right, square is rotate in 2D(180degree), circle is rotate in 3D(Y-axis); </p>
+        <p>4. Square/circle is transfering between square/circle when moving from right to left; </p>
+        <p>5. About font type, "SQUARE" is black, "CIRCLE" is white, both are 8 px size; </p>
+        <p>6. About frame box border, style is outset in green, with gray shadow. </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the transformation and animation function well follow above 6 rules.</p>
+      </font>
+    </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSSAnimation/css/style.css b/mobile/tct-behavior-tests/tests/CSSAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..cb19b67
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+@-webkit-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@-moz-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+
+#testBox {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    position: relative;
+    margin: 20px 8px;
+    border: 3px solid yellow;
+    /* Transition */
+    -webkit-transition-duration: 5s;
+    -webkit-transition-timing-function: linear;
+
+     color: Yellow;
+     text-align: center;
+     vertical-align: middle;
+
+
+    -webkit-animation-name: sample;
+    -webkit-animation-duration: 10s;
+    -webkit-animation-timing-function: ease;
+    -webkit-animation-delay: 2s;
+    -webkit-animation-play-state: running;
+    -webkit-animation-iteration-count: 10;
+    -webkit-animation-direction: normal;
+
+    -moz-animation-name: sample;
+    -moz-animation-duration: 10s;
+    -moz-animation-timing-function: ease;
+    -moz-animation-delay: 2s;
+    -moz-animation-play-state: running;
+    -moz-animation-iteration-count: 10;
+    -moz-animation-direction: normal;
+
+    animation-name: sample;
+    animation-duration: 10s;
+    animation-timing-function: ease;
+    animation-delay: 2s;
+    animation-play-state: running;
+    animation-iteration-count: 10;
+    animation-direction: normal;
+}
+
+#testBox.final {
+    border-radius: 50px;
+    -webkit-border-radius: 50px;
+    transition-delay: 2s;
+    -webkit-transition-delay: 2s;
+}
+
+#box {
+    height: 150px;
+    width: 300px;
+    margin: 0px auto;
+    background-color: #ccc;
+    border: 0px solid rgb(0, 0, 255);
+    transition: border 1s linear;
+    -webkit-transition: border 1s linear;
+}
+
+#box.final {
+    border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+    width: 100%;
+    height: 180px;
+    padding: 30px 0px;
+    border: 1px solid #000;
+}
diff --git a/mobile/tct-behavior-tests/tests/CSSAnimation/index.html b/mobile/tct-behavior-tests/tests/CSSAnimation/index.html
new file mode 100755 (executable)
index 0000000..0e1c3b9
--- /dev/null
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/transition-test-helpers.js"></script>
+    <script type="text/javascript">
+        var test_box;
+        var box_txt = "1";
+        function init() {
+            test_box = document.getElementById("testBox");
+            test_box.addEventListener("webkitAnimationIteration", start_f, true);
+            test_box.addEventListener("animationiteration", start_f, true);
+        }
+        function start_f() {
+            try {
+                box_txt = test_box.innerText;
+                test_box.innerText = parseInt(box_txt) + 1;
+                if (test_box.innerText % 2 == 0)
+                    $("#testBox").removeClass("final");
+                else
+                    $("#testBox").addClass("final");
+            } catch (err) {
+                test_box.innerText = box_txt;
+            }
+        }
+
+        function reloadTest() {
+            document.location.reload();
+        }
+
+        const expectedValues = [
+          // [time, element-id, property, expected-value, tolerance]
+          // [0.25, 'box', 'border-top-left-radius', 25, 5],
+          [0.25, 'testBox', 'border-radius', 25, 500]
+        ];
+
+        const expectedValues2 = [
+            [0.5, 'box', 'border-top-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-right-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-bottom-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-left-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-top-width', 10, 200],
+            [0.5, 'box', 'border-right-width', 10, 200],
+            [0.5, 'box', 'border-bottom-width', 10, 200],
+            [0.5, 'box', 'border-left-width', 10, 200]
+        ];
+        function setupTest() {
+            document.getElementById('testBox').className = 'testBox final';
+        }
+        function setupTest2() {
+            var box = document.getElementById('box');
+            box.className = 'final';
+        }
+        runTransitionTest(expectedValues, setupTest, usePauseAPI);
+        runTransitionTest(expectedValues2, setupTest2, usePauseAPI);
+    </script>
+  </head>
+  <body bgcolor="FFFFFF"  onload="init()">
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testBox">1</div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS box is transferring between square and circle when moving from left to right, its background color is changing in the order of red, green and blue, and the counter record the times of CSS animation from 1 to 10.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and animation functions all work well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSSAnimation/js/COPYING b/mobile/tct-behavior-tests/tests/CSSAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..86c307b
--- /dev/null
@@ -0,0 +1,6 @@
+The code of main.js comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/transitions/resources/transition-test-helpers.js
+without modification.
+
+These resources are under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
diff --git a/mobile/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js b/mobile/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js
new file mode 100755 (executable)
index 0000000..793460e
--- /dev/null
@@ -0,0 +1,296 @@
+/* This is the helper function to run transition tests:
+
+Test page requirements:
+- The body must contain an empty div with id "result"
+- Call this function directly from the <script> inside the test page
+
+Function parameters:
+    expected [required]: an array of arrays defining a set of CSS properties that must have given values at specific times (see below)
+    callback [optional]: a function to be executed just before the test starts (none by default)
+    
+    Each sub-array must contain these items in this order:
+    - the time in seconds at which to snapshot the CSS property
+    - the id of the element on which to get the CSS property value
+    - the name of the CSS property to get [1]
+    - the expected value for the CSS property
+    - the tolerance to use when comparing the effective CSS property value with its expected value
+    
+    [1] If the CSS property name is "-webkit-transform", expected value must be an array of 1 or more numbers corresponding to the matrix elements,
+    or a string which will be compared directly (useful if the expected value is "none")
+    If the CSS property name is "-webkit-transform.N", expected value must be a number corresponding to the Nth element of the matrix
+
+*/
+
+const usePauseAPI = true;
+const dontUsePauseAPI = false;
+
+const shouldBeTransitioning = true;
+const shouldNotBeTransitioning = false;
+
+function roundNumber(num, decimalPlaces)
+{
+  return Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
+}
+
+function isCloseEnough(actual, desired, tolerance)
+{
+    var diff = Math.abs(actual - desired);
+    return diff <= tolerance;
+}
+
+function isShadow(property)
+{
+  return (property == '-webkit-box-shadow' || property == 'text-shadow');
+}
+
+function getShadowXY(cssValue)
+{
+    var text = cssValue.cssText;
+    // Shadow cssText looks like "rgb(0, 0, 255) 0px -3px 10px 0px"
+    var shadowPositionRegExp = /\)\s*(-?\d+)px\s*(-?\d+)px/;
+    var result = shadowPositionRegExp.exec(text);
+    return [parseInt(result[1]), parseInt(result[2])];
+}
+
+function compareRGB(rgb, expected, tolerance)
+{
+    return (isCloseEnough(parseInt(rgb[0]), expected[0], tolerance) &&
+            isCloseEnough(parseInt(rgb[1]), expected[1], tolerance) &&
+            isCloseEnough(parseInt(rgb[2]), expected[2], tolerance));
+}
+
+function parseCrossFade(s)
+{
+    var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
+
+    if (!matches)
+        return null;
+
+    return {"from": matches[1], "to": matches[2], "percent": parseFloat(matches[3])}
+}
+
+function checkExpectedValue(expected, index)
+{
+    var time = expected[index][0];
+    var elementId = expected[index][1];
+    var property = expected[index][2];
+    var expectedValue = expected[index][3];
+    var tolerance = expected[index][4];
+    var postCompletionCallback = expected[index][5];
+
+    var computedValue;
+    var pass = false;
+    var transformRegExp = /^-webkit-transform(\.\d+)?$/;
+    if (transformRegExp.test(property)) {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).webkitTransform;
+        if (typeof expectedValue == "string")
+            pass = (computedValue == expectedValue);
+        else if (typeof expectedValue == "number") {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            pass = isCloseEnough(parseFloat(m[parseInt(property.substring(18))]), expectedValue, tolerance);
+        } else {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            for (i = 0; i < expectedValue.length; ++i) {
+                pass = isCloseEnough(parseFloat(m[i]), expectedValue[i], tolerance);
+                if (!pass)
+                    break;
+            }
+        }
+    } else if (property == "fill" || property == "stroke") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).rgbColor;
+        if (compareRGB([computedValue.red.cssText, computedValue.green.cssText, computedValue.blue.cssText], expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        }
+    } else if (property == "stop-color" || property == "flood-color" || property == "lighting-color") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        // The computedValue cssText is rgb(num, num, num)
+        var components = computedValue.cssText.split("(")[1].split(")")[0].split(",");
+        if (compareRGB(components, expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = computedValue.cssText;
+        }
+    } else if (property == "lineHeight") {
+        computedValue = parseInt(window.getComputedStyle(document.getElementById(elementId)).lineHeight);
+        pass = isCloseEnough(computedValue, expectedValue, tolerance);
+    } else if (property == "background-image"
+               || property == "border-image-source"
+               || property == "border-image"
+               || property == "list-style-image"
+               || property == "-webkit-mask-image"
+               || property == "-webkit-mask-box-image") {
+        if (property == "border-image" || property == "-webkit-mask-image" || property == "-webkit-mask-box-image")
+            property += "-source";
+        
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        computedCrossFade = parseCrossFade(computedValue);
+
+        if (!computedCrossFade) {
+            pass = false;
+        } else {
+            pass = isCloseEnough(computedCrossFade.percent, expectedValue, tolerance);
+        }
+    } else {
+        var computedStyle = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        if (computedStyle.cssValueType == CSSValue.CSS_VALUE_LIST) {
+            var values = [];
+            for (var i = 0; i < computedStyle.length; ++i) {
+                switch (computedStyle[i].cssValueType) {
+                  case CSSValue.CSS_PRIMITIVE_VALUE:
+                    values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
+                    break;
+                  case CSSValue.CSS_CUSTOM:
+                    // arbitrarily pick shadow-x and shadow-y
+                    if (isShadow) {
+                      var shadowXY = getShadowXY(computedStyle[i]);
+                      values.push(shadowXY[0]);
+                      values.push(shadowXY[1]);
+                    } else
+                      values.push(computedStyle[i].cssText);
+                    break;
+                }
+            }
+            computedValue = values.join(',');
+            pass = true;
+            for (var i = 0; i < values.length; ++i)
+                pass &= isCloseEnough(values[i], expectedValue[i], tolerance);
+        } else if (computedStyle.cssValueType == CSSValue.CSS_PRIMITIVE_VALUE) {
+            switch (computedStyle.primitiveType) {
+                case CSSPrimitiveValue.CSS_STRING:
+                case CSSPrimitiveValue.CSS_IDENT:
+                    computedValue = computedStyle.getStringValue();
+                    pass = computedValue == expectedValue;
+                    break;
+                case CSSPrimitiveValue.CSS_RGBCOLOR:
+                    var rgbColor = computedStyle.getRGBColorValue();
+                    computedValue = [rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)]; // alpha is not exposed to JS
+                    pass = true;
+                    for (var i = 0; i < 3; ++i)
+                        pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_RECT:
+                    computedValue = computedStyle.getRectValue();
+                    computedValue = [computedValue.top.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.right.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.bottom.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.left.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)];
+                     pass = true;
+                     for (var i = 0; i < 4; ++i)
+                         pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_PERCENTAGE:
+                    computedValue = parseFloat(computedStyle.cssText);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+                    break;
+                default:
+                    computedValue = computedStyle.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+            }
+        }
+    }
+
+    if (pass)
+        result += "PASS - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s saw something close to: " + expectedValue + "<br>";
+    else
+        result += "FAIL - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s expected: " + expectedValue + " but saw: " + computedValue + "<br>";
+
+    if (postCompletionCallback)
+      result += postCompletionCallback();
+}
+
+function endTest()
+{
+    document.getElementById('result').innerHTML = result;
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+function checkExpectedValueCallback(expected, index)
+{
+    return function() { checkExpectedValue(expected, index); };
+}
+
+function runTest(expected, usePauseAPI)
+{
+    var maxTime = 0;
+    for (var i = 0; i < expected.length; ++i) {
+        var time = expected[i][0];
+        var elementId = expected[i][1];
+        var property = expected[i][2];
+        if (!property.indexOf("-webkit-transform."))
+            property = "-webkit-transform";
+
+        var tryToPauseTransition = expected[i][6];
+        if (tryToPauseTransition === undefined)
+          tryToPauseTransition = shouldBeTransitioning;
+
+        if (hasPauseTransitionAPI && usePauseAPI) {
+            if (tryToPauseTransition) {
+              var element = document.getElementById(elementId);
+              if (!internals.pauseTransitionAtTimeOnElement(property, time, element))
+                window.console.log("Failed to pause '" + property + "' transition on element '" + elementId + "'");
+            }
+            checkExpectedValue(expected, i);
+        } else {
+            if (time > maxTime)
+                maxTime = time;
+
+            window.setTimeout(checkExpectedValueCallback(expected, i), time * 1000);
+        }
+    }
+
+    if (maxTime > 0)
+        window.setTimeout(endTest, maxTime * 1000 + 50);
+    else
+        endTest();
+}
+
+function waitForAnimationStart(callback, delay)
+{
+    var delayTimeout = delay ? 1000 * delay + 10 : 0;
+    // Why the two setTimeouts? Well, for hardware animations we need to ensure that the hardware animation
+    // has started before we try to pause it, and timers fire before animations get committed in the runloop.
+    window.setTimeout(function() {
+        window.setTimeout(function() {
+            callback();
+        }, 0);
+    }, delayTimeout);
+}
+
+function startTest(expected, usePauseAPI, callback)
+{
+    if (callback)
+        callback();
+
+    waitForAnimationStart(function() {
+        runTest(expected, usePauseAPI);
+    });
+}
+
+var result = "";
+var hasPauseTransitionAPI;
+
+function runTransitionTest(expected, callback, usePauseAPI, doPixelTest)
+{
+    hasPauseTransitionAPI = 'internals' in window;
+    
+    if (window.testRunner) {
+        if (!doPixelTest)
+            testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    if (!expected)
+        throw("Expected results are missing!");
+    
+    window.addEventListener("load", function() { startTest(expected, usePauseAPI, callback); }, false);
+}
diff --git a/mobile/tct-behavior-tests/tests/CSSStyle/css/style.css b/mobile/tct-behavior-tests/tests/CSSStyle/css/style.css
new file mode 100755 (executable)
index 0000000..1d31a68
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Align */
+.text-left{
+    text-align: left;
+}
+.text-right{
+    text-align: right;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+/* CSS text-decoration */
+.decoration1{
+    text-decoration: underline;
+}
+.decoration2{
+    text-decoration: line-through;
+}
+.decoration3{
+    text-decoration: overline;
+}
+
+/* CSS break-word */
+.break1{
+    word-break: break-all;
+    text-align: justify;
+}
+.break2{
+    word-break: break-word;
+    text-align: justify;
+}
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/mobile/tct-behavior-tests/tests/CSSStyle/index.html b/mobile/tct-behavior-tests/tests/CSSStyle/index.html
new file mode 100755 (executable)
index 0000000..6680e5b
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+    <style>
+        .normalSpan {
+            display:none;
+            color:red;
+        }
+        .columnSpan {
+            visibility:hidden;
+            color:red;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content" class="content">
+        <div id="d">
+          <div id="text-div">
+            <div id="p"><span class="normalSpan">A</span>
+              By&nbsp;using&nbsp;functionality&nbsp;described in this document, style sheets can declare that the content of an element is to be laid out in multiple columns.
+              <h3 id="h"><span class="columnSpan">A</span>column span</h3>
+              The main benefit of using CSS-based columns is flexibility; content can flow from one column to another.
+            </div>
+          </div>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Mulcolumn</label>
+            <a id="on" data-role="button">On</a>
+            <a id="off" data-role="button">Off</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-1">Transparency</label>
+            <input name="slider-1" id="slider-1" min="0" max="1" step=".01" value="1" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="u">
+            <label for="slider-1">Font Color</label>
+            <a id="red" data-role="button">Red</a>
+            <a id="green" data-role="button">Green</a>
+            <a id="blue" data-role="button">Blue</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Align</label>
+            <a id="left" data-role="button">Left</a>
+            <a id="right" data-role="button">Right</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Transform</label>
+            <a id="upper" data-role="button">Uppercase</a>
+            <a id="lower" data-role="button">Lowercase</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Shadow</label>
+            <a id="shadow1" data-role="button">Shadow1</a>
+            <a id="shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Box Shadow</label>
+            <a id="box-shadow1" data-role="button">Shadow1</a>
+            <a id="box-shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-2">Outline offset</label>
+            <input name="slider-2" id="slider-2" min="0" max="15" step="1" value="5" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Border</label>
+            <a id="border1" data-role="button">Border1</a>
+            <a id="border2" data-role="button">Border2</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="u">
+            <label for="slider-1">Text Decoration</label>
+            <a id="decoration1" data-role="button">Underline</a>
+            <a id="decoration2" data-role="button">Through</a>
+            <a id="decoration3" data-role="button">Overline</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Word Break</label>
+            <a id="break1" data-role="button">Break All</a>
+            <a id="break2" data-role="button">Break Word</a>
+        </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies</p>
+        <ul>
+          <li>the dotted line box has a white background, red first letter, green dotted border.</li>
+          <li>the general description uses default font in browser.</li>
+          <li>the functionality of all the text color in red, green or blue, background transparence from 0% to 100%, outline offset from 0 to 15, multicolumn enabling and disabling.</li>
+          <li>the text align in left or right, text in uppercase or lowercase, text and box shadow in two effects, text decoration in three effects and word break in two effects.</li>
+          <li>the "column span" text shows in random code when using uppercase.</li>
+        </ul>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well in the dotted line box.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CSSStyle/js/COPYING b/mobile/tct-behavior-tests/tests/CSSStyle/js/COPYING
new file mode 100755 (executable)
index 0000000..2cd9881
--- /dev/null
@@ -0,0 +1,42 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue*100)+"%");
++                $("#p").css("opacity", newValue);
++                if(newValue != 1){
++                    testFlag.Transparency = true;
++                    status();
++                }
++            }
++        }else if(ID == "slider-2"){
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue));
++                $("#text-div").css("outline-offset", newValue);
++                if(newValue != 5){
++                    testFlag.Outline = true;
++                    status();
++                }
++            }
++        }
+-        if (o.popupEnabled) {
+-            this._positionPopup();
+-            this._popup.html(Math.round(newValue));
+-        }
+-        if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
+-        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/mobile/tct-behavior-tests/tests/CSSStyle/js/main.js b/mobile/tct-behavior-tests/tests/CSSStyle/js/main.js
new file mode 100755 (executable)
index 0000000..3176a7e
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var testFlag={
+        Mulcolumn: false,
+        Transparency: false,
+        Color: false,
+        Align: false,
+        Transform: false,
+        TextShadow: false,
+        BoxShadow: false,
+        Outline: false,
+        Border: false,
+        Decoration: false,
+        Break: false
+    };
+
+function status(){
+    if(testFlag.Mulcolumn && testFlag.Transparency && testFlag.Color && testFlag.Align && testFlag.Transform && testFlag.TextShadow && testFlag.BoxShadow && testFlag.Outline && testFlag.Border && testFlag.Decoration && testFlag.Break)
+        EnablePassButton();
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    /** CSS Multicolumn */
+    $("#on").click(function(){
+        $("#off").removeClass("text-on");
+        $("#on").addClass("text-on");
+        $("#p").addClass("text-multi");
+        $("#h").addClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+    $("#off").click(function(){
+        $("#on").removeClass("text-on");
+        $("#off").addClass("text-on");
+        $("#p").removeClass("text-multi");
+        $("#h").removeClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+
+    /** CSS Color */
+    $("#red").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#red").toggleClass("text-on");
+        // remove text-green and text-blue style
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-red style
+        $p.toggleClass("text-red");
+        testFlag.Color = true;
+        status();
+    });
+    $("#green").click(function(){
+        var $p = $("#p");
+        $("#red").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#green").toggleClass("text-on");
+        // remove text-red and text-blue style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-green style
+        $p.toggleClass("text-green");
+        testFlag.Color = true;
+        status();
+    });
+    $("#blue").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#red").removeClass("text-on");
+        $("#blue").toggleClass("text-on");
+        // remove text-red and text-green style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        // add/remove text-blue style
+        $p.toggleClass("text-blue");
+        testFlag.Color = true;
+        status();
+    });
+
+    /** CSS Text Align */
+    $("#left").click(function(){
+        $("#right").removeClass("text-on");
+        $("#left").toggleClass("text-on");
+        $("#p").removeClass("text-right");
+        $("#p").toggleClass("text-left");
+        testFlag.Align = true;
+        status();
+    });
+    $("#right").click(function(){
+        $("#left").removeClass("text-on");
+        $("#right").toggleClass("text-on");
+        $("#p").removeClass("text-left");
+        $("#p").toggleClass("text-right");
+        testFlag.Align = true;
+        status();
+    });
+
+    /** CSS Text Transform */
+    $("#upper").click(function(){
+        $("#lower").removeClass("text-on");
+        $("#upper").toggleClass("text-on");
+        $("#p").removeClass("text-lower");
+        $("#p").toggleClass("text-upper");
+        testFlag.Transform = true;
+        status();
+    });
+    $("#lower").click(function(){
+        $("#upper").removeClass("text-on");
+        $("#lower").toggleClass("text-on");
+        $("#p").removeClass("text-upper");
+        $("#p").toggleClass("text-lower");
+        testFlag.Transform = true;
+        status();
+    });
+
+    /** CSS Text Shadow */
+    $("#shadow1").click(function(){
+        $("#shadow2").removeClass("text-on");
+        $("#shadow1").toggleClass("text-on");
+        $("#p").removeClass("text-shadow2");
+        $("#p").toggleClass("text-shadow1");
+        testFlag.TextShadow = true;
+        status();
+    });
+    $("#shadow2").click(function(){
+        $("#shadow1").removeClass("text-on");
+        $("#shadow2").toggleClass("text-on");
+        $("#p").removeClass("text-shadow1");
+        $("#p").toggleClass("text-shadow2");
+        testFlag.TextShadow = true;
+        status();
+    });
+
+    /** CSS Box Shadow */
+    $("#box-shadow1").click(function(){
+        $("#box-shadow2").removeClass("text-on");
+        $("#box-shadow1").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow2");
+        $("#text-div").toggleClass("box-shadow1");
+        testFlag.BoxShadow = true;
+        status();
+    });
+    $("#box-shadow2").click(function(){
+        $("#box-shadow1").removeClass("text-on");
+        $("#box-shadow2").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow1");
+        $("#text-div").toggleClass("box-shadow2");
+        testFlag.BoxShadow = true;
+        status();
+    });
+
+    /** CSS Border */
+    $("#border1").click(function(){
+        $("#border2").removeClass("text-on");
+        $("#border1").toggleClass("text-on");
+        $("#text-div").removeClass("border2");
+        $("#text-div").toggleClass("border1");
+        testFlag.Border = true;
+        status();
+    });
+    $("#border2").click(function(){
+        $("#border1").removeClass("text-on");
+        $("#border2").toggleClass("text-on");
+        $("#text-div").removeClass("border1");
+        $("#text-div").toggleClass("border2");
+        testFlag.Border = true;
+        status();
+    });
+
+    /** CSS Break Word */
+    $("#break1").click(function(){
+        $("#break2").removeClass("text-on");
+        $("#break1").toggleClass("text-on");
+        $("#text-div").removeClass("break2");
+        $("#text-div").toggleClass("break1");
+        testFlag.Break = true;
+        status();
+    });
+    $("#break2").click(function(){
+        $("#break1").removeClass("text-on");
+        $("#break2").toggleClass("text-on");
+        $("#text-div").removeClass("break1");
+        $("#text-div").toggleClass("break2");
+        testFlag.Break = true;
+        status();
+    });
+
+    /** CSS Text Decoration */
+    $("#decoration1").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration1").toggleClass("text-on");
+        // remove decoration2 and decoration3 style
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration1 style
+        $p.toggleClass("decoration1");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration2").click(function(){
+        var $p = $("#p");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration2").toggleClass("text-on");
+        // remove decoration1 and decoration3 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration2 style
+        $p.toggleClass("decoration2");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration3").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").toggleClass("text-on");
+        // remove decoration1 and decoration2 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        // add decoration3 style
+        $p.toggleClass("decoration3");
+        testFlag.Decoration = true;
+        status();
+    });
+
+    /* Hide input*/
+    $("#slider-1").hide();
+    $("#slider-2").hide();
+});
diff --git a/mobile/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..035bc67
--- /dev/null
@@ -0,0 +1,141 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue*100)+"%");
+                $("#p").css("opacity", newValue);
+                if(newValue != 1){
+                    testFlag.Transparency = true;
+                    status();
+                }
+            }
+        }else if(ID == "slider-2"){
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue));
+                $("#text-div").css("outline-offset", newValue);
+                if(newValue != 5){
+                    testFlag.Outline = true;
+                    status();
+                }
+            }
+        }
+
+               //if ( o.popupEnabled ) {
+               //      this._positionPopup();
+               //      this._popup.html( newValue );
+               //}
+
+               //if ( o.showValue ) {
+               //      this._handleText.html( newValue );
+               //}
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/Camera/index.html b/mobile/tct-behavior-tests/tests/Camera/index.html
new file mode 100755 (executable)
index 0000000..5781f72
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 300px;
+            }
+            #photoShow {
+                height: 210px;
+                line-height:210px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="filename"></p>
+              <div id="photoShow" align="center"></div>
+            </div>
+            <input type="file" id="files" accept="image/*" capture="camera" class="hideButton" />
+            <div align="center">
+              <input id="button" type="button" value="Launch camera to take a photo" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of Camera. Opens a device camera, previews the image automatically, then presents the captured photo after clicking the "capture" button.</p>
+            <p>Test Step: </p>
+            <p>Click the "Launch camera to take a photo" button to launch the camera preview.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the camera preview and capture work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Camera/js/main.js b/mobile/tct-behavior-tests/tests/Camera/js/main.js
new file mode 100755 (executable)
index 0000000..0169f6d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+function drawOnCanvas(file) {
+  var reader = new FileReader();
+
+  reader.onload = function (e) {
+    var dataURL = e.target.result;
+        var c = document.createElement("Canvas");
+        ctx = c.getContext('2d');
+        img = new Image();
+
+    img.onload = function() {
+      c.width = img.width;
+      c.height = img.height;
+
+      var fheight = 180;
+      var fwidth = fheight / img.height * img.width
+      ctx.drawImage(img, 0, 0, fwidth, fheight);
+    };
+    img.src = dataURL;
+    $('#photoShow').html(c);
+  };
+
+  reader.readAsDataURL(file);
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    $("#photoShow").html("No photo");
+    $("#files")[0].onchange = function(evt) {
+        try {
+            // loading
+            $.mobile.showPageLoadingMsg();
+
+            var files = evt.target.files; // FileList object
+            $("#filename").html(files[0].name);
+            drawOnCanvas(files[0]);
+
+            $.mobile.hidePageLoadingMsg();
+            EnablePassButton();
+        } catch(err) {
+            $.mobile.hidePageLoadingMsg();
+            $("#filename").html(err);
+        }
+    }
+
+    $("#button")[0].onclick = function() {
+        var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
+        if(ie){
+            $("#files")[0].click();
+            $("#button")[0].value = $("#files")[0].value;
+        }else{
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#files")[0].dispatchEvent(evt);
+        }
+    }
+
+});
diff --git a/mobile/tct-behavior-tests/tests/CameraViaUserMedia/index.html b/mobile/tct-behavior-tests/tests/CameraViaUserMedia/index.html
new file mode 100755 (executable)
index 0000000..dfceb39
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 330px;
+                line-height:330px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="errormassage"></p>
+              <div align="center">
+                <video width="330px" height="330px" id="localView" autoplay="autoplay"></video>
+              </div>
+            </div>
+            <div align="center">
+              <input id="getUserMeida" type="button" value="Start camera preview" />
+              <input id="stopUserMeida" type="button" value="Stop camera preview" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of enabling and disabling the Camera preview.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Start camera preview" button to launch the preview.</li>
+              <li>Click the "Stop camera preview" button to close the preview.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Camera preview works well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js b/mobile/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js
new file mode 100755 (executable)
index 0000000..5e1556a
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+$(document).ready(function(){
+    DisablePassButton();
+    $("#errormassage").html("No video");
+    //getUserMedia
+    $("#getUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia({video: true}, function(s){
+                var url = webkitURL.createObjectURL(s);
+                $("#localView")[0].src = url;
+                $("#localView").show();
+                $("#errormassage").hide();
+                EnablePassButton();
+            }, function(error){
+                $("#errormassage").show();
+                $("#errormassage").html("Get user media occur error:<font color='red'>PERMISSION DENIED</font>");
+            });
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").html("Get usr media occur error,with error message:<font color='red'>"+e.message+"</font>");
+        }
+    }
+
+    //stop getUserMedia
+    $("#stopUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        }
+    }
+});
diff --git a/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png b/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png
new file mode 100755 (executable)
index 0000000..f9bfe88
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png differ
diff --git a/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html b/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html
new file mode 100755 (executable)
index 0000000..6a1d6c2
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+        <script type="text/javascript">
+                function reloadTest() {
+                        document.location.reload();
+                }
+        </script>
+  </head>
+
+<body bgcolor="FFFFFF" >
+   <div data-role="header">
+        <h1 id="main_page_title"></h1>
+   </div>
+
+   <h3>Original Picture</p>
+   <img id="flowser" src="./flowser.png" alt="flowser" />
+
+   <p>Target Picture</p>
+   <canvas id="myCanvas" width="300" height="240" style="border:1px solid #c3c3c3;">
+        Your browser does not support the canvas element.
+   </canvas>
+
+   <script type="text/javascript">
+        var c=document.getElementById("myCanvas");
+        var cxt=c.getContext("2d");
+        var img=new Image()
+        img.src="./flowser.png"
+        cxt.drawImage(img,0,0);
+   </script>
+
+   <div data-role="content">
+        <button onclick="rotate()">Rotate Pic</button>
+        <button onclick="scale()">Scale Pic</button>
+        <button onclick="transform()">Transform Pic</button>
+        <button onclick="to_blackWhite()">Vampix Pic</button>
+        <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+   </div>
+
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies picture management with HTML5 Canvas: </p>
+        <p>1.click "Rotate Pic" button to rotate pic with 20 degree, then click "Test Again" button; </p>
+        <p>2.click "Scale Pic" to enlarger with 1.5 scale, click 2 or many times to enlarge continuously, then click "Test Again" button; </p>
+        <p>3.click "Transform Pic" to check pic transformation, then click "Test Again" button; </p>
+        <p>4.click "Vampix Pic" to change pic to "black white", then click "Test Again" button; </p>
+        <p>5.Do combination test, click "Rotate Pic" + "Scale Pic" + "Vampix Pic" in order, then click "Test Again" button; </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the pic could be rotated,scaled,transformed, vampixed well.</p>
+      </font>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js b/mobile/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js
new file mode 100755 (executable)
index 0000000..fc82eb0
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+*/
+
+function rotate()
+{
+        cxt.rotate(20*Math.PI/180);
+        cxt.clearRect(0,0,500,500);
+        cxt.drawImage(img,0,0);
+}
+function scale()
+{
+        cxt.scale(1.5,1.5);
+        cxt.drawImage(img,0,0);
+}
+/*
+function translate()
+{
+        cxt.translate(70,70);
+        cxt.drawImage(img,0,0);
+}*/
+
+function transform()
+{
+        cxt.transform(0.8,0.5,0.5,1,10,0);
+        cxt.drawImage(img,0,0);
+}
+
+function to_blackWhite()
+{
+        cxt.drawImage(img,0,0);
+        var imgData = cxt.getImageData(0, 0, c.width, c.height);
+        var imgD = imgData.data;
+        for(var i=0, n=imgD.length; i<n; i+=4){
+                var gray = imgD[i] * 0.3 + imgD[i+1] * 0.59 + imgD[i+2] * 0.11;
+                imgD[i] = gray;
+                imgD[i+1] = gray;
+                imgD[i+2] = gray;
+        }
+        cxt.putImageData(imgData, 0, 0);
+}
+
diff --git a/mobile/tct-behavior-tests/tests/Clipboard/index.html b/mobile/tct-behavior-tests/tests/Clipboard/index.html
new file mode 100755 (executable)
index 0000000..8ad2a49
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+      <div data-role="header">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed">
+      </div>
+      <div data-role="popup" id="popup_info">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports clipboard to copy, cut and paste texts. Tests the functionality by long pressing the selected text, choose the "Copy", "Cut" and "Paste" in popup menu.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the copy and paste test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the copy, cut and paste functions all work well.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Clipboard/js/main.js b/mobile/tct-behavior-tests/tests/Clipboard/js/main.js
new file mode 100755 (executable)
index 0000000..e887a94
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bclipboard")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Clipboard application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                $("#install").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bclipboard", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : Clipboard application is already uninstalled or not installed");
+    }
+
+    try {
+        tizen.application.launch("bclipboard.clipboard", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/Clipboard.wgt",
+                    true,
+                    function() {
+                        console.log("Clipboard Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Clipboard/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/Clipboard/res/Clipboard b/mobile/tct-behavior-tests/tests/Clipboard/res/Clipboard
new file mode 100755 (executable)
index 0000000..5e27966
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Clipboard/res/Clipboard differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/index.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/index.html
new file mode 100755 (executable)
index 0000000..45d29b2
--- /dev/null
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test src content</li>
+                <li id="application-content">
+                    <a href="javascript:goToApp('res/application-content.html')" data-transition="slide" style="">
+                        <h2>application-content</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test auto rotation</li>
+                <li id="setting-ar-true">
+                    <a href="javascript:goToApp('res/setting-ar-true.html')" data-transition="slide" style="">
+                        <h2>setting-ar-true</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test background support</li>
+                <li id="setting-bs-disable">
+                    <a href="javascript:goToApp('res/setting-bs-disable.html')" data-transition="slide" style="">
+                        <h2>setting-bs-disable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test context menu</li>
+                <li id="setting-cm-disable">
+                    <a href="javascript:goToApp('res/setting-cm-disable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-cm-enable">
+                    <a href="javascript:goToApp('res/setting-cm-enable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test encryption</li>
+                <li id="setting-encrypt-disable">
+                    <a href="javascript:goToApp('res/setting-encrypt-disable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-encrypt-enable">
+                    <a href="javascript:goToApp('res/setting-encrypt-enable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test allow navigation</li>
+                <li id="setting-an-more">
+                    <a href="javascript:goToApp('res/setting-an-more.html')" data-transition="slide" style="">
+                        <h2>setting-an-more</h2>
+                    </a>
+                </li>
+                <li id="setting-an-one">
+                    <a href="javascript:goToApp('res/setting-an-one.html')" data-transition="slide" style="">
+                        <h2>setting-an-one</h2>
+                    </a>
+                </li>
+                <li id="setting-an-zero">
+                    <a href="javascript:goToApp('res/setting-an-zero.html')" data-transition="slide" style="">
+                        <h2>setting-an-zero</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test hwkey</li>
+                <li id="setting-hwkey-default">
+                    <a href="javascript:goToApp('res/setting-hwkey-default.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-default</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-disable">
+                    <a href="javascript:goToApp('res/setting-hwkey-disable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-enable">
+                    <a href="javascript:goToApp('res/setting-hwkey-enable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test install location</li>
+                <li id="setting-install-location-internal-only-with-card">
+                    <a href="javascript:goToApp('res/setting-install-location-internal-only-with-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-internal-only-with-card</h2>
+                    </a>
+                </li>
+                <li id="setting-install-location-prefer-external-no-card">
+                    <a href="javascript:goToApp('res/setting-install-location-prefer-external-no-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-prefer-external-no-card</h2>
+                    </a>
+                </li>
+                <li id="setting-install-location-prefer-external-with-card">
+                    <a href="javascript:goToApp('res/setting-install-location-prefer-external-with-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-prefer-external-with-card</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of tizen-specific widget configuration extension and w3c widget configuration extension.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support additional configuration elements that are not included in W3C Widget Packaging and XML Configuration, like "&lt;tizen:application&gt;", "&lt;tizen:privilege&gt;", "&lt;tizen:setting&gt;" etc.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/js/main.js b/mobile/tct-behavior-tests/tests/ConfigurationExtension/js/main.js
new file mode 100755 (executable)
index 0000000..3a5c517
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt2apc001',
+                    'wrt2sam045',
+                    'wrt2sao044',
+                    'wrt2saz043',
+                    'wrt2sod031',
+                    'wrt2sbd024',
+                    'wrt2scd026',
+                    'wrt2sce027',
+                    'wrt2sil053',
+                    'wrt2sil054',
+                    'wrt2sil055',
+                    'wrt2shd044',
+                    'wrt2skd041',
+                    'wrt2ske042',
+                    'wrt2sed028',
+                    'wrt2see029');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ConfigurationExtension";
+var RESULT_FILE_NAME = "tct-behavior-child.ce.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js b/mobile/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js
new file mode 100755 (executable)
index 0000000..8f6a128
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var nolaunch_wgt = new Array('setting-encrypt-enable','setting-encrypt-disable');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    }
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ConfigurationExtension/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html
new file mode 100755 (executable)
index 0000000..bc2e44e
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-content">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-content"/>
+                <input type="hidden" id="app_id"  value="wrt2apc001.ApplicationContent"/>
+                <input type="hidden" id="package_id" value="wrt2apc001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget redirect the start page to "http://www.google.com".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt
new file mode 100755 (executable)
index 0000000..4c61a37
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html
new file mode 100755 (executable)
index 0000000..edd6cfa
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-more">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-more"/>
+                <input type="hidden" id="app_id"  value="wrt2sam045.settinganmore"/>
+                <input type="hidden" id="package_id" value="wrt2sam045"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "baidu" and "baike.baidu" links cannot be opened in Web App, they will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt
new file mode 100755 (executable)
index 0000000..54e5e3d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html
new file mode 100755 (executable)
index 0000000..d9e04fe
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-one">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-one"/>
+                <input type="hidden" id="app_id"  value="wrt2sao044.settinganone"/>
+                <input type="hidden" id="package_id" value="wrt2sao044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "google" link cannot be opened in Web App, it will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt
new file mode 100755 (executable)
index 0000000..73af5ab
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html
new file mode 100755 (executable)
index 0000000..67c810c
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-zero">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-zero"/>
+                <input type="hidden" id="app_id"  value="wrt2saz043.settinganzero"/>
+                <input type="hidden" id="package_id" value="wrt2saz043"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "google" and "tizen" links are displayed on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt
new file mode 100755 (executable)
index 0000000..ff5aae1
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html
new file mode 100755 (executable)
index 0000000..480491c
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-ar-true">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-ar-true"/>
+                <input type="hidden" id="app_id"  value="wrt2sod031.settingartrue"/>
+                <input type="hidden" id="package_id" value="wrt2sod031"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Set the auto rotate enable in Setting > Display> Auto rotate screen.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget application can rotate with the device orientation change.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt
new file mode 100755 (executable)
index 0000000..52c7d0d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html
new file mode 100755 (executable)
index 0000000..a76768c
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-bs-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-bs-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sbd024.SettingBsDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sbd024"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the counter on the page doesn't change when the widget is running background.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt
new file mode 100755 (executable)
index 0000000..ffcbe23
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html
new file mode 100755 (executable)
index 0000000..da79881
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2scd026.SettingCmDisable"/>
+                <input type="hidden" id="package_id" value="wrt2scd026"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>No popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt
new file mode 100755 (executable)
index 0000000..3272910
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html
new file mode 100755 (executable)
index 0000000..b8c164f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2sce027.SettingCmEnable"/>
+                <input type="hidden" id="package_id" value="wrt2sce027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt
new file mode 100755 (executable)
index 0000000..917a7ff
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html
new file mode 100755 (executable)
index 0000000..ed512b1
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sed028.SettingEncryptDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sed028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is not encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2sed028/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2sed028/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is a normal text.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt
new file mode 100755 (executable)
index 0000000..33d60d7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html
new file mode 100755 (executable)
index 0000000..934a9a7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2see029.SettingEncryptEnable"/>
+                <input type="hidden" id="package_id" value="wrt2see029"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2see029/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2see029/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is messy code.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt
new file mode 100755 (executable)
index 0000000..e723cd3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html
new file mode 100755 (executable)
index 0000000..e52b061
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-default">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-default"/>
+                <input type="hidden" id="app_id"  value="wrt2shd044.settinghwkeydefault"/>
+                <input type="hidden" id="package_id" value="wrt2shd044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt
new file mode 100755 (executable)
index 0000000..d4d520f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html
new file mode 100755 (executable)
index 0000000..2db22bf
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2skd041.settinghwkeydisable"/>
+                <input type="hidden" id="package_id" value="wrt2skd041"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are two "Pass" displayed and no change on the screen when click the menu or back key.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt
new file mode 100755 (executable)
index 0000000..3386c2d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html
new file mode 100755 (executable)
index 0000000..a776b29
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2ske042.settinghwkeyenable"/>
+                <input type="hidden" id="package_id" value="wrt2ske042"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt
new file mode 100755 (executable)
index 0000000..10552da
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html
new file mode 100755 (executable)
index 0000000..c3364b7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-internal-only-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-internal-only-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil053.settinginstalllocationinternalonlywithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil053"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a "PASS" after launch the widget.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt
new file mode 100755 (executable)
index 0000000..dd08947
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html
new file mode 100755 (executable)
index 0000000..12587a3
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-no-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-no-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil054.settinginstalllocationpreferexternalnocard"/>
+                <input type="hidden" id="package_id" value="wrt2sil054"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure there is no memory card inserted into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt
new file mode 100755 (executable)
index 0000000..adf7dec
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html
new file mode 100755 (executable)
index 0000000..574ec66
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil055.settinginstalllocationpreferexternalwithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil055"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt
new file mode 100755 (executable)
index 0000000..360cbd7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CordovaSupport/index.html b/mobile/tct-behavior-tests/tests/CordovaSupport/index.html
new file mode 100755 (executable)
index 0000000..cb1461e
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cordovaList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Cordova Support</li>
+                <li id="cordova-support">
+                    <a href="javascript:goToApp('res/cordova-support.html')" data-transition="slide" style="">
+                        <h2>cordova-support</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of cordova support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies cordova support tizen APIs.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/CordovaSupport/js/main.js b/mobile/tct-behavior-tests/tests/CordovaSupport/js/main.js
new file mode 100755 (executable)
index 0000000..759121d
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var allId=new Array('G4rvZJzDIa');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CordovaSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.cordova.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cordovaList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/CordovaSupport/js/tests.js b/mobile/tct-behavior-tests/tests/CordovaSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..0d1b966
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CordovaSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+document.write('<script src="../webrunner/jquery-1.10.2.min.js"></script>');
diff --git a/mobile/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt b/mobile/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt
new file mode 100644 (file)
index 0000000..6edc30b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html b/mobile/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html
new file mode 100755 (executable)
index 0000000..081c526
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="cordova-support">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TizenCordovaMobileSpec"/>
+                <input type="hidden" id="app_id"  value="G4rvZJzDIa.TizenCordovaMobileSpec"/>
+                <input type="hidden" id="package_id" value="G4rvZJzDIa"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all cordova test cases pass".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DataSync/NOTICE b/mobile/tct-behavior-tests/tests/DataSync/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/DataSync/index.html b/mobile/tct-behavior-tests/tests/DataSync/index.html
new file mode 100755 (executable)
index 0000000..f1b200b
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview">
+            <li data-role="list-divider">OMA DS(Data Synchronization) Server</li>
+            <li>
+                <input type="url" id="url" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server ID</li>
+            <li>
+                <input type="text" id="account" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Password</li>
+            <li>
+                <input type="password" id="passwd" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Database URI</li>
+            <li>
+                <input type="text" id="database" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Connect</li>
+            <li>
+                <div data-role="button" onclick="addProfile();">Add Profile</div>
+            </li>
+            <li data-role="list-divider">Contacts Sync</li>
+            <li>
+                <div data-role="button" onclick="startSync();">Start Sync</div>
+            </li>
+            <li data-role="list-divider">Contacts List</li>
+        </ul>
+        <ul data-role="listview" id="contactsList"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if data is successfully synchronized with an OMA DS server</p><br>
+            <p>Precondition: Pick one in &lt;Sample OMA DS Server List&gt; and add test contacts</p>
+            <p>&lt;Sample OMA DS Server List&gt;</p>
+            <p>- https://onemediahub.com/sync</p>
+            <p>- https://www.everdroid.com/web</p>
+            <p>- OMA DS 1.2 protocol Server</p><br>
+            <p>1. Fill in preset OMA DS Server, ID, Password and Database URI containing data to sync.<br>
+For the Database URI field "OMA DS Server Database URI",<br>
+- if you choose funambol OMA DS Server for this test, a tester needs to fill "card" string to the URI field.<br>
+- if you choose everdroid OMA DS Server for this test, a tester needs to fill "con" string to the URI field.<br>
+- if you are using other OMA DS Servers, then you need to go to the web page of the OMA DS Server which you use for the test.</p>
+            <p>2. Click Add Profile</p>
+            <p>3. Click Start Sync</p>
+            <p>4. Check the contacts are synchronized with the OMA DS server</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DataSync/js/main.js b/mobile/tct-behavior-tests/tests/DataSync/js/main.js
new file mode 100755 (executable)
index 0000000..c5343db
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var profileId = null;
+var account, passwd, url, database;
+
+var init = function () {
+    serverGuide();
+};
+
+function serverGuide() {
+    //alert("<Sample OMA DS Server List>\n1. https://onemediahub.com/sync \n2. https://www.everdroid.com/web  \n3. OMA DS 1.2 protocol Server\n*Recommend the 1st server");
+}
+
+function addProfile() {
+    try {
+        account = $("#account").val();
+        passwd = $("#passwd").val();
+        url = $("#url").val();
+        database = $("#database").val();
+
+        // Create a sync info.
+        var syncInfo = new tizen.SyncInfo(url, account, passwd, "MANUAL", "REFRESH_FROM_SERVER");
+
+        // Sync both contacts and events.
+        var contactInfo = new tizen.SyncServiceInfo(true, "CONTACT", database);
+        var serviceInfo = [contactInfo];
+
+        // Adds a profile to sync.
+        var profile = new tizen.SyncProfileInfo("MyProfile", syncInfo, serviceInfo);
+        tizen.datasync.add(profile);
+
+        profileId = profile.profileId;
+        alert("Add Profile ID : " + profileId);
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function startSync() {
+    var total;
+    var syncProgressCallback = {
+            onprogress: function (profileId, serviceType, isFromServer, totalPerType, syncedPerType) {
+                console.log('Total: ' + totalPerType + ', synced: ' + syncedPerType + ', for the sync type: ' + serviceType);
+                total = totalPerType;
+            },
+            onstopped: function (profileId) {
+                removeProfile();
+            },
+            onfailed: function (profileId, error) {
+                alert('Please try again in a few minutes.');
+                console.log('Failed with id: ' + profileId + ', error name: ' + error.name);
+            },
+            oncompleted: function (profileId) {
+                console.log("Completed with id" + profileId);
+                alert("Sync Completed - " + total + " Contacts");
+                contactList();
+            }
+    };
+
+    try {
+        tizen.datasync.startSync(profileId, syncProgressCallback);
+        alert("Contact sync start\n(OMA DS Server - Device)");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function removeProfile() {
+    try {
+        tizen.datasync.remove(profileId);
+        console.log("Removed ProfileId.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function stopSync() {
+    try {
+        tizen.datasync.stopSync(profileId);
+        console.log("Stopped.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+/*function getLastSyncStatistics() {
+    try {
+        // Gets the sync statistics information with the given id.
+        var statistics = tizen.datasync.getLastSyncStatistics(profileId);
+        alert("Num statistics: " + statistics.length);
+        for(i in statistics) {
+            alert("syncStatus: " + statistics[i].syncStatus + ", serviceType: " + statistics[i].serviceType + ", lastSyncTime: " + statistics[i].lastSyncTime);
+            alert("serverToClientTotal: " + statistics[i].serverToClientTotal + ", serverToClientAdded: " + statistics[i].serverToClientAdded + ", serverToClientUpdated: " + statistics[i].serverToClientUpdated + ", serverToClientRemoved: " + statistics[i].serverToClientRemoved);
+            alert("clientToServerTotal: " + statistics[i].clientToServerTotal + ", clientToServerAdded: " + statistics[i].clientToServerAdded + ", clientToServerUpdated: " + statistics[i].clientToServerUpdated + ", clientToServerRemoved: " + statistics[i].clientToServerRemoved);
+        }
+    } catch(err) {
+        console.log(err.message);
+    }
+}*/
+
+function contactList() {
+    function successCallback(contacts) {
+        var str = "";
+
+        if(contacts.length > 0)
+        {
+            for (var i = 0; i < contacts.length; i++)
+            {
+                str += '<li>' + contacts[i].name.displayName + ' (' + contacts[i].phoneNumbers[0].number + ')</li>';
+            }
+            $("#contactsList").html(str).trigger("create").listview("refresh");
+        }
+        else
+        {
+            alert("Not found Contacts");
+        }
+        removeProfile();
+    }
+
+    function errorCallback(err) {
+        alert("An error occurred: " + err.message);
+    }
+
+    var filter = new tizen.AttributeFilter("lastUpdated", "EXISTS", null);
+
+    try {
+        tizen.contact.getDefaultAddressBook().find(successCallback, errorCallback, filter);
+    } catch(err) {
+        alert('The following error occurred while finding: ' +  err.name);
+    }
+}
+$(document).bind('pageinit', init);
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/index.html b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/index.html
new file mode 100755 (executable)
index 0000000..0392b39
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test DeviceAPI access by external</li>
+                <li id="deviceapi-access-by-external">
+                    <a href="javascript:goToApp('res/deviceapi-access-by-external.html')" data-transition="slide" style="">
+                        <h2>deviceapi-access-by-external</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies support identification of the sensitive API Privileges.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support access to sensitive API</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js
new file mode 100755 (executable)
index 0000000..7523e46
--- /dev/null
@@ -0,0 +1,332 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt5san005',
+                    'wrt5sar019',
+                    'wrtkill002',
+                    'wrt5sal017',
+                    'wrt5sbr079',
+                    'wrt5sbr080',
+                    'wrt5sba023',
+                    'wrt5sbg025',
+                    'wrt5sbs027',
+                    'wrt5scr031',
+                    'wrt5scw033',
+                    'wrt5sch039',
+                    'wrt5sch041',
+                    'wrt5scr047',
+                    'wrt5scw049',
+                    'wrt5con147',
+                    'wrt5con145',
+                    'wrt5sbr081',
+                    'wrt5sbr082',
+                    'wrt5dow143',
+                    'wrt5sfr053',
+                    'wrt5sfw055',
+                    'wrt5smr069',
+                    'wrt5smw073',
+                    'wrt5sbr084',
+                    'wrt5sna075',
+                    'wrt5nfc139',
+                    'wrt5snp079',
+                    'wrt5snt081',
+                    'wrt5not137',
+                    'wrt5sbr085',
+                    'wrt5sbr086',
+                    'wrt5pow135',
+                    'wrt5sbr087',
+                    'wrt5sbr088',
+                    'wrt5sse083',
+                    'wrt5sse087',
+                    'wrt5sys131',
+                    'wrt5ste091',
+                    'wrt1nj0034');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js
new file mode 100755 (executable)
index 0000000..993b0d8
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt5sed003',
+                    'wrt5sar018',
+                    'wrtkill001',
+                    'wrt5sal016',
+                    'wrt5sbr089',
+                    'wrt5sbr090',
+                    'wrt5sad022',
+                    'wrt5sbg024',
+                    'wrt5sbs026',
+                    'wrt5scr030',
+                    'wrt5scw032',
+                    'wrt5sch038',
+                    'wrt5sch040',
+                    'wrt5scr046',
+                    'wrt5scw048',
+                    'wrt5con148',
+                    'wrt5con146',
+                    'wrt5sbr091',
+                    'wrt5sbr092',
+                    'wrt5dow144',
+                    'wrt5sfr052',
+                    'wrt5sfw054',
+                    'wrt5smr068',
+                    'wrt5smw072',
+                    'wrt5sbr094',
+                    'wrt5sna074',
+                    'wrt5nfc140',
+                    'wrt5snp078',
+                    'wrt5snt080',
+                    'wrt5not138',
+                    'wrt5sbr095',
+                    'wrt5sbr096',
+                    'wrt5pow136',
+                    'wrt5sbr097',
+                    'wrt5sbr098',
+                    'wrt5ssd082',
+                    'wrt5ssd089',
+                    'wrt5sys132',
+                    'wrt5std090');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js
new file mode 100755 (executable)
index 0000000..410c96d
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DeviceAPISecurity/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html
new file mode 100755 (executable)
index 0000000..de1def1
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="deviceapi-access-by-external">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="deviceapi-access-by-external"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0034.deviceapiAccessByExternal"/>
+                <input type="hidden" id="package_id" value="wrt1nj0034"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"deviceapi-access-by-external-application" test Step: </p>
+            <ol>
+              <li>Choose application.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse application html successfully.</li>
+              <li>Browser launched and open application.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-bluetooth" test Step: </p>
+            <ol>
+              <li>Choose bluetooth.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse bluetooth html successfully.</li>
+              <li>Browser launched and open bluetooth.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-download" test Step: </p>
+            <ol>
+              <li>Choose download.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse download html successfully.</li>
+              <li>Browser launched and open download.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-systeminfo" test Step: </p>
+            <ol>
+              <li>Choose systeminfo.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse systeminfo html successfully.</li>
+              <li>Browser launched and open systeminfo.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt
new file mode 100755 (executable)
index 0000000..2fb39fb
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/Download/NOTICE b/mobile/tct-behavior-tests/tests/Download/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/Download/css/style.css b/mobile/tct-behavior-tests/tests/Download/css/style.css
new file mode 100755 (executable)
index 0000000..6759e4c
--- /dev/null
@@ -0,0 +1,27 @@
+/* progress bar container */
+#progressbar {
+    border: 1px solid black;
+    width: 328px;
+    height: 18px;
+    position: relative;
+    text-align: center;
+    color: white;
+    -webkit-border-radius: 8px;
+}
+/* color bar */
+#progressbar div.progress {
+    position: absolute;
+    width: 0;
+    height: 100%;
+    overflow: hidden;
+    background-color: #369;
+    -webkit-border-radius: 8px;
+}
+/* text off bar */
+#progressbar div.text {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    text-align: center;
+    -webkit-border-radius: 8px;
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/Download/index.html b/mobile/tct-behavior-tests/tests/Download/index.html
new file mode 100755 (executable)
index 0000000..226fe60
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<link rel="stylesheet" type="text/css" href="css/style.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="js/jqueryprogressbar.js" type="text/javascript"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Download URL</li>
+                <li>
+                    <input type="url" id="url" value="http://download.tizen.org/tct/tct-download-tizen-tests-image-hq.png" />
+                </li>
+                <li data-role="list-divider">Progress Bar</li>
+                <li>
+                    <div data-role="none" id="progressbar"></div>
+                </li>
+                <li data-role="list-divider">Download</li>
+                <li>
+                    <div data-role="button" id="download">Download</div>
+                    <div data-role="button" id="pause">Pause</div>
+                    <div data-role="button" id="resume">Resume</div>
+                    <div data-role="button" id="cancel">Cancel</div>
+                </li>
+                <li data-role="list-divider">Download folder</li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Download list delete</li>
+                <li>
+                    <div data-role="button" id="delete">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the file is successfully downloaded</p><br>
+                <p>1. Fill in Download URL field (or use the default)</p>
+                <p>2. Click Download button and check the Progress Bar updated</p>
+                <p>3. Click Cancel, Pause, Download buttons to verify the functionalities</p>
+                <p>4. Check a download directory if the file successfully downloaded</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js b/mobile/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js
new file mode 100755 (executable)
index 0000000..457b54a
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2007 Josh Bush (digitalbush.com)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Progress Bar Plugin for jQuery
+ * Version: Alpha 2
+ * Release: 2007-02-26
+ */
+
+(function($) {
+    //Main Method
+    $.fn.reportprogress = function(val,maxVal) {
+        var max=100;
+        if(maxVal)
+            max=maxVal;
+        return this.each(
+            function(){
+                var div=$(this);
+                var innerdiv=div.find(".progress");
+
+                if(innerdiv.length!=1){
+                    innerdiv=$("<div class='progress'></div>");
+                    div.append("<div class='text'>&nbsp;</div>");
+                    $("<span class='text'>&nbsp;</span>").css("width",div.width()).appendTo(innerdiv);
+                    div.append(innerdiv);
+                }
+                var width=Math.round(val/max*100);
+                innerdiv.css("width",width+"%");
+                div.find(".text").html(width+" %");
+            }
+        );
+    };
+})(jQuery);
diff --git a/mobile/tct-behavior-tests/tests/Download/js/main.js b/mobile/tct-behavior-tests/tests/Download/js/main.js
new file mode 100755 (executable)
index 0000000..869a2f8
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gDownloadId, gDocumentsDir, gFiles;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#list").delegate("div", "vclick", function() {
+        deleteFileFromFolder($(this).parent().data("id"));
+        return false;
+    });
+
+    $("#download").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "DOWNLOADING") {
+                alert("Already downloading");
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            download();
+        }
+        return false;
+    });
+
+    $("#resume").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "PAUSED") {
+                try {
+                    tizen.download.resume(gDownloadId);
+                    alert("Resumed");
+                } catch (exc) {
+                    alert("download.resume failed: " + exc.message);
+                }
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            alert("No download in progress");
+        }
+        return false;
+    });
+
+    $("#pause").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        var state = tizen.download.getState(gDownloadId);
+
+        if (state == "PAUSED") {
+            alert("Already paused");
+        } else {
+            try {
+                tizen.download.pause(gDownloadId);
+                alert("Paused");
+            } catch (exc) {
+                alert("download.pause failed: " + exc.message);
+            }
+        }
+        return false;
+    });
+
+    $("#cancel").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        try {
+            tizen.download.cancel(gDownloadId);
+        } catch (exc) {
+            alert("download.cancel failed: " + exc.message);
+        }
+        return false;
+    });
+
+    $("#delete").bind("vclick", function() {
+        deleteAllFile();
+        return false;
+    });
+    prepareDirsAndFiles();
+});
+
+function onError(err) {
+    alert("Error: " + err.message);
+}
+
+function prepareDirsAndFiles() {
+    try {
+        tizen.filesystem.resolve("downloads", function(dir) {
+            gDocumentsDir = dir;
+            showFileList();
+        }, onError, "rw");
+    } catch (exc) {
+        alert("tizen.filesystem.resolve(\"downloads\") exc: " + exc.message);
+    }
+}
+
+function makeFileList(files) {
+    var str = "";
+
+    gFiles = files;
+    $("#list>li[data-id]").remove();
+
+    for (var i = 0; i < files.length; i++) {
+        if (files[i].isDirectory == false) {
+            str += '<li class="ui-li-text-ellipsis" data-id="'
+                + i
+                + '">'
+                + files[i].name
+                + '<div data-role="button" data-inline="true">Delete</div></li>';
+        }
+    }
+    $("#list").append(str).trigger("create").listview("refresh");
+}
+
+function showFileList() {
+    if(gDocumentsDir) {
+        gDocumentsDir.listFiles(function(files) {
+            makeFileList(files);
+        }, onError);
+    }
+}
+
+function deleteFileFromFolder(id) {
+    if (id == null) {
+        return;
+    }
+
+    try {
+        gDocumentsDir.deleteFile(gFiles[Number(id)].fullPath, showFileList, onError);
+        alert("Download delete");
+    } catch (exc) {
+        alert("deleteFile exc: " + exc.message);
+    }
+}
+
+function deleteAllFile() {
+    alert("Download delete all");
+    if(gFiles.length > 0)
+        for(var i = 0; i < gFiles.length; i++)
+            if(gFiles[i].isFile == true)
+                gDocumentsDir.deleteFile(gFiles[i].fullPath, showFileList, onError);
+}
+
+function download() {
+    var url = $("#url").val();
+
+    if (url == "") {
+        alert("Input target URL");
+        return;
+    }
+
+    var downloadRequest = new tizen.DownloadRequest(url, "downloads"),
+    listener = {
+        onprogress: function(id, receivedSize, totalSize) {
+            //$("#progressbar").progressbar("option", "value", receivedSize/totalSize*100);
+            if(receivedSize > 0)
+                $("#progressbar").reportprogress(receivedSize/totalSize*100);
+            console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
+        },
+        onpaused: function(id) {
+            console.log('Paused with id: ' + id);
+            //showFileList();
+        },
+        oncanceled: function(id) {
+            alert("Canceled");
+            //showFileList();
+            console.log(id);
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        },
+        oncompleted: function(id, fullPath) {
+            alert("Completed! Full path: " + fullPath);
+            showFileList();
+            gDownloadId = undefined;
+        },
+        onfailed: function(id, error) {
+            alert("Failed! Err: " + error.name);
+            //showFileList();
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        }
+    };
+
+    //$("#progressbar").progressbar("option", "value", 0);
+    $("#progressbar").reportprogress(0);
+
+    try {
+        gDownloadId = tizen.download.start(downloadRequest, listener);
+        alert("Download");
+    } catch (exc) {
+        alert("download.start failed : " + exc.message);
+    }
+}
+
+var pct=0;
+var handle=0;
+function update(){
+    $("#progressbar").reportprogress(++pct);
+    if(pct==100){
+        clearInterval(handle);
+        $("#run").val("start");
+        pct=0;
+    }
+}
+jQuery(function($){
+    $("#run").click(function(){
+        if(this.value=="start"){
+            handle=setInterval("update()",100);
+            this.value="stop";
+        }else{
+            clearInterval(handle);
+            this.value="start";
+        }
+    });
+    $("#reset").click(function(){
+        pct=0;
+        $("#progressbar").reportprogress(0);
+    });
+});
diff --git a/mobile/tct-behavior-tests/tests/DragandDrop/index.html b/mobile/tct-behavior-tests/tests/DragandDrop/index.html
new file mode 100755 (executable)
index 0000000..071deae
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+      <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports drag and drop functions.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the drag and drop test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the blue rectangle could be drag and drop to the white box.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DragandDrop/js/main.js b/mobile/tct-behavior-tests/tests/DragandDrop/js/main.js
new file mode 100755 (executable)
index 0000000..0dd8e11
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhdragdrop")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The application DragandDrop is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(checkInstalledPkg("bhdragdrop")) {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhdragdrop", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : DragandDrop application is already uninstalled or not installed");
+    }
+    try {
+        tizen.application.launch("bhdragdrop.DragandDrop", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/DragandDrop.wgt",
+                    true,
+                    function() {
+                        console.log("DragandDrop Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DragandDrop/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/mobile/tct-behavior-tests/tests/DragandDrop/res/DragandDrop b/mobile/tct-behavior-tests/tests/DragandDrop/res/DragandDrop
new file mode 100755 (executable)
index 0000000..e8650f8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DragandDrop/res/DragandDrop differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/index.html b/mobile/tct-behavior-tests/tests/DynamicBox/index.html
new file mode 100755 (executable)
index 0000000..c24d960
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of DynamicBox application: mouse event and visibility event for DynamicBox.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button, test step passes if all app widgets installed successfully.</li>
+              <li>Click the "Launch" button to launch the DynamicBox Viewer. After each step below, press "Back" key (soft or hard key) to go forward next step:</li>
+              <ol>
+                <li>Click the "Mouse event false"; press the filled blue square; test step passes if the blue square doesn't change;</li>
+                <li>Click the "Sample"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Dynamic Box"; press the menu button to select size 354x354; then drag down the box; test step passes if there apears a button "Send message to Box", and click the button, "Hello, Dynamic Box" appends into the box;</li>
+                <li>Click the "AppWidget Content mouse event"; press the filled blue square; test step passes if the blue square changes to green;</li>
+                <li>Click the "AppWidget Load event"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Visibility widget"; test step passes if there is a green 'Pass' text, and after drag down the 'Pass' there appears 'PD index.html';</li>
+                <li>Click the "Size Decoration"; press the menu button to select box size; test step passes if the box in '354x354' size has different frame decoration from those in '175x175' and '345x175' sizes;</li>
+                <li>Click the "Size Preview"; press the menu button; test step passes if there are icons in the size list.</li>
+                <li>Click the "Dynamicbox reload backgorund"; press test button(it will open another screen); then press Home key to back home screen and waitting 60s; test step passes if the number which show in the screen will recount immediately when click behavior tool/launch again.</li>
+                <li>Click the "Dynamicbox reload foregorund"; press test button(it will open another screen); then press Home key to back home screen and entry behavior tool/launch again; test step passes if the number which show in the screen will recount after a few seconds</li>
+                <li>Click the "AppWidget Unload event",  test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "AppWidget alive time after load event fired", test step passes if there is a green 'Pass' text.</li>
+                <li>Click the "Install Web DynamicBox when DynamicBox's resources are not packaged in the web application.", test step passes if It should not be listed as dynamic box.</li>
+                <li>Click the "The deletion of Dynamic box in home screen does not uninstall the app.", test step passes if The Dynamic box present in the home screen should be removed. But the Widget installed should be still available within the app tray with name 'WDB_WGT_2'.</li>
+                <li>Click the "Installation missing mandatory attribute ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Installation missing primary attribute.", test step passes if it should install this file.</li>
+                <li>Click the "Installation without TIZEN_APPLICATION_ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Installation with having ID same as TIZEN_APPLICATION_ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Reloading of dynamic box.", test step passes if the time difference should be exactly 30 min.</li>
+                <li>Click the "Behaviour with auto-launch attribute setting to true.", test step passes if the web application should be launched and should display a page with message 'APP Index Page'.</li>
+                <li>Click the "Behaviour with auto-launch attribute setting to false.", test step passes if the web application should be launched and should display a page with message 'APP Index Page'.</li>
+                <li>Click the "Behaviour without auto-launch attribute.", test step passes if the web application should not be launched.</li>
+                <li>Click the "Installation without app-widget child elements.", test step passes if Error pop up should appear stating "unable to install this file.The format is invalid.".</li>
+                <li>Click the "Installation without box-label elements.", test step passes if Error pop up should appear stating "unable to install this file.The format is invalid.".</li>
+                <li>Click the "Behaviour with box-label having valid value.", test step passes if Dynamic box should be available wihin the dynamic box selection list and should be added to Home Screen.".</li>
+                <li>Click the "Behaviour with multiple box-label element present.", test step passes if widget installation should be successful.".</li>
+                <li>Click the "Localization with lang support for box-label.", test step passes if the Dynamic Box selection list should have a dynamic box with name "WDB_EN_DName_27"and "WDB_FR_DName_27.".</li>
+                <li>Click the "Installation without box-icon.", test step passes if The widget should get installed and pass icon with size 1*1,2*1 and 2*2 should be displayed.".</li>
+                <li>Click the "Behavior with box-icon having path relative to Web Application directory.", test step passes if "PASS" Icon should be displayed with Size 1*1,2*1 and 2*2.".</li>
+                <li>Click the "Behavior with box-icon missing src attribute.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Installation missing box-content attributes.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Behavior with box-content src attribute valid path relative to Web Application directory.", test step passes if A index page with message "Web Dynamics Box Index Page." should be loaded within the dynamic box.".</li>
+                <li>Click the "Behavior with box-content missing src attribute.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Behavior with box-content src pointing to an existing remote http URL with allow-navigation element.", test step passes if It should load the 'w3.org' site within the dynamic box, load the 'w3.org' site within the drop view and The ' w3.org'  should be rendered within the APP view.".</li>
+                <li>Click the "Behavior with box-content src pointing to an existing remote http URL without allow-navigation element.", test step passes if It should block loading of 'w3c.org' within dynamic box, drop view,launch the APP and should load the link with Browser and browser should move to background.".</li>
+                <li>Click the "Behavior with box-content  src  pointing to an existing remote https URL with allow-navigation and access.", test step passes if load linkedin site within the dynamic box.".</li>
+                <li>Click the "Behavior with box-content  src  pointing to an existing remote https URL with allow-navigation and access different.", test step passes if It should block loading linkedin site within the dynamic box, drop view.".</li>
+                <li>Click the "Behavior with touch-event true.", test step passes if The special UI effect should be displayed for the dynamic box.".</li>
+                <li>Click the "Behavior with touch-event false.", test step passes if The special UI effect should not be displayed for the dynamic box.".</li>
+                <li>Click the "Behavior without box-size child element.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Verify sending messages between the Box and the Drop View.", test step passes if message 'Hello, Dynamic Box should be displayed within the dynamic box and message "Hello, Drop View" should be displayed within the drop view.".</li>
+                <li>Click the "Verify web dynamic box runtime should keep the content of the Dynamic Box Drop View alive until the Drop View is closed.", test step passes if  The counter within the drop view should get updated in each 5 sec interval till the drop view is opened.".</li>
+              </ol>
+              <li>Click the "Uninstall" button, test step passes if all app widgets uninstalled successfully.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test steps pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/js/main.js b/mobile/tct-behavior-tests/tests/DynamicBox/js/main.js
new file mode 100755 (executable)
index 0000000..0d81c34
--- /dev/null
@@ -0,0 +1,476 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "";
+var wgt_names = new Array('app-widget-mouse-event-false.wgt',
+                          'app-widget-sample.wgt',
+                          'app-widget-box-appwidgetready-event.wgt',
+                          'app-widget-mouse-event-true.wgt',
+                          'app-widget-load-event.wgt',
+                          'app-widget-visibility-event.wgt',
+                          'app-widget-box-size-decoration.wgt',
+                          'app-widget-box-size-preview.wgt',
+                          'app-widget-sign-author.wgt',
+                          'app-widget-sign-author-distributor.wgt',
+                          'app-widget-sign-distributor.wgt',
+                          'app-widget-sign-invalid.wgt',
+                          'app-widget-sign-none.wgt',
+                          'app-device-api-security-alarm.wgt',
+                          'app-device-api-security-application-info.wgt',
+                          'app-device-api-security-application-launch.wgt',
+                          'app-device-api-security-appmanager-certificate.wgt',
+                          'app-device-api-security-bluetooth-health.wgt',
+                          'app-device-api-security-bluetooth-manager.wgt',
+                          'app-device-api-security-negative.wgt',
+                          'app-device-api-security-system.wgt',
+                          'app-device-api-security-systemmanager.wgt',
+                          'app-device-api-security-websetting.wgt',
+                          'app-device-api-security-secureelement.wgt',
+                          'app-device-api-security-setting.wgt',
+                          'dynamicbox-reload-background.wgt',
+                          'dynamicbox-reload-foreground.wgt',
+                          'app-widget-unload-event.wgt',
+                          'app-widget-load-event-alive-time.wgt',
+                          'WebDynamicBox_1.wgt',
+                          'WebDynamicBox_2.wgt',
+                          'WebDynamicBox_7.wgt',
+                          'WebDynamicBox_8.wgt',
+                          'WebDynamicBox_9.wgt',
+                          'WebDynamicBox_10.wgt',
+                          'WebDynamicBox_13.wgt',
+                          'WebDynamicBox_17.wgt',
+                          'WebDynamicBox_18.wgt',
+                          'WebDynamicBox_19_3.wgt',
+                          'WebDynamicBox_20.wgt',
+                          'WebDynamicBox_21.wgt',
+                          'WebDynamicBox_22.wgt',
+                          'WebDynamicBox_25.wgt',
+                          'WebDynamicBox_27.wgt',
+                          'WebDynamicBox_28.wgt',
+                          'WebDynamicBox_30.wgt',
+                          'WebDynamicBox_37.wgt',
+                          'WebDynamicBox_39.wgt',
+                          'WebDynamicBox_41.wgt',
+                          'WebDynamicBox_44.wgt',
+                          'WebDynamicBox_45.wgt',
+                          'WebDynamicBox_45_1.wgt',
+                          'WebDynamicBox_55_4.wgt',
+                          'WebDynamicBox_55_5.wgt',
+                          'WebDynamicBox_65.wgt',
+                          'WebDynamicBox_66.wgt',
+                          'WebDynamicBox_75.wgt',
+                          'WebDynamicBox_106.wgt',
+                          'WebDynamicBox_114.wgt');
+
+var package_ids = new Array('wrt6awi014',
+                            'wrt6app001',
+                            'wrt6awb006',
+                            'wrt6awi013',
+                            'wrt6aws016',
+                            'wrt6aws018',
+                            'wrt6awb003',
+                            'wrt6awb005',
+                            'wrt6sig001',
+                            'wrt6sig003',
+                            'wrt6sig004',
+                            'wrt6sig002',
+                            'wrt6sig005',
+                            'wrt6api003',
+                            'wrt6api004',
+                            'wrt6api005',
+                            'wrt6api006',
+                            'wrt6api010',
+                            'wrt6api012',
+                            'wrt6api050',
+                            'wrt6api041',
+                            'wrt6api042',
+                            'wrt6api043',
+                            'wrt6api039',
+                            'wrt6api040',
+                            'tctdyna009',
+                            'tctdyna010',
+                            'wrt6aws020',
+                            'wrt6aws021',
+                            'GOlxQoIL8p',
+                            'YJj0WRVaJL',
+                            'Zyj5WRVa07',
+                            'Zyj5W00008',
+                            'Zyj5WRVa09',
+                            'Zyj5WRVa10',
+                            'Zyj5WRVa13',
+                            'Zyj5WRVa17',
+                            'Zyj5WRVa18',
+                            'Zyj5WRV319',
+                            'Zyjn7RVa20',
+                            'Zyj5WRVa21',
+                            'Zyj5WRVa22',
+                            'Zyj5WRVa25',
+                            'Zyj5WRVa27',
+                            'Zyj5gRVa28',
+                            'Zyj5WRVa30',
+                            'Zyj5WRVa37',
+                            'ol75WRVa39',
+                            'Zyj5WRVa41',
+                            'Zyj5WRVa44',
+                            'Zyj5WRaa45',
+                            'Zyj5WR1045',
+                            'Zyj5WR4055',
+                            'Zyj5WR5055',
+                            'Zyj5WRVa65',
+                            'Zyj5WRVa66',
+                            'Zyj5WRVa75',
+                            'Zyj5WRV106',
+                            'Zyj5WR0114');
+
+var id_maps = {'rMLtTXzQr2-2.0.0-arm.tpk':                           'rMLtTXzQr2',
+               'SD2nFxbyeA-2.0.0-i386.tpk':                          'SD2nFxbyeA',
+               'app-widget-mouse-event-false.wgt':                   'wrt6awi014',
+               'app-widget-sample.wgt':                              'wrt6app001',
+               'app-widget-box-appwidgetready-event.wgt':            'wrt6awb006',
+               'app-widget-mouse-event-true.wgt':                    'wrt6awi013',
+               'app-widget-load-event.wgt':                          'wrt6aws016',
+               'app-widget-visibility-event.wgt':                    'wrt6aws018',
+               'app-widget-box-size-decoration.wgt':                 'wrt6awb003',
+               'app-widget-box-size-preview.wgt':                    'wrt6awb005',
+               'app-widget-sign-author.wgt':                         'wrt6sig001',
+               'app-widget-sign-author-distributor.wgt':             'wrt6sig003',
+               'app-widget-sign-distributor.wgt':                    'wrt6sig004',
+               'app-widget-sign-invalid.wgt':                        'wrt6sig002',
+               'app-widget-sign-none.wgt':                           'wrt6sig005',
+               'app-device-api-security-alarm.wgt':                  'wrt6api003',
+               'app-device-api-security-application-info.wgt':       'wrt6api004',
+               'app-device-api-security-application-launch.wgt':     'wrt6api005',
+               'app-device-api-security-appmanager-certificate.wgt': 'wrt6api006',
+               'app-device-api-security-bluetooth-health.wgt':       'wrt6api010',
+               'app-device-api-security-bluetooth-manager.wgt':      'wrt6api012',
+               'app-device-api-security-negative.wgt':               'wrt6api050',
+               'app-device-api-security-system.wgt':                 'wrt6api041',
+               'app-device-api-security-systemmanager.wgt':          'wrt6api042',
+               'app-device-api-security-websetting.wgt':             'wrt6api043',
+               'app-device-api-security-secureelement.wgt':          'wrt6api039',
+               'app-device-api-security-setting.wgt':                'wrt6api040',
+               'dynamicbox-reload-background.wgt':                   'tctdyna009',
+               'dynamicbox-reload-foreground.wgt':                   'tctdyna010',
+               'app-widget-unload-event.wgt':                        'wrt6aws020',
+               'app-widget-load-event-alive-time.wgt':               'wrt6aws021',
+               'WebDynamicBox_1.wgt':                                'GOlxQoIL8p',
+               'WebDynamicBox_2.wgt':                                'YJj0WRVaJL',
+               'WebDynamicBox_7.wgt':                                'Zyj5WRVa07',
+               'WebDynamicBox_8.wgt':                                'Zyj5W00008',
+               'WebDynamicBox_9.wgt':                                'Zyj5WRVa09',
+               'WebDynamicBox_10.wgt':                               'Zyj5WRVa10',
+               'WebDynamicBox_13.wgt':                               'Zyj5WRVa13',
+               'WebDynamicBox_17.wgt':                               'Zyj5WRVa17',
+               'WebDynamicBox_18.wgt':                               'Zyj5WRVa18',
+               'WebDynamicBox_19_3.wgt':                             'Zyj5WRV319',
+               'WebDynamicBox_20.wgt':                               'Zyjn7RVa20',
+               'WebDynamicBox_21.wgt':                               'Zyj5WRVa21',
+               'WebDynamicBox_22.wgt':                               'Zyj5WRVa22',
+               'WebDynamicBox_25.wgt':                               'Zyj5WRVa25',
+               'WebDynamicBox_27.wgt':                               'Zyj5WRVa27',
+               'WebDynamicBox_28.wgt':                               'Zyj5gRVa28',
+               'WebDynamicBox_30.wgt':                               'Zyj5WRVa30',
+               'WebDynamicBox_37.wgt':                               'Zyj5WRVa37',
+               'WebDynamicBox_39.wgt':                               'ol75WRVa39',
+               'WebDynamicBox_41.wgt':                               'Zyj5WRVa41',
+               'WebDynamicBox_44.wgt':                               'Zyj5WRVa44',
+               'WebDynamicBox_45.wgt':                               'Zyj5WRaa45',
+               'WebDynamicBox_45_1.wgt':                             'Zyj5WR1045',
+               'WebDynamicBox_55_4.wgt':                             'Zyj5WR4055',
+               'WebDynamicBox_55_5.wgt':                             'Zyj5WR5055',
+               'WebDynamicBox_65.wgt':                               'Zyj5WRVa65',
+               'WebDynamicBox_66.wgt':                               'Zyj5WRVa66',
+               'WebDynamicBox_75.wgt':                               'Zyj5WRVa75',
+               'WebDynamicBox_106.wgt':                              'Zyj5WRV106',
+               'WebDynamicBox_114.wgt':                              'Zyj5WR0114'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DynamicBox/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora b/mobile/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora
new file mode 100755 (executable)
index 0000000..4a0af40
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices
+     within Derivative Works that You distribute, alongside or as an addendum
+     to the NOTICE text from the Work, provided that such additional attribution
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk b/mobile/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..8241fb8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt
new file mode 100755 (executable)
index 0000000..c27c57f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt
new file mode 100755 (executable)
index 0000000..d84b5a8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt
new file mode 100755 (executable)
index 0000000..3f24f33
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt
new file mode 100755 (executable)
index 0000000..1b55f92
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt
new file mode 100755 (executable)
index 0000000..73d81c7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt
new file mode 100755 (executable)
index 0000000..65d529a
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt
new file mode 100755 (executable)
index 0000000..94975f8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt
new file mode 100755 (executable)
index 0000000..3906309
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt
new file mode 100755 (executable)
index 0000000..7de26a4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt
new file mode 100755 (executable)
index 0000000..7f50ca4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt
new file mode 100755 (executable)
index 0000000..8bfedb1
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt
new file mode 100755 (executable)
index 0000000..d9d14cf
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt
new file mode 100755 (executable)
index 0000000..acb231c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt
new file mode 100755 (executable)
index 0000000..5c84341
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt
new file mode 100755 (executable)
index 0000000..f731bbe
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt
new file mode 100755 (executable)
index 0000000..196e5aa
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt
new file mode 100755 (executable)
index 0000000..f87705c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt
new file mode 100755 (executable)
index 0000000..17686e9
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt
new file mode 100755 (executable)
index 0000000..e6f8be8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt
new file mode 100755 (executable)
index 0000000..7dcf0da
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt
new file mode 100755 (executable)
index 0000000..c851f29
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt
new file mode 100755 (executable)
index 0000000..1737470
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt
new file mode 100755 (executable)
index 0000000..e493981
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt
new file mode 100755 (executable)
index 0000000..d69a272
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt
new file mode 100755 (executable)
index 0000000..87fa4c1
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt
new file mode 100755 (executable)
index 0000000..9d5bc37
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt
new file mode 100755 (executable)
index 0000000..336b704
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt
new file mode 100755 (executable)
index 0000000..c5b57b3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt
new file mode 100755 (executable)
index 0000000..fbc3b01
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt
new file mode 100755 (executable)
index 0000000..977d7f0
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt
new file mode 100755 (executable)
index 0000000..e357ab4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt
new file mode 100755 (executable)
index 0000000..0669555
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt
new file mode 100755 (executable)
index 0000000..faf9006
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt
new file mode 100755 (executable)
index 0000000..691481c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt
new file mode 100755 (executable)
index 0000000..378fc5c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt
new file mode 100755 (executable)
index 0000000..058bb62
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt
new file mode 100755 (executable)
index 0000000..815b192
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt
new file mode 100755 (executable)
index 0000000..30f000f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt
new file mode 100755 (executable)
index 0000000..d6e9d9b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt
new file mode 100755 (executable)
index 0000000..348cbce
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt
new file mode 100755 (executable)
index 0000000..4488453
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt
new file mode 100755 (executable)
index 0000000..4575603
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt
new file mode 100755 (executable)
index 0000000..27cb50a
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt
new file mode 100755 (executable)
index 0000000..11bfa02
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt
new file mode 100755 (executable)
index 0000000..8ff7a38
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt
new file mode 100755 (executable)
index 0000000..fe869f3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt
new file mode 100755 (executable)
index 0000000..0e45920
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt
new file mode 100755 (executable)
index 0000000..c64a233
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt
new file mode 100755 (executable)
index 0000000..6a1aa88
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt
new file mode 100755 (executable)
index 0000000..457df81
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt
new file mode 100755 (executable)
index 0000000..b85d44f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt
new file mode 100755 (executable)
index 0000000..6146d9a
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt
new file mode 100755 (executable)
index 0000000..3a4c627
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt
new file mode 100755 (executable)
index 0000000..04aa91f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt
new file mode 100755 (executable)
index 0000000..2d98f31
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt
new file mode 100755 (executable)
index 0000000..605f66c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt
new file mode 100755 (executable)
index 0000000..6b9dfa6
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt
new file mode 100755 (executable)
index 0000000..e18ab2e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt
new file mode 100755 (executable)
index 0000000..2bb2f92
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt b/mobile/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt
new file mode 100755 (executable)
index 0000000..7139a9f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk b/mobile/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..777a62a
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk differ
diff --git a/mobile/tct-behavior-tests/tests/FileReader/css/style.css b/mobile/tct-behavior-tests/tests/FileReader/css/style.css
new file mode 100755 (executable)
index 0000000..9ffb372
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+*/
+
+/* Message Div */
+#messageInfo {
+   margin: 10px;
+}
+.errorMessage {
+    color: red;
+}
+
+/* File List */
+#filesList {
+    table-layout: fixed;
+}
+
+#filesList tr td {
+    padding: 5px;
+    font-size: large;
+    word-break: break-all;
+    word-wrap:break-word;
+}
+
+#filePreview {
+    margin-top: 10px;
+    text-align: center;
+    border: 1px solid black;
+    width: 100%;
+    height: 300px;
+    overflow: auto;
+}
+
+#fileContent {
+    position:relative;
+    top:40%;
+}
+
+#uploadButton {
+    margin-top: 20px;
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/FileReader/index.html b/mobile/tct-behavior-tests/tests/FileReader/index.html
new file mode 100755 (executable)
index 0000000..ced077e
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <input id="fileUpload" type="file" multiple size="80" onchange="getFileList()" hidden/>
+            <div id="messageInfo">Upload: 0 file</div>
+            <table id="filesList" border="1" width="100%" align="center">
+                <tr id="example"><td width='70%'>No file selected</td><td width='30%'>0KB</td></tr>
+            </table>
+            <div align="center"><div id="filePreview"><p id="fileContent">No file data</p></div></div>
+            <div id="uploadButton" data-role="button">Open files</div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of File Reader. Tests the functionality of loading one or multiple files, opening the files one by one by clicking the hyperlink in file name.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure at least one txt file is located in the device.</p>
+            <p>Expected Result: </p>
+            <ul>
+              <li>File upload successfully.</li>
+              <li>File size show correctly.</li>
+              <li>File content print on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/FileReader/js/main.js b/mobile/tct-behavior-tests/tests/FileReader/js/main.js
new file mode 100755 (executable)
index 0000000..aa8cbe1
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+*/
+$(document).ready(function(){
+    $("#uploadButton").on("click", function() {
+        if (document.createEvent) {
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#fileUpload")[0].dispatchEvent(evt);
+        }
+    });
+    DisablePassButton();
+});
+
+
+function getFileList() {
+    try{
+        // get FileList through input element
+        var filesList = document.getElementById("fileUpload").files;
+        // FileList.length
+        if(filesList && filesList.length > 0){
+            $("#example").remove();
+            $("#messageInfo").html("Upload: " + filesList.length + " file/s");
+            var filesStr = "";
+            for(var i= 0; i < filesList.length; i++) {
+                // FileList.item() to get file items
+                var file = filesList.item(i);
+                // Blob.slice testing
+                file.slice = file.slice || file.webkitSlice || file.mozSlice;
+                var fileBlob = file.slice(0, file.size);
+                // This fileBlob should be the same with the file
+                if(fileBlob.size == file.size){
+                    filesStr = filesStr + "<tr><td width='70%'><a href='javascript:startRead(" + i + ")'>" + file.name + "</a></td><td width='30%'>" + Math.round(file.size/1024) + "KB</td>" + "</tr>";
+                }
+            }
+            $("#filesList").show();
+            $("#filesList").html(filesStr);
+        }
+    } catch (err) {
+        $("#messageInfo").addClass("errorMessage");
+        $("#messageInfo").html("Error: " + err.code + " - " + err.message);
+    }
+}
+
+var filetype = "";
+function startRead(index) {
+
+    var file = document.getElementById("fileUpload").files[index];
+    if (file) {
+        var reader = new FileReader();
+        if(file.type.indexOf("text") >= 0) {
+            // readAsText
+            // Read file into memory as UTF-8
+            reader.readAsText(file, "UTF-8");
+            filetype = "text";
+        } else if (file.type.indexOf("image") >= 0) {
+            // readAsDataURL
+            reader.readAsDataURL(file);
+            filetype = "image";
+        } else {
+            try {
+                //try to read other types of file as text.
+                reader.readAsText(file, "UTF-8");
+                filetype = "text";
+            } catch(e) {
+                $.mobile.hidePageLoadingMsg();
+                $("#filePreview").html("Cannot pre-view this type of file!");
+            }
+        }
+        EnablePassButton();
+        // Handle progress, success, and errors
+        reader.onloadstart = loadstart;
+        reader.onload = loaded;
+        reader.onloadend = loadend;
+        reader.onerror = errorHandler;
+    }
+}
+function loadstart(evt) {
+    // loading
+    $.mobile.showPageLoadingMsg();
+}
+
+function loaded(evt) {
+    var reader = evt.target;
+    if (reader && reader.result) {
+        if(filetype == "text") {
+            $("#filePreview").html(reader.result);
+        } else if (filetype == "image") {
+            $("#filePreview").html("<image src='" + reader.result + "'></image>");
+        }
+    }
+}
+
+function loadend(evt) {
+    $.mobile.hidePageLoadingMsg();
+}
+
+function errorHandler(evt) {
+   $("#messageInfo").addClass("errorMessage");
+   $("#messageInfo").html(evt.target.error.name);
+}
diff --git a/mobile/tct-behavior-tests/tests/FullScreen/index.html b/mobile/tct-behavior-tests/tests/FullScreen/index.html
new file mode 100755 (executable)
index 0000000..4188aa8
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style>
+        div:full-screen {
+            opacity: 0;
+        }
+        div:-webkit-full-screen {
+            opacity: 0;
+        }
+        :full-screen-ancestor {
+            opacity: 1;
+            background: green;
+        }
+        :-webkit-full-screen-ancestor {
+            background: green;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider" id="labelFullScreen">FullScreen</li>
+        <li id ="buttonFullScreen">
+          <div data-role="button" id="requestFullScreen">Request</div>
+          <div data-role="button" id="cancelFullScreen" class="hideButton">Cancle FullScreen</div>
+        </li>
+        <li data-role="list-divider" id="labelcssFullScreen">CSS FullScreen</li>
+        <li id ="buttoncssFullScreen">
+          <div data-role="button" id="cssFullScreen">Request</div>
+          <div data-role="button" id="cancelCssFullScreen" class="hideButton">Cancle CSS FullScreen</div>
+        </li>
+      </ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the full screen mode and CSS full screen mode could be enabled and cancelled. The CSS full screen mode is filled with green color in background.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if full screen mode and CSS full screen mode functions all work well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/FullScreen/js/main.js b/mobile/tct-behavior-tests/tests/FullScreen/js/main.js
new file mode 100755 (executable)
index 0000000..cfb4371
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+$(document).ready(function () {
+    DisablePassButton();
+    $("#requestFullScreen").on(
+        "click",
+        function(evt) {
+            document.documentElement.webkitRequestFullScreen();
+            requestElement("cancelFullScreen");
+            EnablePassButton();
+     });
+
+     $("#cancelFullScreen").on(
+        "click",
+        function(evt) {
+            document.webkitCancelFullScreen();
+            requestElement("");
+     });
+
+     $("#cssFullScreen").on(
+        "click",
+        function(evt) {
+            if (!document.webkitIsFullScreen) {
+                var element = evt.originalEvent.srcElement;
+                requestElement("cancelCssFullScreen");
+                element.webkitRequestFullScreen();
+                setTimeout(function() {
+                    document.documentElement.webkitRequestFullScreen();
+                }, 50);
+            }
+            EnablePassButton();
+     });
+
+     $("#cancelCssFullScreen").on(
+        "click",
+        function(evt) {
+            window.location.reload();
+            /**if (document.webkitIsFullScreen) {
+                document.webkitCancelFullScreen();
+                if ($(document)["context"].styleSheets.length == 2) {
+                    $(document)["context"].styleSheets[1].deleteRule(1);
+                }
+                document.documentElement.webkitRequestFullScreen();
+                window.location.reload();
+            }*/
+     });
+});
+
+function requestElement(ID) {
+    var IDs = ["requestFullScreen", "cancelFullScreen", "cssFullScreen", "cancelCssFullScreen", "labelFullScreen", "labelcssFullScreen", "buttonFullScreen", "buttoncssFullScreen"];
+    IDs.forEach(function(entry) {
+        if (ID != entry) {
+            if (ID == "cancelFullScreen" && entry != "labelFullScreen" && entry != "buttonFullScreen") {
+                $("#" + entry).hide();
+            } else if (ID == "cancelCssFullScreen" && entry != "labelcssFullScreen" && entry != "buttoncssFullScreen") {
+                $("#" + entry).hide();
+            }
+        } else {
+            $("#" + entry).css("display", "");
+            $("#" + entry).show();
+        }
+        if (ID == "") {
+            if (entry == IDs[1] || entry == IDs[3]) {
+                $("#" + entry).hide();
+            } else {
+                $("#" + entry).show();
+            }
+        }
+    });
+}
diff --git a/mobile/tct-behavior-tests/tests/HTML5Forms/css/style.css b/mobile/tct-behavior-tests/tests/HTML5Forms/css/style.css
new file mode 100755 (executable)
index 0000000..1d31a68
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Align */
+.text-left{
+    text-align: left;
+}
+.text-right{
+    text-align: right;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+/* CSS text-decoration */
+.decoration1{
+    text-decoration: underline;
+}
+.decoration2{
+    text-decoration: line-through;
+}
+.decoration3{
+    text-decoration: overline;
+}
+
+/* CSS break-word */
+.break1{
+    word-break: break-all;
+    text-align: justify;
+}
+.break2{
+    word-break: break-word;
+    text-align: justify;
+}
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/mobile/tct-behavior-tests/tests/HTML5Forms/index.html b/mobile/tct-behavior-tests/tests/HTML5Forms/index.html
new file mode 100755 (executable)
index 0000000..8ccc1c1
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title">HTML5 Forms</h1>
+    </div>
+    <div data-role="content" class="content">
+      <form action="index.html" method="get" id="the-form">
+        <div>
+          <p>input type="color"</p>
+          <input style="width: 50px;height: 50px;" value="#000000" name="color" type="color">
+        </div>
+        <div>
+          <p>input type="date"</p>
+          <input name="date" type="date">
+        </div>
+        <div>
+          <p>input type="datetime"</p>
+          <input name="datetime" type="datetime">
+        </div>
+        <div>
+          <p>input type="datetime_local"</p>
+          <input name="datetime-local" type="datetime-local">
+        </div>
+        <div>
+          <p>input type="email"</p>
+          <input name="email" type="email">
+        </div>
+        <div>
+          <p>input type="month"</p>
+          <input name="month" type="month">
+        </div>
+        <div>
+          <p>input type="number"</p>
+          <input name="number" type="number">
+        </div>
+        <div data-role="rangeslider">
+          <p>input type="range"</p>
+          <label for="range"></label>
+          <input name="range" id="range-1a" min="0" max="100" value="50" type="range" />
+        </div>
+        <div>
+          <p>input type="search"</p>
+          <input name="search" results="5" autosave="saved-searches" type="search">
+        </div>
+        <div>
+          <p>input type="tel"</p>
+          <input name="tel" type="tel">
+        </div>
+        <div>
+          <p>input type="time"</p>
+          <input name="time" type="time">
+        </div>
+        <div>
+          <p>input type="url"</p>
+          <input name="url" type="url">
+        </div>
+        <div>
+          <p>input type="week"</p>
+          <input name="week" type="week">
+        </div>
+        <div>
+          <input value="Send" type="submit">
+        </div>
+      </form>
+      <script>
+      (function () {
+          var theForm = document.getElementById("the-form");
+          if ("oninput" in theForm) {
+              theForm.addEventListener("input", function () {
+                  output.value = range.value;
+                  alert(range.value);
+              }, false);
+          }
+      })();
+      </script>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies all kind of form work properly</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/HTML5Forms/js/COPYING b/mobile/tct-behavior-tests/tests/HTML5Forms/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/mobile/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/index.html b/mobile/tct-behavior-tests/tests/HybridApplication/index.html
new file mode 100755 (executable)
index 0000000..c28cda2
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <title>HybridApplication</title>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" class="wgtButton">Update</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch3" class="wgtButton">Try to Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of hybrid application. Tests the functionality of two hybrid applications installation, uninstallation, launching and update.</p>
+            <ol>
+              <li>Click the "Install" button to install the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Update" button to update the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Uninstall" button to uninstall the Hybrid app.</li>
+              <li>Click the "Try to Launch" button to launch the Hybrid app, it will get an error msg.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test points work well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/js/main.js b/mobile/tct-behavior-tests/tests/HybridApplication/js/main.js
new file mode 100755 (executable)
index 0000000..8a69f8b
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Wei, Ji <wei.ji@samsung.com>
+
+*/
+
+var installUrl, updateUrl, platformName, packagePath;
+var opened_flag = false;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        if (!opened_flag) {
+            opened_flag = true;
+            $("#update").removeClass("ui-disabled");
+        }
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+        EnablePassButton();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhtchybrid")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is updated");
+            $("#update").removeClass("ui-disabled");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Hybrid application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "HybridApp2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if (type == "install") {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+                if (type == "update") {
+                    $("#update").addClass("ui-disabled");
+                    $("#launch2").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                $("#launch3").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhtchybrid", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhtchybrid.HybridApp", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp2.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/" + "HybridApp2.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp2 Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "HybridApp1.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/" + "HybridApp1.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp1 Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    //add corssplatform support
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    platformName = deviceCapabilities.platformCoreCpuArch;
+    if (platformName.indexOf("armv7") >= 0) {
+        packagePath = "wgt-package/tests/HybridApplication/res/armv7/";
+    } else if (platformName.indexOf("x86") >= 0) {
+        packagePath = "wgt-package/tests/HybridApplication/res/x86/";
+    } else {
+        alert("Error: Unsupported platform");
+        return;
+    }
+
+    tizen.filesystem.resolve(
+        packagePath,
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt b/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt
new file mode 100644 (file)
index 0000000..7f1c214
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt b/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt
new file mode 100644 (file)
index 0000000..930de5f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt b/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt
new file mode 100644 (file)
index 0000000..365f451
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt b/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt
new file mode 100644 (file)
index 0000000..d122a4d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/LocationGPS/css/style.css b/mobile/tct-behavior-tests/tests/LocationGPS/css/style.css
new file mode 100755 (executable)
index 0000000..11effe4
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+
+.position_font {
+    color: #3399FF;
+    font-size: 20px;
+}
+
+.attribute_show {
+    margin: 2px;
+    margin-left: 5px;
+    margin-right: 5px;
+    height: 40px;
+    line-height:40px;
+    border: #666666 solid thin;
+    background-color: #CCCCCC;
+}
+td {
+    background-color: #996633;
+}
diff --git a/mobile/tct-behavior-tests/tests/LocationGPS/index.html b/mobile/tct-behavior-tests/tests/LocationGPS/index.html
new file mode 100755 (executable)
index 0000000..a36ae23
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .observate {
+                border: #000 solid 1px;
+                height: 220px;
+                margin-bottom: 10px;
+            }
+            .display {
+                margin: 3px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF"  onload="initialize()">
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" class="observate">
+              <ul id="coordinate">
+                <li id="latitudeDiv" class="display">Latitude: n/a</li>
+                <li id="longitudeDiv" class="display">Longitude: n/a</li>
+                <li id="speedDiv" class="display">Speed: n/a</li>
+              </ul>
+              <p id="errormessage"></p>
+            </div>
+            <p class="ui-li-desc">* Make sure GPS is enabled.</p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the location information of latitude and longitude position can be fetched through GPS.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure device networking is disabled and GPS is enabled.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if both the latitude and longitude return the correct position data.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/LocationGPS/js/main.js b/mobile/tct-behavior-tests/tests/LocationGPS/js/main.js
new file mode 100755 (executable)
index 0000000..9e1748f
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+var html_log;
+html_log = "<b>Html Console:</b><br>";
+
+function html_console(message) {
+    html_log += message + "<br>";
+    jQuery("#htmlConsole").html(html_log);
+}
+// -------------------------------------------
+
+function initialize() {
+    $.mobile.showPageLoadingMsg();
+    DisablePassButton();
+    try {
+        navigator.geolocation.watchPosition(successCallback, errorCallback, { maximumAge: 60000});
+    } catch (err) {
+        $.mobile.hidePageLoadingMsg();
+        jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + err.message + "</font></p>");
+    }
+}
+
+function successCallback (position) {
+    $.mobile.hidePageLoadingMsg();
+    EnablePassButton();
+    var coordinates = position.coords;
+    jQuery("#latitudeDiv").text("Latitude: " + coordinates.latitude);
+    jQuery("#longitudeDiv").text("Longitude: " + coordinates.longitude);
+    jQuery("#speedDiv").text("Speed: " + coordinates.speed);
+}
+
+function errorCallback (error) {
+    $.mobile.hidePageLoadingMsg();
+    var positionError_const =["PERMISSION DENIED", "POSITION UNAVAILABLE", "TIMEOUT"];
+    var index = error.code-0-1;
+    jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + positionError_const[index] + "</font></p>");
+}
diff --git a/mobile/tct-behavior-tests/tests/MediaPlayback/css/style.css b/mobile/tct-behavior-tests/tests/MediaPlayback/css/style.css
new file mode 100755 (executable)
index 0000000..c2ee1ee
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:100%;
+}
+
+div.ui-slider-bg {
+border: none;
+height: 100%;
+}
diff --git a/mobile/tct-behavior-tests/tests/MediaPlayback/index.html b/mobile/tct-behavior-tests/tests/MediaPlayback/index.html
new file mode 100755 (executable)
index 0000000..ea2dbe1
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div id="contentdiv">
+        <video id="MediaPlayback" width="340" height="200" src="" poster="../../res/images/PNG_512x512_318Kb_BBB.png" controls="controls" loop>Not Support ...</video>
+      </div>
+      <div id="volumediv" data-role="controlgroup">
+        <label for="slider-1">Volume</label>
+        <input name="slider-1" id="slider-1" min="0" max="1" step="0.01" value="0.60" data-highlight="true" data-show-value="true" type="range">
+      </div>
+      <div id="buttondiv">
+        <a href="javascript:Previous()" id="previous" data-role="button">Retest Previous Video</a>
+        <a href="javascript:Next()" id="next" data-role="button">Test Next Video</a>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the video playback of 3GP and MP4 files works correctly. And tests the functionality of playback operations including play and pause, volume up and down, time bar sliding forward and backward, full screen and normal screen switching, device rotate, foreground and background switching on every video files.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well during the video playback.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/MediaPlayback/js/COPYING b/mobile/tct-behavior-tests/tests/MediaPlayback/js/COPYING
new file mode 100755 (executable)
index 0000000..ecf954c
--- /dev/null
@@ -0,0 +1,25 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+        if (o.popupEnabled) {
+             this._positionPopup();
+-            this._popup.html(Math.round(newValue));
++            this._popup.html(Math.round(newValue*100)+"%" );
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+         if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
++            this._handleText.html(Math.round(newValue*100)+"%");
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/mobile/tct-behavior-tests/tests/MediaPlayback/js/main.js b/mobile/tct-behavior-tests/tests/MediaPlayback/js/main.js
new file mode 100755 (executable)
index 0000000..03066f7
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var videoFileList = new Array("3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp", "MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4", "MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4");
+var testTarget='';
+
+$(document).ready(function(){
+    $("#previous").addClass("ui-disabled");
+
+    //add contentdiv style
+    $("#contentdiv").css({"width":"340px","margin":"0px auto"});
+    //set default video.src
+    $("#MediaPlayback").attr("src", "../../res/media/" + videoFileList[0]);
+    document.getElementById("MediaPlayback").play();
+
+    document.getElementById("MediaPlayback").volume = 0.6;
+    $("#slider-1").hide();
+    DisablePassButton();
+});
+
+function Previous() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i > 1) {
+        testTarget.src="../../res/media/"+videoFileList[i-1];
+        testTarget.play();
+        $("#next").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/"+videoFileList[i-1];
+        testTarget.play();
+        $("#previous").addClass("ui-disabled");
+        $("#next").removeClass("ui-disabled");
+    }
+}
+
+function Next() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i < 1) {
+        testTarget.src="../../res/media/"+videoFileList[i+1];
+        testTarget.play();
+        $("#previous").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/"+videoFileList[i+1];
+        testTarget.play();
+        $("#next").addClass("ui-disabled");
+        $("#previous").removeClass("ui-disabled");
+        EnablePassButton();
+    }
+}
+
+function getFileName(o){
+    var pos=o.lastIndexOf("/");
+    return o.substring(pos+1);
+}
diff --git a/mobile/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..7f37a88
--- /dev/null
@@ -0,0 +1,122 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+            this._popup.html(Math.round(newValue*100)+"%" );
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+
+               if ( o.showValue ) {
+            this._handleText.html(Math.round(newValue*100)+"%");
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/MessagingEmail/NOTICE b/mobile/tct-behavior-tests/tests/MessagingEmail/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/MessagingEmail/index.html b/mobile/tct-behavior-tests/tests/MessagingEmail/index.html
new file mode 100755 (executable)
index 0000000..fa2bac2
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="page">
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+
+    <div id="content">
+        <ul data-role="listview">
+            <!-- <li data-role="list-divider">Email Precondition</li>
+            <li>
+                <div data-role="button" onclick="account();">Email Account Set</div>
+            </li> -->
+            <li data-role="list-divider">Recipient</li>
+            <li>
+                <input id="email" type="email" value="" />
+            </li>
+            <li data-role="list-divider">CC</li>
+            <li>
+                <input id="cc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">BCC</li>
+            <li>
+                <input id="bcc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">Title</li>
+            <li>
+                <input type="text" id="title" value="Behavior_Test E-mail" />
+            </li>
+            <li data-role="list-divider">Email Content</li>
+            <li>
+                <textarea id="emailContent" style="min-height:200px; width:99%;">Behavior_Test_Messaging_Email</textarea>
+            </li>
+            <li data-role="list-divider">Attachments</li>
+            <li>
+                <div data-role="button" id="addAttach">Add attachment</div>
+            </li>
+        </ul>
+        <ul data-role="listview" id="attachmentsList" style="font-size:12pt; word-wrap:break-word;"></ul>
+        <ul data-role="listview">
+            <li data-role="list-divider">Email Send</li>
+            <li>
+                <div data-role="button" id="send">Email Send</div>
+            </li>
+        </ul>
+    </div>
+
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the email is successfully sent</p><br>
+            <p>1. Fill in Recipient, CC, BCC, Title, Email Content fields</p>
+            <p>2. Select Add attachment and pick an attachment</p>
+            <p>3. Select Email Send</p>
+            <p>4. Check if the email is successfully sent(Check Recipient, CC, BCC accounts to varify the delivery)</p>
+        </font>
+    </div>
+</div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/MessagingEmail/js/main.js b/mobile/tct-behavior-tests/tests/MessagingEmail/js/main.js
new file mode 100755 (executable)
index 0000000..3df867d
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var errorMessage = '',
+    emailReg = /^([\w\-\.]+@([\w\-]+\.)+[\w\-]{2,4})?$/,
+    emailArray = [],
+    numberOfBadEmails = 0,
+    app = {
+        attach: []
+    };
+
+function replaceAll(txt, replace, with_this) {
+    return txt.replace(new RegExp(replace, 'g'), with_this);
+}
+
+function verifyEmail() {
+    var result = false, i, tempEmail, email = $('#email').val(), tab = null;
+
+    if (email === '') {
+        errorMessage = 'Enter email address';
+    } else {
+        numberOfBadEmails = 0;
+        emailArray = [];
+        tab = email.split(/[,; ]/);
+        for (i = 0; i < tab.length; i += 1) {
+            tempEmail = $.trim(tab[i]);
+            if (tempEmail !== '') {
+                if (emailReg.test(tempEmail)) {
+                    emailArray.push(tempEmail);
+                } else {
+                    numberOfBadEmails += 1;
+                }
+            }
+        }
+        if (emailArray.length > 0 && numberOfBadEmails === 0) {
+            result = true;
+        } else {
+            if (numberOfBadEmails === 1) {
+                errorMessage = 'one email address is incorrect';
+            } else {
+                errorMessage = numberOfBadEmails + ' email addresses are incorrect';
+            }
+        }
+    }
+
+    return result;
+}
+
+function verifyTitle() {
+    var result = false,
+        title = $('#title').val();
+
+    if (title === '') {
+        errorMessage = 'enter email title';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function verifyContent() {
+    var result = false,
+        content = $('#emailContent').val();
+
+    if (content === '') {
+        errorMessage = 'Enter email content';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function createAttachList(element) {
+    return ('<li><div>' + element + '</div></li>');
+}
+
+function attachListUpdate() {
+    var fileName = 'filename', size = '0kB', i, len;
+    $('#attachmentsList').replaceWith($('<ul data-role="listview" id="attachmentsList"></ul>'));
+
+    for (i = 0, len = app.attach.length; i < len; i += 1) {
+        $('#attachmentsList').append(createAttachList(app.attach[i]));
+    }
+
+    $('#attachmentsList').trigger('create');
+}
+
+// Define the success callback.
+function messageSent() {
+    app.attach = [];
+    attachListUpdate();
+    alert('Email was sent');
+}
+
+// Define the error callback.
+function messageFailed(error) {
+    alert('Error occured while sending the message!');
+}
+
+// workaround for launch accounts settings;
+function runEmailService() {
+    var apps = "";
+    function onGetInfo(data) {
+        for (var i = 0; i < data.length; i++)
+        {
+            if(data[i].id == "setting-myaccount-efl")
+                apps = data[i].id;
+        }
+        if (apps) {
+            tizen.application.launch(apps);
+        } else {
+            alert('Account settings cannot be launched. Please configure email account by system options.');
+        }
+    }
+    tizen.application.getAppsInfo(onGetInfo);
+}
+
+function virtualAttachmentPath(absolutePath) {
+    absolutePath = absolutePath.replace(/^\/opt\/usr\/media\//, "");
+    var parts = absolutePath.split("/");
+    switch (parts[0]) {
+    case "Images":
+        parts[0] = "images";
+        break;
+    case "Videos":
+        parts[0] = "videos";
+        break;
+    case "Sounds":
+        parts[0] = "music";
+        break;
+    case "Documents":
+        parts[0] = "documents";
+        break;
+    case "Downloads":
+        parts[0] = "downloads";
+        break;
+    default:
+        return null;
+    }
+    return parts.join("/");
+}
+
+// Define the success callback.
+function serviceListCB(services) {
+    var i, len, msgService, email, tmpArray = [], name, vname;
+    function split(str) {
+        return str.split(/[,; ]/).filter(function (item) {
+            return (item.trim() !== '');
+        });
+    }
+
+    if (services.length > 0) {
+        msgService = services[0];
+        alert('Sending an Email(takes about 1 minute)');
+
+        email = new tizen.Message('messaging.email');
+        email.subject = $('#title').val();
+        email.to = split($('#email').val());
+        email.cc = split($('#cc').val());
+        email.bcc = split($('#bcc').val());
+        email.body.plainBody = $('#emailContent').val();
+        email.body.htmlBody = "<div>" + $("#emailContent").val();
+
+        for (i = 0, len = app.attach.length; i < len; i += 1) {
+            name = app.attach[i];
+            vname = virtualAttachmentPath(name);
+            try {
+                tmpArray.push(new tizen.MessageAttachment(vname));
+            } catch (err) {
+                alert("Attachment could not be added:\n" + name);
+            }
+        }
+        email.attachments = tmpArray;
+
+        // Send request
+        msgService.sendMessage(email, messageSent, messageFailed);
+    } else {
+        if (confirm('This application for proper running requires configure email account.\n Do you want configure account now?')) {
+            runEmailService();
+        }
+    }
+}
+
+function serviceListError(e) {
+    alert('err: ' + e.message);
+}
+
+function sendMessage() {
+    try {
+        tizen.messaging.getMessageServices("messaging.email", serviceListCB, serviceListError);
+    } catch (e) {
+        alert('err: ' + e.message);
+    }
+}
+
+function startFileManager() {
+    function getDataFromFileManager(data) {
+        app.attach.push(data[0].value[0]);
+        attachListUpdate();
+    }
+
+    var serviceRequest = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/pick', null, '*/*');
+
+    var appControlReplyCB = {
+            onsuccess: getDataFromFileManager,
+            onfailure: function() {}
+    };
+
+    try {
+    tizen.application.launchAppControl(serviceRequest, null,
+    function() {
+        console.log("launch appControl succeeded");
+    },
+    function(e) {
+        alert("launch appControl failed. Reason: " + e.message);
+    },
+    appControlReplyCB);
+    } catch(e) {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function init() {
+    $('#send').bind('click', function (event) {
+        if (verifyEmail() && verifyTitle() && verifyContent()) {
+            sendMessage();
+        } else {
+            alert(errorMessage);
+        }
+    });
+    $('#addAttach').bind('click', function (event) {
+        startFileManager();
+    });
+}
+
+$(document).ready(init);
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE b/mobile/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE
new file mode 100755 (executable)
index 0000000..81b6824
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/image.png :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/MessagingSMSMMS/index.html b/mobile/tct-behavior-tests/tests/MessagingSMSMMS/index.html
new file mode 100755 (executable)
index 0000000..8714342
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Recipient</li>
+                <li><input type="tel" id="tel" value="" /></li>            
+                <li data-role="list-divider">Send Message</li>
+                <li><div data-role="button" id="sms">SMS</div></li>
+                <li><div data-role="button" id="mms">MMS</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if SMS/MMS is sent properly</p><br>
+                <p>1. Fill in Recipient</p>
+                <p>2. Select SMS Send</p>
+                <p>3. Select MMS Send</p>
+                <p>4. Check if the SMS/MMS is successfully sent</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js b/mobile/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js
new file mode 100755 (executable)
index 0000000..faecc92
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var h, m, s, day, year, month, date;
+var deviceCapabilities;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#sms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.sms", smsSuccessCallback, errorCallback);
+    });
+    $("#mms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.mms", mmsSuccessCallback, errorCallback);
+    });
+    deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(!deviceCapabilities.telephonyMms) {
+        $("#mms").addClass("ui-disabled");
+    }
+});
+
+function checkTime(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function checkDay(i) {
+    switch(i)
+    {
+    case 0:
+        i = "Sunday";
+        break;
+    case 1:
+        i = "Monday";
+        break;
+    case 2:
+        i = "Tuesday";
+        break;
+    case 3:
+        i = "Wednesday";
+        break;
+    case 4:
+        i = "Thursday";
+        break;
+    case 5:
+        i = "Friday";
+        break;
+    case 6:
+        i = "Saturday";
+        break;
+    }
+    return i;
+}
+
+function checkMonth(i) {
+    switch(i)
+    {
+    case 0:
+        i = "January";
+        break;
+    case 1:
+        i = "February";
+        break;
+    case 2:
+        i = "March";
+        break;
+    case 3:
+        i = "April";
+        break;
+    case 4:
+        i = "May";
+        break;
+    case 5:
+        i = "June";
+        break;
+    case 6:
+        i = "July";
+        break;
+    case 7:
+        i = "August";
+        break;
+    case 8:
+        i = "September";
+        break;
+    case 9:
+        i = "October";
+        break;
+    case 10:
+        i = "November";
+        break;
+    case 11:
+        i = "December";
+        break;
+    }
+    return i;
+}
+
+function currentTime() {
+    h = new Date().getHours();
+    m = new Date().getMinutes();
+    s = new Date().getSeconds();
+    day = new Date().getDay();
+    month = new Date().getMonth();
+    date = new Date().getDate();
+    year = new Date().getFullYear();
+    h = checkTime(h);
+    m = checkTime(m);
+    s = checkTime(s);
+    day = checkDay(day);
+    month = checkMonth(month);
+}
+
+function smsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var sms = new tizen.Message("messaging.sms");
+        sms.body.plainBody = "BehaviorTC SMS Messaging Test\n" + h + ":" + m + ":" + s;
+        sms.to = [$("#tel").val()];
+        services[0].sendMessage(sms, messageSent, messageFailed);
+    }
+}
+
+function mmsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var mms = new tizen.Message("messaging.mms");
+        mms.body.plainBody = "BehaviorTC MMS Messaging Test\n" + day + ", " + month + " " + date + ", " + year + ". " + h + ":" + m + ":" + s;
+        mms.to = [$("#tel").val()];
+        mms.subject = "BehaviorTC Messaging Test";
+        mms.attachments = [new tizen.MessageAttachment("wgt-package/tests/MessagingSMSMMS/res/image.png", "image/png")];
+        services[0].sendMessage(mms, messageSent, messageFailed);
+    }
+}
+
+function messageSent(recipients) {
+    alert("Message sent successfully to " + recipients.length + " recipients.");
+}
+
+function messageFailed(error) {
+    alert('Error occured while sending the message! ' + error.message);
+}
+
+function errorCallback(error) {
+    alert("Cannot get messaging service " + error.message);
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png b/mobile/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png
new file mode 100755 (executable)
index 0000000..983c883
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png differ
diff --git a/mobile/tct-behavior-tests/tests/NFC/NOTICE b/mobile/tct-behavior-tests/tests/NFC/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/NFC/index.html b/mobile/tct-behavior-tests/tests/NFC/index.html
new file mode 100755 (executable)
index 0000000..560ab46
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">NFC Write Message</li>
+                <li><input type="text" id="wmsg" value="BehaviorNFC"/></li>
+                <li data-role="list-divider">NFC Tag Test</li>
+                <li><div data-role="button" id="write">Write to card</div></li>
+                <li><div data-role="button" id="read">Read from card</div></li>
+                <li data-role="list-divider">NFC Read Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">NFC Peer Test</li>
+                <li><div data-role="button" id="communicate">Communicate with another device</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check NFC communication</p><br>
+                <p>1. Fill in NFC Write Message</p>
+                <p>2. Click Write to card and Place the NFC Tag to device</p>
+                <p>3. Check the Write Message</p>
+                <p>4. Click Read from card and Place the NFC Tag to device</p>
+                <p>5. Check the Read Message</p>
+                <p>6. Click Communicate with another device and Connected two device which are operated NFC</p>
+                <p>7. Check the Receive Message</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/NFC/js/main.js b/mobile/tct-behavior-tests/tests/NFC/js/main.js
new file mode 100755 (executable)
index 0000000..0aeef2c
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var writeMessage = "", readMessage = "", newMessage = "";
+var nfcFlag;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#read").bind("vclick", function() {
+        nfcFlag = false;
+        alert("Read NFC Tag\nPlace the NFC Tag to device");
+    });
+    $("#write").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "") {
+            nfcFlag = true;
+            alert("Write NFC Tag\nPlace the NFC Tag to device");
+        }
+    });
+    $("#communicate").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "")
+            alert("Peer to Peer NFC\nConnected two device which are operated NFC");
+    });
+    try {
+        tizen.nfc.setExclusiveMode(true) ;
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+    setPower(function(){
+        setTagListener();
+        setPeerListener();    
+    });
+});
+
+function writeMsg() {
+    newMessage = new tizen.NDEFMessage();
+    writeMessage = $("#wmsg").val();
+    if(writeMessage == "") {
+        alert("Fill in NFC Write Message");
+        nfcFlag = null;
+    }
+    else
+        newMessage.records[0] = new tizen.NDEFRecordText(writeMessage, "en-US");
+}
+
+function setPower(onpowered) {
+    var gNfcAdapter;
+    try {
+        gNfcAdapter = tizen.nfc.getDefaultAdapter();
+        if (!gNfcAdapter.powered) {
+            gNfcAdapter.setPowered(
+                    true,
+                    function () {onpowered();console.log("Power on succeed");},
+                    function () {console.log("Power on failed")});
+        } else {
+            onpowered();
+        }
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+}
+
+function setTagListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcTag) {
+                console.log("NFC Tag's type is " + nfcTag.type);
+                if(nfcFlag == false)
+                {
+                    try {
+                        nfcTag.readNDEF(
+                                function(message){
+                                    readMessage = message.records[0].text;
+                                    alert("Read message : " + readMessage);
+                                    document.getElementById("rmsg").innerHTML = readMessage;
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+                if(nfcFlag == true)
+                {
+                    try {
+                        nfcTag.writeNDEF(
+                                newMessage,
+                                function(){
+                                    alert("Write message : " + writeMessage);
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+            },
+            ondetach : function() {
+                console.log("NFC Tag is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetTagListener();
+    }
+    adapter.setTagListener(onSuccessCB);
+}
+
+function setPeerListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcPeer) {
+                console.log("NFC Target is detected");
+
+                nfcPeer.setReceiveNDEFListener(
+                        function(message){
+                            readMessage = message.records[0].text;
+                            alert("Receive message : " + readMessage);
+                            document.getElementById("rmsg").innerHTML = readMessage;
+                            nfcPeer.unsetReceiveNDEFListener();
+                        });
+                nfcPeer.sendNDEF(
+                        newMessage,
+                        function(){
+                            console.log("Send message");
+                        },
+                        function(e){
+                            console.log(e.message);
+                        });
+            },
+            ondetach : function() {
+                console.log("NFC Target is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetPeerListener();
+    }
+    adapter.setPeerListener(onSuccessCB);
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/Notification/NOTICE b/mobile/tct-behavior-tests/tests/Notification/NOTICE
new file mode 100755 (executable)
index 0000000..366d59e
--- /dev/null
@@ -0,0 +1,18 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestNotification,
+res/noti.png,
+res/noti1,png,
+res/noti2.png,
+res/noti3.png,
+res/noti4.png,
+res/notification.wav :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/Notification/index.html b/mobile/tct-behavior-tests/tests/Notification/index.html
new file mode 100755 (executable)
index 0000000..ae4ebbd
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">NotificationTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">NotificationTest Install</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Add</li>
+                <li>
+                    <div data-role="button" id="noti-type-simple">SIMPLE Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-ongoing">ONGOING Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-progress">PROGRESS Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-thumbnail">THUMBNAIL Notification</div>
+                </li>
+                <li data-role="list-divider">Notification List</li>
+            </ul>
+            <ul data-role="listview" id="noti-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Delete</li>
+                <li>
+                    <div data-role="button" id="delete-all">Delete All</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if a notification is successfully posted</p><br>
+                <p># Simple Notification</p>
+                <p>1. Install NotificationTest</p>
+                <p>(This application is used to verify AppControl in Notification.)</p>
+                <p>2. Click SIMPLE Notification</p>
+                <p>3. Check notification tray if a simple notification is posted</p>
+                <p>4. Clicks the simple notification and check if a NotificationTest application is launched</p>
+                <p>5. In the mean time, check if the notification is disappeared</p><br>
+                <p># Ongoing Notification</p>
+                <p>1. Click ONGOING Notification</p>
+                <p>2. Check notification tray if a ongoing notification is posted</p>
+                <p>3. Clicks the ongoing notification and check if it is NOT disappeared</p>
+                <p>4. Remove the ongoing notification by clicking Delete in the Notification List</p><br>
+                <p># Progress Notification</p>
+                <p>1. Click PROGRESS Notification</p>
+                <p>2. Check notification tray if a progress notification is posted</p>
+                <p>(The progress notification shows a bar that shows the current progress)</p>
+                <p>3. Clicks the progress notification and check if it is NOT disappeared</p>
+                <p>4. Remove the progress notification by clicking Delete in the Notification List</p><br>
+                <p># Thumbnail Notification</p>
+                <p>1. Click THUMBNAIL Notification</p>
+                <p>2. Check notification tray if a thumbnail notification is posted</p>
+                <p>3. Clicks the thumbnail notification and check if it is disappeared</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Notification/js/main.js b/mobile/tct-behavior-tests/tests/Notification/js/main.js
new file mode 100755 (executable)
index 0000000..a45edd1
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gCurrentNoti;
+var iconPath, soundPath, thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4;
+
+var init = function () {
+    showNotifications();
+    setTimeout(init, 500);
+};
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#noti-list").delegate("div", "vclick", function() {
+        var id = $(this).parent().data("id");
+
+        try {
+            tizen.notification.remove(id);
+            alert("Notification delete");
+        } catch (exc) {
+            alert("notification.remove failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#delete-all").bind("vclick", function() {
+        try {
+            tizen.notification.removeAll();
+            alert("Notification delete all");
+        } catch (exc) {
+            alert("notification.removeAll failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#noti-type-simple").bind("vclick", function() {
+        postNotification("SIMPLE");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-ongoing").bind("vclick", function() {
+        postNotification("ONGOING");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-progress").bind("vclick", function() {
+        postNotification("PROGRESS");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-thumbnail").bind("vclick", function() {
+        postNotification("THUMBNAIL");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#noti-type-simple").removeClass("ui-disabled");
+        $("#noti-type-ongoing").removeClass("ui-disabled");
+        $("#noti-type-progress").removeClass("ui-disabled");
+        $("#noti-type-thumbnail").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-simple").addClass("ui-disabled");
+    $("#noti-type-ongoing").addClass("ui-disabled");
+    $("#noti-type-progress").addClass("ui-disabled");
+    $("#noti-type-thumbnail").addClass("ui-disabled");
+    $("#delete-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    notificationPre();
+});
+
+function showNotifications() {
+    var notiArray, str = "";
+
+    try {
+        notiArray = tizen.notification.getAll();
+    } catch (exc) {
+        alert("notification.getAll failed");
+        return;
+    }
+
+    for (var i = 0; i < notiArray.length; i++) {
+        str += '<li data-id="'
+            + notiArray[i].id
+            + '">'
+            + notiArray[i].title
+            //+ ' ('
+            //+ notiArray[i].statusType
+            //+ ')'
+            + '<div data-role="button" data-inline="true">Delete</div></li>';
+    }
+    $("#noti-list").html(str).trigger("create").listview("refresh");
+}
+
+function postNotification(type) {
+    var title = "";
+    var appControl = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view", null, null, null);
+    var notiDict = {
+            iconPath : iconPath,
+            soundPath : soundPath,
+            vibration : true,
+            ledColor : "#4B0082",
+            ledOnPeriod : 1000,
+            ledOffPeriod : 500
+        };
+    if (type == "SIMPLE") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "SIMPLE_Notification";
+        notiDict.appId = "bhvtcnotif.NotificationTest";
+    }
+    if (type == "PROGRESS") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "PROGRESS_Notification";
+        notiDict.progressValue = 20;
+    }
+    if (type == "ONGOING") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "ONGOING_Notification";
+    }
+    if (type == "THUMBNAIL") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "THUMBNAIL_Notification";
+        notiDict.thumbnails = [thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4];
+    }
+    try {
+        var noti = new tizen.StatusNotification(type, title, notiDict);
+        tizen.notification.post(noti);
+        alert(type + " Notification Add");
+        setTimeout(update, 3000);
+    } catch (exc) {
+        alert("notification.post failed: " + exc.message);
+    }
+
+    function update() {
+        noti.progressValue = 63;
+        tizen.notification.update(noti);
+    }
+}
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">NotificationTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function notificationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestNotification.wgt",
+                    true,
+                    function() {
+                        console.log("Notification Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "notification.wav")
+            {
+                soundPath = files[i].toURI();
+                soundPath = soundPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti.png")
+            {
+                iconPath = files[i].toURI();
+                iconPath = iconPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti1.png")
+            {
+                thumbnailPath1 = files[i].toURI();
+                thumbnailPath1 = thumbnailPath1.replace("file:///", "/");
+            }
+            if(files[i].name == "noti2.png")
+            {
+                thumbnailPath2 = files[i].toURI();
+                thumbnailPath2 = thumbnailPath2.replace("file:///", "/");
+            }
+            if(files[i].name == "noti3.png")
+            {
+                thumbnailPath3 = files[i].toURI();
+                thumbnailPath3 = thumbnailPath3.replace("file:///", "/");
+            }
+            if(files[i].name == "noti4.png")
+            {
+                thumbnailPath4 = files[i].toURI();
+                thumbnailPath4 = thumbnailPath4.replace("file:///", "/");
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Notification/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
+$(document).bind('pageinit', init);
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/TestNotification b/mobile/tct-behavior-tests/tests/Notification/res/TestNotification
new file mode 100755 (executable)
index 0000000..ddd951f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/TestNotification differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/noti.png b/mobile/tct-behavior-tests/tests/Notification/res/noti.png
new file mode 100755 (executable)
index 0000000..0f054f8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/noti.png differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/noti1.png b/mobile/tct-behavior-tests/tests/Notification/res/noti1.png
new file mode 100755 (executable)
index 0000000..e31d360
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/noti1.png differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/noti2.png b/mobile/tct-behavior-tests/tests/Notification/res/noti2.png
new file mode 100755 (executable)
index 0000000..cfcb812
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/noti2.png differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/noti3.png b/mobile/tct-behavior-tests/tests/Notification/res/noti3.png
new file mode 100755 (executable)
index 0000000..6ee6ba1
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/noti3.png differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/noti4.png b/mobile/tct-behavior-tests/tests/Notification/res/noti4.png
new file mode 100755 (executable)
index 0000000..0327b7e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/noti4.png differ
diff --git a/mobile/tct-behavior-tests/tests/Notification/res/notification.wav b/mobile/tct-behavior-tests/tests/Notification/res/notification.wav
new file mode 100755 (executable)
index 0000000..6b0cca4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Notification/res/notification.wav differ
diff --git a/mobile/tct-behavior-tests/tests/Package/NOTICE b/mobile/tct-behavior-tests/tests/Package/NOTICE
new file mode 100755 (executable)
index 0000000..d9be9d0
--- /dev/null
@@ -0,0 +1,13 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPackage1,
+res/TestPackage2 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/Package/index.html b/mobile/tct-behavior-tests/tests/Package/index.html
new file mode 100755 (executable)
index 0000000..b4b6f32
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">TestPackage1 Install</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch1">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" style="height:40px; line-height:20px;">TestPackage2 Update</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch2">Launch</div>
+                </li>
+                <li data-role="list-divider">Package UnInstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" style="height:40px; line-height:20px;">TestPackage UnInstall</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch3">Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Package is successfully installed, updated and uninstalled</p><br>
+                <p>1. Install TestPackage1</p>
+                <p>2. Launch TestPackage1</p>
+                <p>3. Check if TestPackage is launched successfully</p>
+                <p>4. Automatically write the text('Package_Test') and click the OK button</p>
+                <p>5. Check the PASS text
+                <p>6. Update TestPackage2</p>
+                <p>7. Launch TestPackage2</p>
+                <p>8. Check if TestPackage is updated and launched successfully</p>
+                <p>9. Automatically read the text('Package_Test') and click the OK button</p>
+                <p>10. Check the PASS text
+                <p>11. Uninstall TestPackage</p>
+                <p>12. Launch TestPackage and check it fails</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Package/js/main.js b/mobile/tct-behavior-tests/tests/Package/js/main.js
new file mode 100755 (executable)
index 0000000..83e8306
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var installUrl, updateUrl;
+var flag = false;
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+        $("#launch1").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+        $("#launch3").removeClass("ui-disabled");
+        $("#launch2").addClass("ui-disabled");
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+        $("#launch2").removeClass("ui-disabled");
+        $("#launch1").addClass("ui-disabled");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        $("#update").removeClass("ui-disabled");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+            flag = true;
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            flag = false;
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "TestPackage2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'file://' + RESOURCE_DIR + '/Documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                if(type == "install")
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+                if(type == "update")
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">Updating... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(type == "install"){
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">TestPackage1 Install</div>';
+                    $("#install").addClass("ui-disabled");
+                }
+                if(type == "update") {
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">TestPackage2 Update</div>';
+                    $("#update").addClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+    var onUninstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">UnInstalling... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">TestPackage UnInstall</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        if(flag == false)
+            alert("TestPackage is already Uninstalled or not Installed");
+        else
+            tizen.package.uninstall("bhvtcpacka", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpacka.TestPackage", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage2")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestPackage2.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "TestPackage1")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestPackage1.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Package/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/Package/res/TestPackage1 b/mobile/tct-behavior-tests/tests/Package/res/TestPackage1
new file mode 100755 (executable)
index 0000000..5653ff4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Package/res/TestPackage1 differ
diff --git a/mobile/tct-behavior-tests/tests/Package/res/TestPackage2 b/mobile/tct-behavior-tests/tests/Package/res/TestPackage2
new file mode 100755 (executable)
index 0000000..5358823
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Package/res/TestPackage2 differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/index.html b/mobile/tct-behavior-tests/tests/PackageManagement/index.html
new file mode 100755 (executable)
index 0000000..ab02b41
--- /dev/null
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test PKManagement installation</li>
+                <li id="Sample-widget1">
+                    <a href="javascript:goToApp('res/Sample-widget1.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-app-installed</h2>
+                    </a>
+                </li>
+                <li id="Sample-widget2">
+                    <a href="javascript:goToApp('res/Sample-widget2.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-powerfailure-install</h2>
+                    </a>
+                </li>
+               <!-- <li id="Sample-widget3">
+                    <a href="javascript:goToApp('res/Sample-widget3.html')" data-transition="slide" style="">
+                        <h2>webapp-filebrowser-install</h2>
+                    </a>
+                </li> -->
+                <li id="Sample-widget4">
+                    <a href="javascript:goToApp('res/Sample-widget4.html')" data-transition="slide" style="">
+                        <h2>webapp-get-information</h2>
+                    </a>
+                </li>
+                <li id="widget-version-1">
+                    <a href="javascript:goToApp('res/widget-version-1.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-offlineupdate-closeupdate</h2>
+                    </a>
+                </li>
+               <!-- <li id="npruntime-all-on-arm">
+                    <a href="javascript:goToApp('res/npruntime-all-on-arm.html')" data-transition="slide" style="">
+                        <h2>npruntime-all-on-arm</h2>
+                    </a>
+                </li>
+                <li id="npruntime-arm-on-x86">
+                    <a href="javascript:goToApp('res/npruntime-arm-on-x86.html')" data-transition="slide" style="">
+                        <h2>npruntime-arm-on-x86</h2>
+                    </a>
+                </li> -->
+                <li data-role="list-divider" role="heading">Clean all the Installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li> 
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of installing, updating and uninstalling web applications.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT can manage web applications by installing, updating and uninstalling web applications.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/js/main.js b/mobile/tct-behavior-tests/tests/PackageManagement/js/main.js
new file mode 100755 (executable)
index 0000000..a6ad22f
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt1wvt006',
+                    'wrt1smt007',
+                    'wrt1smt008',
+                    //'wrt1smt009',
+                    'wrt1smt010'
+                    //'UZmPMhuMeO',
+                    //'ZkMSjQuYt8'
+);
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/js/tests.js b/mobile/tct-behavior-tests/tests/PackageManagement/js/tests.js
new file mode 100755 (executable)
index 0000000..81f60de
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var update_wgt = new Array('widget-version-1');
+var nolaunch_wgt = new Array('Sample-widget3','Sample-widget4');
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install("install");
+    });
+    if(jQuery.inArray(wgt_name, update_wgt) != -1){
+        $("#launch").bind("vclick", function() {
+            packagePre("widget-version-1-1");
+            install("update");
+        });
+    } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(type) {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, update_wgt) != -1 && type == "update"){
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').removeClass("ui-disabled");
+            } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/PackageManagement/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html
new file mode 100755 (executable)
index 0000000..41b7a67
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget1"/>
+                <input type="hidden" id="app_id"  value="wrt1smt007.Samplewidget1"/>
+                <input type="hidden" id="package_id" value="wrt1smt007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is a widget named "Sample-widget1" on the device screen after the widget installed.</li>
+              <li>When click the "Launch" button, a "PASS" is displayed.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt
new file mode 100755 (executable)
index 0000000..0311573
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html
new file mode 100755 (executable)
index 0000000..f34b3f1
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget2"/>
+                <input type="hidden" id="app_id"  value="wrt1smt008.Samplewidget2"/>
+                <input type="hidden" id="package_id" value="wrt1smt008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the "Sample-widget2" app is not installed.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget, during the installing power off(e.g,takre off battery) and power on the device, and make sure the "Sample-widget2" is not installed.</li>
+              <li>Re-open the "pkmanagement-powerfailure-install" test.</li>
+              <li>Click the "Install" button to install the widget again.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation of "Sample-widget2" app can run correctly.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt
new file mode 100755 (executable)
index 0000000..5f7cea8
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html
new file mode 100755 (executable)
index 0000000..63e64d3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget3"/>
+                <input type="hidden" id="app_id"  value="wrt1smt009.Samplewidget3"/>
+                <input type="hidden" id="package_id" value="wrt1smt009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Copy the "Sample-widget3.wgt" to "Downloads" folder. For example, use the command 1: admin user: "sdb pull /opt/usr/globalapps/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt", local user: "sdb pull /home/{user}/apps_rw/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt" command 2: admin user: "sdb push Sample-widget3.wgt /opt/usr/share/Downloads/", local user: "sdb push Sample-widget3.wgt /home/{user}/share/Downloads/"</li>
+              <li>Open the file browser and select "Sample-widget3" webapp to install.</li>
+              <li>Click the "Uninstall" button to uninstall the widget "Sample-widget3".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Sample-widget3" webapp is installed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt
new file mode 100755 (executable)
index 0000000..669d4df
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html
new file mode 100755 (executable)
index 0000000..0068432
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget4">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget4"/>
+                <input type="hidden" id="app_id"  value="wrt1smt010.Samplewidget4"/>
+                <input type="hidden" id="package_id" value="wrt1smt010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Check the widget details information with command: "wrt-launcher -l" in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the command line displays: "Name: Sample-widget4", "App ID: wrt1smt010.Samplewidget4".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt
new file mode 100755 (executable)
index 0000000..ee62750
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html
new file mode 100755 (executable)
index 0000000..c308508
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="npruntime-all-on-arm">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="npruntime-all-on-arm"/>
+                <input type="hidden" id="app_id"  value="ZkMSjQuYt8.npruntimeAllOnArm"/>
+                <input type="hidden" id="package_id" value="ZkMSjQuYt8"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected result:</p>
+            <ul>
+              <li>If this is a ARM device, test passes if Javascript and NPRuntime multiplication time displayed above the button "Get the multiplication time". </li>
+              <li>If this is a X86 device, test passes if a popup displayed on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt
new file mode 100755 (executable)
index 0000000..8fc8594
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html
new file mode 100755 (executable)
index 0000000..e5fecfa
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="npruntime-arm-on-x86">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="npruntime-arm-on-x86"/>
+                <input type="hidden" id="app_id"  value="UZmPMhuMeO.npruntimeArmOnX86"/>
+                <input type="hidden" id="package_id" value="UZmPMhuMeO"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected result:</p>
+            <ul>
+              <li>If this is a X86 device, test passes if Javascript and NPRuntime multiplication time displayed above the button "Get the multiplication time". </li>
+              <li>If this is a ARM device, test passes if a popup displayed on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt
new file mode 100755 (executable)
index 0000000..bb2a160
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt
new file mode 100755 (executable)
index 0000000..65ecc6f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html b/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html
new file mode 100755 (executable)
index 0000000..9496f73
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="widget-version-1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="widget-version-1"/>
+                <input type="hidden" id="app_id"  value="wrt1wvt006.widgetversion"/>
+                <input type="hidden" id="package_id" value="wrt1wvt006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Update</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Update" button to update the widget, during the updating close the terminal.</li>
+              <li>Re-open this TC, click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is <strong>no error message</strong>.</li>
+              <li>There is <strong>no system crash</strong>.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt b/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt
new file mode 100755 (executable)
index 0000000..afff886
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/PageVisibility/index.html b/mobile/tct-behavior-tests/tests/PageVisibility/index.html
new file mode 100755 (executable)
index 0000000..f1a725c
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Ma, Yue <yuex.ma@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div data-role="collapsible-set" data-inset="false" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-theme="b">
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList1">Screen-lock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="lock"></li>
+                    </ul>
+                </div>
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList2">Screen-unlock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="unlock"></li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device is able to handle pageVisible event when lock and unlock the screen by gesture.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen lock and unlock information displayed correctly on screen.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/PageVisibility/js/main.js b/mobile/tct-behavior-tests/tests/PageVisibility/js/main.js
new file mode 100755 (executable)
index 0000000..e1eb13f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2013 Intel Corporation.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of works must retain the original copyright notice, this list
+ of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the original copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this work without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Authors:
+   Ma,Yue <yuex.ma@intel.com>
+
+*/
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    document.addEventListener(visibilitychange, notification);
+    DisablePassButton();
+});
+
+function notification() {
+    EnablePassButton();
+    var doc_hidden = document.hidden | document.webkitHidden | document.oHidden | document.mozHidden | document.msHidden;
+    var visibilitystate = document.visibilityState || document.webkitVisibilityState || document.oVisibilityState || document.mozVisibilityState || document.msVisibilityState;
+    var hidden = doc_hidden == 0 ? false : true;
+    var date = new Date().toString().substr(4, 20);
+    if(visibilitystate === "hidden" && hidden) {
+        $("#lock").html(function(i, origText) {return origText  + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    } else if (visibilitystate === "visible" && !hidden) {
+         $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    }else {
+        $("#lock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+        $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+    }
+}
diff --git a/mobile/tct-behavior-tests/tests/Power/NOTICE b/mobile/tct-behavior-tests/tests/Power/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/Power/index.html b/mobile/tct-behavior-tests/tests/Power/index.html
new file mode 100755 (executable)
index 0000000..99e11b6
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="list">
+            <li data-role="list-divider">Request Screen</li>
+            <li>
+                <input type="button" value="Request SCREEN_DIM" onclick="request('SCREEN_DIM');" />
+            </li>
+            <li>
+                <input type="button" value="Request SCREEN_NORMAL" onclick="request('SCREEN_NORMAL');" />
+            </li>
+            <li data-role="list-divider">Release Screen</li>
+            <li>
+                <input type="button" value="Release SCREEN" onclick="release();" />
+            </li>
+            <li data-role="list-divider">Turn Off</li>
+            <li>
+                <input type="button" value="Turn SCREEN_OFF" onclick="turnScreenOff();" />
+            </li>
+        </ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the screen status is successfully changed</p>
+            <p>(Note: Response time varies depends on the system setting)</p><br>
+            <p>* Setting -> Display -> Backlight time : 15 Seconds<p>
+            <p>1. Click Request SCREEN_DIM(After 15 second) : Check if the screen is dim. But Screen doesn't turn off</p>
+            <p>2. Click Request SCREEN_NORMAL(After 15 second) : Check if the screen doesn't dim and turn off</p>
+            <p>3. Click Release SCREEN(After 15 second) : Check the screen resource release(Screen is dim and turn off)</p>
+            <p>4. Click Turn SCREEN_OFF and check the screen is off immediately</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Power/js/main.js b/mobile/tct-behavior-tests/tests/Power/js/main.js
new file mode 100755 (executable)
index 0000000..6494db4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+//request
+function request(screenState){
+    tizen.power.release("SCREEN");
+    try{
+        alert(screenState);
+        tizen.power.request("SCREEN", screenState);
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+// release
+function release(){
+    try{
+        alert("SCREEN_RELEASE");
+        tizen.power.release("SCREEN");
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+//turnScreenOff
+function turnScreenOff(){
+    try{
+        alert("SCREEN_OFF");
+        tizen.power.turnScreenOff();
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
diff --git a/mobile/tct-behavior-tests/tests/Push/NOTICE b/mobile/tct-behavior-tests/tests/Push/NOTICE
new file mode 100755 (executable)
index 0000000..5e09644
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPush :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/mobile/tct-behavior-tests/tests/Push/index.html b/mobile/tct-behavior-tests/tests/Push/index.html
new file mode 100755 (executable)
index 0000000..9b642b4
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">PushClient(TestPush) Application Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">PushClient Install</div>
+                </li>
+                <li data-role="list-divider">PushClient(TestPush) Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch">PushClient Launch</div>
+                </li>
+                <li data-role="list-divider">Push Message</li>
+                <li>
+                    <input type="text" id="message" value="Behavior_Test_Push"/>
+                </li>
+                <li data-role="list-divider">Send Message</li>
+                <li>
+                    <div data-role="button" id="push">Push</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if PushClient gets messages from the push server</p>
+                <p>A network connection capable of accessing the Internet MUST be established </p><br>
+                <p>1. Install and launch PushClient(TestPush) Application</p>
+                <p>   (Make sure the device is online and the applications shows registration success popup.)
+                <p>2. Press Hide in the PushClient</p>
+                <p>3. Back to this page and fill in a push message and click Push button</p>
+                <p>4. Check PushClient becomes foreground showing PASS text</p>
+                <p>5. Exit PushClient</p>
+                <p>6. Back to this page and fill in another message and click Push button</p>
+                <p>7. Check a notification pops up and PushClient launchs with PASS text when the notification is clicked</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Push/js/main.js b/mobile/tct-behavior-tests/tests/Push/js/main.js
new file mode 100755 (executable)
index 0000000..bb73af7
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var installUrl;
+var reg;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#launch").removeClass("ui-disabled");
+        $("#push").removeClass("ui-disabled");
+        return false;
+    });
+    $("#launch").bind("vclick", function() {
+        launch();
+        return false;
+    });
+    $("#push").bind("vclick", function() {
+        regID();
+        return false;
+    });
+    $("#launch").addClass("ui-disabled");
+    $("#push").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    pushPre();
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">PushClient Install</div>';
+                $("#install").addClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpush0.PushClient", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function regID() {
+    var documentsDir;
+    var flag = false;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "PushRegId.txt")
+            {
+                flag = true;
+                files[i].readAsText(
+                    function(str){
+                        reg = str;
+                        send();
+                        }, function(e){
+                            alert("Error " + e.message);
+                        }, "UTF-8"
+                );
+                break;
+            }
+            else
+                flag = false;
+        }
+        if(flag == false)
+            alert("Not found Registration ID.\nPlease TestPush(PushClient) app install and launch or Check network connection.");
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        "documents",
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkNum(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function send() {
+    var appId = "bhvtcpush0";
+    var msg = $("#message").val();
+    var sec = "27A91C190007B2E7987627A9392C6291";
+    var h = new Date().getHours();
+    var m = new Date().getMinutes();
+    var s = new Date().getSeconds();
+    h = checkNum(h);
+    m = checkNum(m);
+    s = checkNum(s);
+
+    if(msg == "")
+    {
+        alert("Message is empty");
+    }
+    else if(reg == "")
+    {
+        alert("Registration ID is empty")
+    }
+    else
+    {
+        var request = new XMLHttpRequest();
+        var data = {"regID":reg, "requestID":"000001", "message":"action=ALERT&alertMessage="+msg, "appData":msg+"("+h+":"+m+":"+s+")"};
+        var regID = reg.substring(0, 2);
+        switch(regID)
+        {
+        case "00":
+            request.open("POST", "https://useast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "01":
+            request.open("POST", "https://uswest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "02":
+            request.open("POST", "https://apsoutheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "03":
+            request.open("POST", "https://euwest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "04":
+            request.open("POST", "https://apnortheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "05":
+            request.open("POST", "https://apkorea.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "06":
+            request.open("POST", "https://apchina.push.samsungosp.com.cn:8088/spp/pns/api/push", true);
+            break;
+        case "7c":
+            request.open("POST", "https://175.41.248.50:8088/spp/pns/api/push", true);
+        }
+        request.setRequestHeader("Content-Type", "application/json");
+        request.setRequestHeader("appID", appId);
+        request.setRequestHeader("appSecret", sec);
+        request.onreadystatechange = function() {
+            if (request.readyState == 4 && request.status == 200) {
+                console.log(request.responseText);
+                alert("Push Success");
+            }
+        };
+        request.send(JSON.stringify(data));
+    }
+}
+
+function pushPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPush.wgt",
+                    true,
+                    function() {
+                        console.log("TestPush Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Push/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/Push/res/TestPush b/mobile/tct-behavior-tests/tests/Push/res/TestPush
new file mode 100755 (executable)
index 0000000..220a81e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Push/res/TestPush differ
diff --git a/mobile/tct-behavior-tests/tests/SVGTransformation/index.html b/mobile/tct-behavior-tests/tests/SVGTransformation/index.html
new file mode 100755 (executable)
index 0000000..c9bcd2b
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <style>
+        /* Test Display Box */
+        .display_box {
+            width: 100%;
+            border: 1px solid #000;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <svg width="330" height="400" class="display_box">
+        <circle cx="100" cy="50" r="20" fill="blue">
+          <animateTransform attributeName='transform' attributeType='XML' type='rotate' from='180 170 200' to='-360 100 50' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='scale' from='1' to='2' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='skewX' by="30" dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+        </circle>
+      </svg>
+      <p><a href="javascript: document.location.reload();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the blue circle could be transferred to ellipse, and rotate along with elliptical patch at the same time.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and rotate function well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Security/css/style.css b/mobile/tct-behavior-tests/tests/Security/css/style.css
new file mode 100755 (executable)
index 0000000..9148460
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+#content ul ul {
+    padding: 5px 15px;
+}
+
+.containing-element .ui-slider-switch { width: 8em }
+
+/*over write*/
+ul .ui-corner-all {
+    -moz-border-radius: 0 /*{global-radii-blocks}*/;
+    -webkit-border-radius: 0 /*{global-radii-blocks}*/;
+    border-radius: 0 /*{global-radii-blocks}*/;
+}
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/Security/index.html b/mobile/tct-behavior-tests/tests/Security/index.html
new file mode 100755 (executable)
index 0000000..e3eec1a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Shared Media Directory</li>
+                <li><div data-role="button" id="openMediaBtn">If local user, open /home/{user}/apps_rw/share directory. If admin user, open /opt/usr/globalapps/share directory.</div></li>
+                <li><div data-role="button" id="createFileBtn">Create file</div></li>
+                <li data-role="list-divider">File List</li>
+                <ul data-role="listview" id="media" data-inset="true" hidden="true"></ul>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies that (1) this applicaton is running by non-root ID and, (2) it is allowed to read and write files in the shared media directory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Get the "USER" info via cmdline "ps aux|awk 'NR==1;/tctbhtests\.TCTBehaviorTests/'" in console.</li>
+              <li>Open shared media directory.</li>
+              <li>Create and remove files in shared media directory.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "USRER" info is NOT root user.</li>
+              <li>There is <strong>no error message</strong> when click buttons under "Shared Media Directory".</li>
+              <li>Only new created files can be removed; opened files in step 2 cannot.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Security/js/main.js b/mobile/tct-behavior-tests/tests/Security/js/main.js
new file mode 100755 (executable)
index 0000000..1aaaabd
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+*/
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var SHARED_MEDIA_DIR = "file://" + RESOURCE_DIR,
+    MEDIA_ID = "#media";
+var count = 0, mediaDir;
+var gFiles = [], createdId = [];
+
+$(document).ready(function(){
+    DisablePassButton();
+    $('#createFileBtn').addClass("ui-disabled");
+
+    function onError(err) {
+        alert("Error: " + err.message);
+    }
+
+    function makeFileList(files, selector) {
+        var str = "";
+
+        for (var i = 0; i < files.length; i++) {
+            if (files[i].isDirectory == false) {
+                str += '<li id="'
+                    + files[i].name
+                    + '"><a href="#"><h4>'
+                    + files[i].name
+                    + '</h4></a><a href="'
+                    + 'javascript:deleteFile('
+                    + count
+                    + ')" data-icon="delete" data-theme="c">'
+                    + '</a></li>';
+                gFiles[count++] = files[i];
+            }
+        }
+        if (str) {
+            $(selector).append(str).trigger("create").listview("refresh");
+        }
+
+        $('#createFileBtn').removeClass("ui-disabled");
+        $('#openMediaBtn').addClass("ui-disabled");
+    }
+
+    function openDirectory(str, selector) {
+        try {
+            tizen.filesystem.resolve(str, function(dir) {
+                dir.listFiles(function(files) {
+                    $(MEDIA_ID).show();
+                    makeFileList(files, selector);
+                    mediaDir = dir;
+                    alert("Open Success");
+                }, function(err) {
+                    alert("Open Fail: " + err.message);
+                });
+            }, onError, "rw");
+        } catch (exc) {
+            alert("tizen.filesystem.resolve(" + str + ") exc: " + exc.message);
+        }
+    }
+
+    function createFile(dir, selector) {
+        if (!dir) {
+            alert("Create File Error: The directory can not be opened");
+            return;
+        }
+
+        try {
+            var newFile, str = "";
+            var time = new Date().getTime();
+            newFile = dir.createFile("newFile" + time);
+            str += '<li id="'
+                + newFile.name
+                + '"><a href="#"><h4>'
+                + newFile.name
+                + '</h4></a><a href="'
+                + 'javascript:deleteFile('
+                + count
+                + ')" data-icon="delete" data-theme="c">'
+                + '</a></li>';
+            createdId.push(count);
+            gFiles[count++] = newFile;
+            if (str) {
+                $(selector).append(str).trigger("create").listview("refresh");
+            }
+        } catch (exc) {
+            alert("Create File Error: " + exc.message);
+        }
+    }
+
+    $("#openMediaBtn").on("click",function() {
+        if (!mediaDir) {
+            openDirectory(SHARED_MEDIA_DIR, MEDIA_ID);
+        }
+    });
+    $("#createFileBtn").on("click",function() {
+        createFile(mediaDir, MEDIA_ID);
+        EnablePassButton();
+    });
+});
+
+function deleteFile(id) {
+    var dir, selector, index;
+
+    if (id == null) {
+        return;
+    }
+    //Only delete the file by user created.
+    index = createdId.indexOf(id);
+    if (index == -1) {
+        return;
+    }
+
+    try {
+        dir = mediaDir;
+        selector = MEDIA_ID;
+        dir.deleteFile(gFiles[Number(id)].fullPath, function() {
+            //Delete the id in createdId array.
+            createdId.splice(index, 1);
+            $("#" + gFiles[Number(id)].name).remove();
+            $(selector).trigger("create").listview("refresh");
+        }, function (err) {
+            alert("Error: " + err.message);
+        });
+    } catch (exc) {
+        alert("Delete File Error: " + exc.message);
+    }
+}
+
+function backAppsHome() {
+    createdId.forEach(function(id) {
+        deleteFile(id);
+    });
+    window.close();
+}
diff --git a/mobile/tct-behavior-tests/tests/Stability/index.html b/mobile/tct-behavior-tests/tests/Stability/index.html
new file mode 100755 (executable)
index 0000000..1f06df2
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test half memory</li>
+                <li id="test-half-memory">
+                    <a href="javascript:goToApp('res/test-half-memory.html')" data-transition="slide" style="">
+                        <h2>wrt-install-large-webapp</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test hd image</li>
+                <li id="test-hd-image">
+                    <a href="javascript:goToApp('res/test-hd-image.html')" data-transition="slide" style="">
+                        <h2>wrt-high-resolution-picture</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the stability of the device.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies the stability of the device. The device should not crash when install a large widget or display a high resolution picture.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the large widget installed successfully and high resolution picture displayed well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Stability/js/main.js b/mobile/tct-behavior-tests/tests/Stability/js/main.js
new file mode 100755 (executable)
index 0000000..212a512
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrttest003',
+                    'wrttest001');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "Stability";
+var RESULT_FILE_NAME = "tct-behavior-child.sta.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/Stability/js/tests.js b/mobile/tct-behavior-tests/tests/Stability/js/tests.js
new file mode 100755 (executable)
index 0000000..7087ca5
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('test-half-memory');
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    if(jQuery.inArray(wgt_name, install_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, install_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                if(jQuery.inArray(wgt_name, install_wgt) != -1){
+                    $('#uninstall').removeClass("ui-disabled");
+                } else {
+                    $('#launch').removeClass("ui-disabled");
+                }
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Stability/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.html b/mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.html
new file mode 100755 (executable)
index 0000000..164859f
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-half-memory">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-half-memory"/>
+                <input type="hidden" id="app_id"  value="wrttest003.testhalfmemory"/>
+                <input type="hidden" id="package_id" value="wrttest003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the free storage is more than half memory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Change the "test-half-memory.wgt".</li>
+              <ol type="a">
+                <li>Open the folder of "test-half-memory"(suppose you have the "test-half-memory.wgt" or you can find it in the behavior rpm, unzip the wgt as "test-half-memory").</li>
+                <li>Push a file that the size is larger than half memory into the folder and rename the file as "zipzip.png".</li>
+                <li>Use the command :"zip -rq ../test-half-memory.wgt *" to create a "test-half-memory.wgt".</li>
+                <li>Push the created widget to device with the command: admin user: "sdb push 'path'/test-half-memory.wgt /opt/usr/globalapps/tctbhtests/res/wgt/tests/Stability/res/", local user: "sdb push 'path'/test-half-memory.wgt /home/{user}/apps_rw/tctbhtests/res/wgt/tests/Stability/res/".</li>
+              </ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation is successful.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt b/mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt
new file mode 100755 (executable)
index 0000000..92a1a65
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.html b/mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.html
new file mode 100755 (executable)
index 0000000..abd4326
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-hd-image">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-hd-image"/>
+                <input type="hidden" id="app_id"  value="wrttest001.testhdimage"/>
+                <input type="hidden" id="package_id" value="wrttest001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the image display normally.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt b/mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt
new file mode 100755 (executable)
index 0000000..6668469
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/SystemInfo/NOTICE b/mobile/tct-behavior-tests/tests/SystemInfo/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/SystemInfo/index.html b/mobile/tct-behavior-tests/tests/SystemInfo/index.html
new file mode 100755 (executable)
index 0000000..31337df
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="info-list1"></ul>
+        <ul data-role="listview" id="info-list2"></ul>
+        <ul data-role="listview" id="info-list3"></ul>
+        <ul data-role="listview" id="info-list4"></ul>
+        <ul data-role="listview" id="info-list5"></ul>
+        <ul data-role="listview" id="info-list6"></ul>
+        <ul data-role="listview" id="info-list7"></ul>
+        <ul data-role="listview" id="info-list8"></ul>
+        <ul data-role="listview" id="info-list9"></ul>
+        <ul data-role="listview" id="info-list10"></ul>
+        <ul data-role="listview" id="info-list11"></ul>
+        <ul data-role="listview" id="info-list12"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if a SystemInfo reflects current device status</p><br>
+            <p>1. Check WiFi Network Status if it reflects the current device Wi-Fi status</p>
+            <p>2. Change device WiFi status and Check WiFi Network Status again</p>
+            <p>3. Check Device Orientation Status if it displays correct value that fits the current device position</p>
+            <p>4. Rotate the device per 90 degrees and check Device Orientation shows the correct status</p>
+            <p>5. Check Battery Status</p>
+            <p>6. Check the Brightness if it changes the current device brightness</p>
+            <p>7. Check the Resolution</p>
+            <p>8. Check the Dots per inch</p>
+            <p>9. Check the Physical size</p>
+            <p>10. Check the Storage Status</p>
+            <p>11. Check the CPU Status</p>
+            <p>12. Check the Build Status</p>
+            <p>13. Check the Locale Status</p>
+            <p>14. Check the Network Status</p>
+            <p>15. Check the Cellular Network Status</p>
+            <p>16. Check the Sim Status</p>
+            <p>17. Check the Peripheral Status</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/SystemInfo/js/main.js b/mobile/tct-behavior-tests/tests/SystemInfo/js/main.js
new file mode 100755 (executable)
index 0000000..a9dc880
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var gInfo;
+var init = function () {
+    try {
+        tizen.systeminfo.addPropertyValueChangeListener("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BATTERY", onBatterySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("STORAGE", onStorageSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CPU", onCpuSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BUILD", onBuildSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("SIM", onSimSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    getPropertyValue();
+};
+
+function getPropertyValue() {
+    try {
+        tizen.systeminfo.getPropertyValue("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.getPropertyValue("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.getPropertyValue("BATTERY", onBatterySuccess);
+        tizen.systeminfo.getPropertyValue("STORAGE", onStorageSuccess);
+        tizen.systeminfo.getPropertyValue("CPU", onCpuSuccess);
+        tizen.systeminfo.getPropertyValue("BUILD", onBuildSuccess);
+        tizen.systeminfo.getPropertyValue("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.getPropertyValue("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("SIM", onSimSuccess);
+        tizen.systeminfo.getPropertyValue("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function make1lineListItem(value) {
+    return '<li>' + value + '</li>';
+}
+
+function makeDividerListItem(value) {
+    return '<li data-role="list-divider">' + value + '</li>';
+}
+
+function onWifiNetworkSuccess(wifi) {
+    gInfo = makeDividerListItem("WIFI_NETWORK Status")
+            + make1lineListItem("Stauts : " + wifi.status)
+            + make1lineListItem("SSID : " + wifi.ssid)
+            + make1lineListItem("IPAddress : " + wifi.ipAddress)
+            + make1lineListItem("IPv6Address : " + wifi.ipv6Address)
+            + make1lineListItem("SignalStrength : " + wifi.signalStrength);
+    $("#info-list1").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDeviceOrientationSuccess(orientation) {
+    gInfo = makeDividerListItem("DEVICE_ORIENTATION Status")
+            + make1lineListItem("Status : " + orientation.status)
+            + make1lineListItem("AutoRotation : " + (orientation.isAutoRotation == true ? "Yes" : "No"));
+    $("#info-list2").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDisplaySuccess(display) {
+    gInfo = makeDividerListItem("DISPLAY Status")
+            + make1lineListItem("Brightness : " + (display.brightness * 100) + "%")
+            + makeDividerListItem("Resolution")
+            + make1lineListItem("Width : " + display.resolutionWidth)
+            + make1lineListItem("Height : " + display.resolutionHeight)
+            + makeDividerListItem("Dots per inch")
+            + make1lineListItem("Horizontal : " + display.dotsPerInchWidth)
+            + make1lineListItem("Vertical : " + display.dotsPerInchHeight)
+            + makeDividerListItem("Physical size")
+            + make1lineListItem("Width : " + display.physicalWidth)
+            + make1lineListItem("Height : " + display.physicalHeight);
+    $("#info-list4").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBatterySuccess(battery) {
+    gInfo = makeDividerListItem("BATTERY Status")
+            + make1lineListItem("Level : " + (battery.level * 100) + "%")
+            + make1lineListItem("Charging : " + (battery.isCharging == true ? "Yes" : "No"));
+    $("#info-list3").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onStorageSuccess(storages) {
+    gInfo = makeDividerListItem("STORAGE Status")
+          + make1lineListItem("Storage : " + storages.units.length);
+    for (var i = 0; i < storages.units.length; i++) {
+        gInfo += makeDividerListItem("Type : " + storages.units[i].type)
+               + make1lineListItem("Capacity : " + Math.floor(storages.units[i].capacity / 1000000) + " MB")
+               + make1lineListItem("Available capacity : " + Math.floor(storages.units[i].availableCapacity / 1000000) + " MB")
+               + make1lineListItem("Removable : " + (storages.units[i].isRemovable == true ? "Yes" : "No"));
+    }
+    $("#info-list5").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCpuSuccess(cpu) {
+    gInfo = makeDividerListItem("CPU Status")
+            + make1lineListItem("Load : " + cpu.load);
+    $("#info-list6").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBuildSuccess(build) {
+    gInfo = makeDividerListItem("BUILD Status")
+            + make1lineListItem("Model : " + build.model)
+            + make1lineListItem("Manufacturer : " + build.manufacturer)
+            + make1lineListItem("BuildVersion : " + build.buildVersion);
+    $("#info-list7").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onLocaleSuccess(locale) {
+    gInfo = makeDividerListItem("LOCALE Status")
+            + make1lineListItem("Language : " + locale.language)
+            + make1lineListItem("Country : " + locale.country);
+    $("#info-list8").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onNetworkSuccess(network) {
+    gInfo = makeDividerListItem("NETWORK Status")
+            + make1lineListItem("NetworkType : " + network.networkType);
+    $("#info-list9").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCellularNetworkSuccess(cellular) {
+    gInfo = makeDividerListItem("CELLULAR_NETWORK Status")
+            + make1lineListItem("Status : " + cellular.status)
+            + make1lineListItem("Apn : " + cellular.apn)
+            + make1lineListItem("IPAddress : " + cellular.ipAddress)
+            + make1lineListItem("IPv6Address : " + cellular.ipv6Address)
+            + make1lineListItem("Mcc : " + cellular.mcc)
+            + make1lineListItem("Mnc : " + cellular.mnc)
+            + make1lineListItem("CellId : " + cellular.cellId)
+            + make1lineListItem("Lac : " + cellular.lac)
+            + make1lineListItem("IsRoaming : " + cellular.isRoaming)
+            + make1lineListItem("IsFlightMode : " + cellular.isFlightMode)
+            + make1lineListItem("IMEI : " + cellular.imei);
+    $("#info-list10").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onSimSuccess(sim) {
+    gInfo = makeDividerListItem("SIM Status")
+            + make1lineListItem("State : " + sim.state)
+            + make1lineListItem("OperatorName : " + sim.operatorName)
+            + make1lineListItem("Msisdn : " + sim.msisdn)
+            + make1lineListItem("Iccid : " + sim.iccid)
+            + make1lineListItem("Mcc : " + sim.mcc)
+            + make1lineListItem("Mnc : " + sim.mnc)
+            + make1lineListItem("Msin : " + sim.msin)
+            + make1lineListItem("Spn : " + sim.spn);
+    $("#info-list11").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onPeripheralSuccess(peripheral) {
+    gInfo = makeDividerListItem("PERIPHERAL Status")
+            + make1lineListItem("IsVideoOutputOn : " + peripheral.isVideoOutputOn);
+    $("#info-list12").html(gInfo).trigger("create").listview("refresh");
+}
+
+$(document).bind("pageinit", init);
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE b/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html b/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html
new file mode 100755 (executable)
index 0000000..d01d417
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set Call Ringtone</li>
+            </ul>
+            <ul data-role="listview" id="ringtone"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get Call Ringtone</li>
+                <li><div data-role="button" id="tone">Get Ringtone & Play Sound</div></li>
+            </ul>
+            <audio data-controls="true" style="width:100%;" id="MyAudio"></audio>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the ringtone is successfully changed</p><br>
+                <p>1. Click Set ringtone</p>
+                <p>2. Make a call to the device and check if the ringtone is successfully changed</p>
+                <p>3. Proceed the checking for other ringtones</p>
+                <p>Note. you may want to add more ringtone files in 'ringtones' virtual root</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js b/mobile/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js
new file mode 100755 (executable)
index 0000000..4056ca7
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#ringtone").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("INCOMING_CALL", path, onIncomingCallSetSuccess);
+        return false;
+    });
+    $("#tone").bind("vclick", function() {
+        getSystemProperty("INCOMING_CALL", onIncomingCallGetSuccess);
+        return false;
+    });
+    fileAudio();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onIncomingCallSetSuccess() {
+    alert("Change of INCOMING_CALL ringtone");
+}
+
+function onIncomingCallGetSuccess(value) {
+    alert("Sound(Get) path : " + value);
+    var audio = document.getElementById("MyAudio");
+    audio.src = value;
+    audio.type = "audio/*";
+    audio.play();
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function fileAudio() {
+    var documentsDir, length = 0, str = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                str += '<li data-url="' + Url + '">' + files[i].name + '</li>';
+                length++;
+                if(length >= 9)
+                    break;
+            }
+        }
+        if(length == 0)
+            alert("Not found Sound files\nPlease add sound files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#ringtone").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'ringtones',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingScreen/NOTICE b/mobile/tct-behavior-tests/tests/SystemSettingScreen/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingScreen/index.html b/mobile/tct-behavior-tests/tests/SystemSettingScreen/index.html
new file mode 100755 (executable)
index 0000000..080abd7
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#imageHS ul, li {list-style:none;}
+#imageLS ul, li {list-style:none;}
+#imageHS img {margin:5px; width:65px; height:70px}
+#imageLS img {margin:5px; width:65px; height:70px}
+</style>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set HomeScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageHS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Set LockScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageLS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get HomeScreen Image</li>
+                <li><div data-role="button" id="imageHG">HomeScreen Image</div></li>
+                <li data-role="list-divider">Get LockScreen Image</li>
+                <li><div data-role="button" id="imageLG">LockScreen Image</div></li>
+                <li data-role="list-divider">Canvas Image</li>
+            </ul>
+            <canvas id="canvas" style="width:100%; height:200px;"></canvas>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the home/lock screen image is successfully changed</p><br>
+                <p>1. Click Home/LockScreen Image</p>
+                <p>2. Select an image for the home/lock screen background</p>
+                <p>3. Check if your selection is set as a home/lock screen background with the naked eye</p>
+                <p>4. Click HomeScreen Image and LockScreen Image to verify the background images are retrieved.</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/SystemSettingScreen/js/main.js b/mobile/tct-behavior-tests/tests/SystemSettingScreen/js/main.js
new file mode 100755 (executable)
index 0000000..f56c268
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#imageHS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("HOME_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageLS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("LOCK_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageHG").bind("vclick", function() {
+        getSystemProperty("HOME_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    $("#imageLG").bind("vclick", function() {
+        getSystemProperty("LOCK_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    fileImage();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onScreenSetSuccess() {
+    alert("Change of SCREEN image");
+}
+
+function onScreenGetSuccess(value) {
+    alert("Image(Get) path : " + value);
+    var canvas = document.getElementById("canvas");
+    var cx = canvas.getContext("2d");
+    var image = new Image();
+    image.src = value;
+    cx.drawImage(image, 0, 0, 350, 200);
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function fileImage() {
+    var documentsDir, length = 0, str = "";
+    var len, last, ext;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                len = files[i].name.length;
+                last = files[i].name.lastIndexOf(".");
+                ext = files[i].name.substring(last, len);
+                if(ext == ".jpg" || ext == ".jpeg" || ext == ".bmp" || ext == ".png" || ext == ".gif")
+                {
+                    var Url = files[i].toURI();
+                    Url = Url.replace("file:///", "/");
+                    str += '<li data-url="' + Url + '"><img src="' + files[i].toURI() + '" alt="" />' + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + files[i].name + '</li>';
+                    length++;
+                    if(length >= 6)
+                        break;
+                }
+            }
+        }
+        if(length == 0)
+            alert("Not found Image files.\nPlease add image files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#imageHS").html(str).trigger("create").listview("refresh");
+        $("#imageLS").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'images',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/mobile/tct-behavior-tests/tests/Template/index.html b/mobile/tct-behavior-tests/tests/Template/index.html
new file mode 100755 (executable)
index 0000000..3f1f20c
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <div id="content">
+        Hello World !
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+            <p>Test Info</p>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Touch/css/style.css b/mobile/tct-behavior-tests/tests/Touch/css/style.css
new file mode 100755 (executable)
index 0000000..5417630
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+
+.scroll_eare {
+    background: #eee;
+    border: 1px solid #ccc;
+    height: 230px;
+    font-weight: bold;
+    text-shadow: 0 1px 0 #fff;
+    margin-bottom: 10px;
+    background-image: -webkit-gradient(linear,left top,left bottom,from( #fff ),to( #f1f1f1 ));
+    background-image: -webkit-linear-gradient( #fff,#f1f1f1 );
+    background-image: -moz-linear-gradient( #fff,#f1f1f1 );
+    background-image: -ms-linear-gradient( #fff,#f1f1f1 );
+    background-image: -o-linear-gradient( #fff,#f1f1f1 );
+    background-image: linear-gradient( #fff,#f1f1f1 );
+}
+
diff --git a/mobile/tct-behavior-tests/tests/Touch/img/btn_down.png b/mobile/tct-behavior-tests/tests/Touch/img/btn_down.png
new file mode 100755 (executable)
index 0000000..981d624
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Touch/img/btn_down.png differ
diff --git a/mobile/tct-behavior-tests/tests/Touch/img/btn_up.png b/mobile/tct-behavior-tests/tests/Touch/img/btn_up.png
new file mode 100755 (executable)
index 0000000..bc5f8b2
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Touch/img/btn_up.png differ
diff --git a/mobile/tct-behavior-tests/tests/Touch/img/scroll.png b/mobile/tct-behavior-tests/tests/Touch/img/scroll.png
new file mode 100755 (executable)
index 0000000..dc80c78
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/Touch/img/scroll.png differ
diff --git a/mobile/tct-behavior-tests/tests/Touch/index.html b/mobile/tct-behavior-tests/tests/Touch/index.html
new file mode 100755 (executable)
index 0000000..edbfe68
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .target {
+                left: 145px;
+                top:300px;
+                position: absolute;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <table id="tabletouch" cellpadding="5">
+                <tr>
+                    <td><img id="image1" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image2" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image3" src="img/btn_up.png" height="100" width="100" /></td>
+                </tr>
+            </table>
+            <p id="testresult">Touch info: no button touched</p>
+            <div id="scrollEare" class="scroll_eare">
+              <div id="scrollTarget" class="target"><img id="imageScroll" src="img/scroll.png" height="80" width="80" /></div>
+            </div>
+            <p class="ui-li-desc">* Drag this red button in above eare.</p>
+            <p id="errormessage"></p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device supports single touch, two fingers touch and three fingers touch(if it is supported) by clicking the blue buttons, and supports move touch by dragging the red button.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all the tips "one button touched, two buttons touched at one time, three buttons touched(if it is supported) at one time" show and the red button can be dragged.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Touch/js/main.js b/mobile/tct-behavior-tests/tests/Touch/js/main.js
new file mode 100755 (executable)
index 0000000..897c676
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+jQuery(document).ready(function() {
+    try {
+        DisablePassButton();
+
+        var scrollTarget = $("#scrollTarget")[0];
+        var multitouch_count = tizen.systeminfo.getCapability("http://tizen.org/feature/multi_point_touch.point_count");
+
+        var resultMessage =["one button touched", "two buttons touched at one time", "three buttons touched at one time"];
+        var current_touchCnt = 0;
+        var touchCnt_goal = 3;
+
+        function touchstartFunction(obj){
+           obj.src = "img/btn_down.png"; 
+           current_touchCnt++;
+           $("#testresult").html("Touch info: " + resultMessage[current_touchCnt-1]);
+            if(current_touchCnt >= touchCnt_goal){
+                EnablePassButton();
+            }
+        }
+
+        function touchendFunction(obj){
+            obj.src = "img/btn_up.png";
+            current_touchCnt--;
+        }
+
+        $("#image1").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image2").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image3").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+
+        $("#image1").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image2").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image3").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+
+        if(multitouch_count == 2){
+            step3 = true;
+            touchCnt_goal = 2;
+            $("#image3").remove();
+        }
+
+
+        //touchmove event
+        document.getElementById("scrollTarget").addEventListener('touchmove',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/btn_down.png";
+            var changedTouches = event.changedTouches;
+            if(changedTouches.item(0).clientX <= getLeft($("#scrollEare")[0])+40){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+"px";
+            }else if(changedTouches.item(0).clientX >= getLeft($("#scrollEare")[0])+250){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+250 +"px";
+            }else{
+                scrollTarget.style.left = changedTouches.item(0).clientX-40 +"px";
+            }
+            if(changedTouches.item(0).clientY <= getTop($("#scrollEare")[0])+40){
+                scrollTarget.style.top =getTop($("#scrollEare")[0]) +"px";
+            } else if(changedTouches.item(0).clientY >= getTop($("#scrollEare")[0])+150){
+                scrollTarget.style.top =getTop($("#scrollEare")[0])+150 +"px";
+            } else{
+                scrollTarget.style.top = changedTouches.item(0).clientY-40 +"px";
+            }
+        }, false);
+
+        //touchend event
+        document.getElementById("scrollTarget").addEventListener('touchcancel',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/scroll.png";
+        }, false);
+
+        document.getElementById("scrollTarget").addEventListener('touchend',  function (event){
+            var image = $("#imageScroll")[0];
+            if(image.src.toString().indexOf("scroll.png") == -1){
+              $("#errormessage").html("touchcancel event can not be fired");
+            }
+        }, false);
+    } catch (err) {
+        jQuery("#testresult").html("Html Console:" + err.message);
+    }
+
+    function getTop(e){
+        var offset=e.offsetTop;
+        if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
+        return offset;
+    }
+
+    function getLeft(e){
+        var offset=e.offsetLeft;
+        if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
+        return offset;
+    }
+});
diff --git a/mobile/tct-behavior-tests/tests/UserAgentString/index.html b/mobile/tct-behavior-tests/tests/UserAgentString/index.html
new file mode 100755 (executable)
index 0000000..0ecab9e
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script>
+            $(document).ready(function(){
+                jQuery("#user-agent-string").text(navigator.userAgent);
+                var agent_string = navigator.userAgent;
+                var tizen_platform_ver = agent_string.substring(agent_string.indexOf("(")+1, agent_string.indexOf(")"));
+                var khtml = agent_string.substring(agent_string.lastIndexOf("(")+1, agent_string.lastIndexOf(")"));
+                agent_string = agent_string.replace("("+tizen_platform_ver+")","");
+                agent_string = agent_string.replace("("+khtml+")","");
+                agent_string = agent_string.replace("  ", " ");
+                agent_string = agent_string.replace("  ", " ");
+                var platform_ver_array = tizen_platform_ver.split(";");
+
+                if(platform_ver_array.length == 3){ // tizen
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text(platform_ver_array[2]);
+                } else if(platform_ver_array.length == 2){ // chrome
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text("N/A");
+                } else if(platform_ver_array.length == 4){ //firefox
+                    jQuery("#user-platform-ver").text(platform_ver_array[2]);
+                    jQuery("#user-model-string").text("N/A");
+                }
+
+                var agent_string_array = agent_string.split(" ");
+                if(agent_string_array.length == 6){ //chrome
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[4].substring(0, agent_string_array[4].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[4].substr(agent_string_array[4].indexOf("\/")+1));
+                } else if(agent_string_array.length == 5){ //tizen
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[2].substring(0, agent_string_array[2].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[2].substr(agent_string_array[2].indexOf("\/")+1));
+                }
+            });
+        </script>
+        <style type="text/css">
+            .d{
+                border: 1px solid #000;
+                width:100%;
+                height:280px;
+            }
+            .d li{
+                margin: 10px 5px;
+
+            }
+            #user-agent-string {
+               list-style : none;
+            }
+            .tips{
+                color: red;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="d">
+            <ul>
+              <li>User-Agent:</li>
+              <li id="user-agent-string"><span class="tips">Failed to get user agent string</span></li>
+              <li>PLATFORM_VER: <span id="user-platform-ver"></span></li>
+              <li>MODEL: <span id="user-model-string"></span></li>
+              <li>APPLE_WEBKIT_VER: <span id="user-apple-webkit-ver"></span></li>
+              <li>APP_NAME: <span id="user-app-name"></span></li>
+              <li>APP_VER: <span id="user-app-ver"></span></li>
+            </ul>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the user agent string follow correct format.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the user agent string reported by the Web View follow this format:</p>
+            <p>Mozilla/5.0 (Linux; Tizen PLATFORM_VER; MODEL) AppleWebKit/APPLE_WEBKIT_VER (KHTML, like Gecko) APP_NAME/APP_VER Mobile Safari/APPLE_WEBKIT_VER</p>
+            <ul>
+              <li>The value of the PLATFORM_VER string MUST be the platform version of the device.</li>
+              <li>The value of the MODEL string SHOULD be the same as the name of the device.</li>
+              <li>The value of the APPLE_WEBKIT_VER string MUST be "537.3".</li>
+              <li>The value of the APP_NAME string SHOULD be the same as the name of the application.</li>
+              <li>The value of the APP_VER string SHOULD be the same as the version of the application.</li>
+              <li>Device implementations MAY omit the word “Mobile” from the user agent string.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Vibration/css/style.css b/mobile/tct-behavior-tests/tests/Vibration/css/style.css
new file mode 100755 (executable)
index 0000000..a4fdc9d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 10px 0px;
+   width: 100%;
+}
+
+.containing-element {
+    padding-top: 20px;
+}
+
+.containing-element .ui-slider-switch { width: 100% }
+
+.containing-element .ui-controlgroup-controls { width: 100% }
+
+.ui-radio { width: 50% }
diff --git a/mobile/tct-behavior-tests/tests/Vibration/index.html b/mobile/tct-behavior-tests/tests/Vibration/index.html
new file mode 100755 (executable)
index 0000000..f5581eb
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+        <style>
+            .vibration {
+                text-align: left
+            }
+            .opt {
+                text-align: left
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="containing-element">
+            <label for="slider-1" class="vibration">Vibration Time(s)</label>
+            <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="0.50" max="3" step="0.10" value="1" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Periods(s)</label>
+            <input type="range" name="slider-2" id="slider-2" data-highlight="true" min="0.10" max="2" step="0.10" value="0.50" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Number</label>
+            <input type="range" name="slider-3" id="slider-3" data-highlight="true" min="1" max="20" value="2" data-show-value="true" class="hideButton">
+            <p><a href="javascript:startVibration()" id="start" data-role="button" class="opt">Start Vibration</a></p>
+            <a href="javascript:stopVibration()" id="stop" data-role="button" class="opt">Stop Vibration</a>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the vibration is able to adjust vibration time from 500ms to 3000ms, vibration period from 100ms to 2000ms, and vibration number from 1 to 100. E.g, if vibration time is 1000ms, vibration period is 2000ms and vibration number is 3, then the test device vibrates 3 times in 6 seconds, and vibrates 1 second a time.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the vibration functions work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Vibration/js/COPYING b/mobile/tct-behavior-tests/tests/Vibration/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/mobile/tct-behavior-tests/tests/Vibration/js/main.js b/mobile/tct-behavior-tests/tests/Vibration/js/main.js
new file mode 100755 (executable)
index 0000000..5fa753a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var vibration_time, vibration_periods, vibration_number;
+
+jQuery(document).ready(function() {
+    DisablePassButton();
+    // style setting
+    $(':jqmData(role=content)').css("text-align", "center");
+    $(':jqmData(role=content)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 30px');
+
+    vibration_time = Number($("#slider-1").val())*1000;
+    vibration_periods = Number($("#slider-2").val())*1000;
+    vibration_number = $("#slider-3").val();
+});
+
+function startVibration() {
+    $("#start").addClass("ui-disabled");
+    var time_value=(Number(vibration_time)+Number(vibration_periods)) * Number(vibration_number);
+    setTimeout(function(){
+        $("#start").removeClass("ui-disabled");}, time_value);
+    var pattern = [];
+    for(var i=0; i<2*vibration_number ;i++){
+       if(i%2==0){
+           pattern.push(vibration_time-0);
+       } else {
+           pattern.push(vibration_periods-0);
+       }
+    }
+    navigator.vibrate(pattern);
+    EnablePassButton();
+}
+
+function stopVibration() {
+    navigator.vibrate(0);
+    $("#start").removeClass("ui-disabled");
+}
diff --git a/mobile/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/VideoTrack/index.html b/mobile/tct-behavior-tests/tests/VideoTrack/index.html
new file mode 100755 (executable)
index 0000000..b887b97
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div class="containing-element">
+        <p>Click Play</p>
+        </br>
+        <p>To pass if "Pass" displays on screen</p>
+        <video controls width="300" height="176">
+          <source src="../../res/media/movie_5.mp4" type="video/mp4">
+          <track kind="subtitles" srclang="en" src="../../res/media/demo_sub.vtt" default>
+        </video>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the video track attribute works.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the video sub title dispalys at the bottom of video screen.</p>
+      </font>
+    </div>
+   </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/VideoTrack/js/COPYING b/mobile/tct-behavior-tests/tests/VideoTrack/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/mobile/tct-behavior-tests/tests/VideoTrack/js/slider.tooltip.js b/mobile/tct-behavior-tests/tests/VideoTrack/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/mobile/tct-behavior-tests/tests/Viewport/index.html b/mobile/tct-behavior-tests/tests/Viewport/index.html
new file mode 100755 (executable)
index 0000000..a145b57
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider">device-height & device-width</li>
+        <li><div><a data-role="button" href="test/device.html" data-ajax="false">Test device-height and device-width</a></div></li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">enable scale & disable scale</li>
+        <li><div><a data-role="button" href="test/user-scalable.html" data-ajax="false">Test enable scale and disable scale</a></div></li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">maximum-scale & minimum-scale</li>
+        <li><div><a data-role="button" href="test/scale.html" data-ajax="false">Test max scale and min scale</a></div></li>
+      </ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionalities of viewport. Tests the functionality of getting screen height and width, enabling or disabling screen saleable to allow or disallow zoom in/out screen, sliding the screen by figure.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points function well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Viewport/test/device.html b/mobile/tct-behavior-tests/tests/Viewport/test/device.html
new file mode 100755 (executable)
index 0000000..0b6a737
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 100%;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+           var div = document.createElement("div");
+          var pixel_ratio=1;
+           var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1440,4],[1600,2]];     
+           
+          if (deviceCapability=="MOBILE_FULL"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+        
+          
+            var height = property.resolutionHeight / pixel_ratio;
+            var width = property.resolutionWidth / pixel_ratio;
+            div.style.background = "green";
+            div.style.height = height + "px";
+            div.style.width = width + "px";
+            div.innerHTML = "<p>device-height : " + height + "</p><br>" +
+                            "<p>device-width : " + width + "</p><br>" +
+                            "<p>Test passes if the screen is full of green background</p><br>" +
+                            "<p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p>";
+            document.body.appendChild(div);
+
+        });
+    </script>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Viewport/test/scale.html b/mobile/tct-behavior-tests/tests/Viewport/test/scale.html
new file mode 100755 (executable)
index 0000000..5f4c03a
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height, minimum-scale=1.0, maximum-scale=2.0" />
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 160px;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+
+          var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1600,2],[1440,3.5]];   
+           
+          if (deviceCapability=="MOBILE_FULL"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+            var maximum_scale = 2;
+            var div = document.createElement("div");
+            var screenHight = property.resolutionHeight / pixel_ratio;
+            var screenWidth = property.resolutionWidth / pixel_ratio;
+            var divWidth = screenWidth / maximum_scale;
+            div.style.background = "green";
+            div.innerHTML = "<div style='background-color:green;float:left;width:" + divWidth + "px;height:"+screenHight+"px'><p>1.Zoom to minimum, the screen background is about half of green and half of yellow</p><br><p>2.Zoom to maximum, the screen is full of green; then slide to right, you can see yellow background</p><br><p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p></div>" + "<div style='background-color: yellow;float:left;width:"+divWidth+"px;height:" + screenHight + "px'></div>";
+            document.body.appendChild(div);
+        });
+    </script>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/Viewport/test/user-scalable.html b/mobile/tct-behavior-tests/tests/Viewport/test/user-scalable.html
new file mode 100755 (executable)
index 0000000..9b99395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=500, height=500, user-scalable=no">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: green;
+        }
+        div {
+            background-color: green;
+            width: 500px;
+            height: 500px;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 270px;
+        }
+    </style>
+    <script type="text/javascript">
+        function changeUerscalable(flag) {
+            if (flag == "enable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=yes";
+            } else if (flag == "disable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=no";
+            }
+        }
+    </script>
+  </head>
+  <body>
+    <div>
+      <p>EnableScale: you can scale the screen</p><br>
+      <p>DisableScale: you can not scale the screen</p><br>
+      <p>
+        <button onmousedown="javascript: window.history.back();" class="button">Complete Test</button><br>
+        <button onmousedown="changeUerscalable('enable')" class="button">Enable Scale</button><br>
+        <button onmousedown="changeUerscalable('disable')" class="button">Disable Scale</button><br>
+      </p>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/index.html b/mobile/tct-behavior-tests/tests/WRTSupport/index.html
new file mode 100755 (executable)
index 0000000..4abfb0e
--- /dev/null
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+        SRC-NJ Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test localization</li>
+                <li id="other-localization">
+                    <a href="javascript:goToApp('res/other-localization.html')" data-transition="slide" style="">
+                        <h2>other-localization</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test unload event</li>
+                <li id="lifecycle-unload-event">
+                    <a href="javascript:goToApp('res/lifecycle-unload-event.html')" data-transition="slide" style="">
+                        <h2>lifecycle-unload-event</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access policy</li>
+                <li id="other-widget-access-policy">
+                    <a href="javascript:goToApp('res/other-widget-access-policy.html')" data-transition="slide" style="">
+                        <h2>other-widget-access-policy</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test uri schemes</li>
+                <li id="other-uri-schemes">
+                    <a href="javascript:goToApp('res/other-uri-schemes.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto-groups">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-groups.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-groups</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto-tel">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-tel.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-tel</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test debug web inspector</li>
+                <li id="debug-web-inspector-ubuntu">
+                    <a href="javascript:goToApp('res/debug-web-inspector-ubuntu.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-ubuntu</h2>
+                    </a>
+                </li>
+                <li id="debug-web-inspector-windows7">
+                    <a href="javascript:goToApp('res/debug-web-inspector-windows7.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-windows7</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access multiple</li>
+                <li id="url-access-multi-all-ports">
+                    <a href="javascript:goToApp('res/url-access-multi-all-ports.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-all-ports</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https">
+                    <a href="javascript:goToApp('res/url-access-multi-https.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-all">
+                    <a href="javascript:goToApp('res/url-access-multi-https-all.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-all</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-subdomains">
+                    <a href="javascript:goToApp('res/url-access-multi-https-subdomains.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-subdomains</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test security permission and encryption</li>
+                <li id="security-policy">
+                    <a href="javascript:goToApp('res/security-policy.html')" data-transition="slide" style="">
+                        <h2>security-policy</h2>
+                    </a>
+                </li>
+                <li id="security-permission">
+                    <a href="javascript:goToApp('res/security-permission.html')" data-transition="slide" style="">
+                        <h2>security-permission</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_FullScreen_L_Req2.2">
+                    <a href="javascript:goToApp('res/TC_UPER_FullScreen_L_Req2.2.html')" data-transition="slide" style="">
+                        <h2>FullScreen_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_FullScreen_LP_Req2.2">
+                    <a href="javascript:goToApp('res/TC_UPER_FullScreen_LP_Req2.2.html')" data-transition="slide" style="">
+                        <h2>FullScreen_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="protection-encryption-check">
+                    <a href="javascript:goToApp('res/protection-encryption-check.html')" data-transition="slide" style="">
+                        <h2>protection-encryption-check</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of uri scheme support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support at least the following URI schemes: "sms://", "mmsto://", "mailto://", "&lt;mailto:&gt;" and support localization funxtionality.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/js/main.js b/mobile/tct-behavior-tests/tests/WRTSupport/js/main.js
new file mode 100755 (executable)
index 0000000..5eda10e
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+        SRC-NJ Weixia Fu <weixia12.fu@samsung.com>
+
+*/
+var allId=new Array('wrt3lue021',
+                    'wrt3olo022',
+                    'wrt3ous027',
+                    'wrt3owa028',
+                    'wrt5pec002',
+                    'wrt5pec120',
+                    'wrtsche005',
+                    'wrtsche007',
+                    'wrturla003',
+                    'wrturla004',
+                    'wrturla005',
+                    'wrturla006',
+                    'wrt5pec119',
+                    'FULL00010L',
+                    'FULL0000LP',
+                    'Zy38WGeo4H',
+                    'Zy39WGeoHP',
+                    'Zy40WGeo4L',
+                    'Zy41WGeoLP',
+                    'Zy44SGet4H',
+                    'Zy45SGetHP',
+                    'Qj5162RiTb',
+                    'UE52s9HrGz',
+                    'Zy81WNot4L',
+                    'Zy99WNotHP',
+                    'Zy79WNot4L',
+                    'Zyj599otLP');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.wrts.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/js/tests.js b/mobile/tct-behavior-tests/tests/WRTSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..c256e8d
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('debug-web-inspector-windows7','debug-web-inspector-ubuntu');
+
+$(document).ready(function(){
+    updateFooterButton();
+
+    wgt_name = $("#wgt_name").val();
+    if(jQuery.inArray(wgt_name, install_wgt) == -1) {
+        DisablePassButton();
+
+        app_id = $("#app_id").val();
+        package_id = $("#package_id").val();
+
+        $("#install").bind("vclick", function() {
+            install();
+        });
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+        $("#uninstall").bind("vclick", function() {
+            uninstall(package_id);
+        });
+        try {
+            tizen.package.setPackageInfoEventListener(packageEventCallback);
+        } catch (e) {
+            alert("Exception: " + e.message);
+        }
+
+        packagePre(wgt_name);
+        $('#uninstall').addClass("ui-disabled");
+        $('#launch').addClass("ui-disabled");
+
+        if(checkInstalledPkg(package_id)) {
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html
new file mode 100755 (executable)
index 0000000..fd415ff
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_FullScreen_LP_Req2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_FullScreen_LP_Req2.2"/>
+                <input type="hidden" id="app_id" value="FULL0000LP.UPERFULLSCREEN"/>
+                <input type="hidden" id="package_id" value="FULL0000LP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt
new file mode 100755 (executable)
index 0000000..f7cb27c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html
new file mode 100755 (executable)
index 0000000..f1de45e
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_FullScreen_L_Req2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_FullScreen_L_Req2.2"/>
+                <input type="hidden" id="app_id" value="FULL00010L.UPERFULLSCREEN"/>
+                <input type="hidden" id="package_id" value="FULL00010L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt
new file mode 100755 (executable)
index 0000000..f88e00c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..1bd1333
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy39WGeoHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy39WGeoHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..2793b0f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..f006e6f
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy38WGeo4H.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy38WGeo4H"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..cd9ccbc
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..ed7e2f9
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy41WGeoLP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy41WGeoLP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..15f52e3
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..77c9c5b
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy40WGeo4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy40WGeo4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..0a5802b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..fa89061
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy45SGetHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy45SGetHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..263ad84
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..4fc0dd1
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy44SGet4H.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy44SGet4H"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..be9e181
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..f1fdd8a
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="UE52s9HrGz.SelfCamera1"/>
+                <input type="hidden" id="package_id" value="UE52s9HrGz"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..d49e57c
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..dc037ca
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Qj5162RiTb.Selfcamera"/>
+                <input type="hidden" id="package_id" value="Qj5162RiTb"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..54fb120
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..e17ca88
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy99WNotHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy99WNotHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..bdabfad
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..1fce8eb
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy81WNot4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy81WNot4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..51d2e2b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..c2e52a5
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zyj599otLP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zyj599otLP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..03cbb7d
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..c374ec4
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy79WNot4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy79WNot4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..3c468fb
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html
new file mode 100755 (executable)
index 0000000..3df8be5
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-ubuntu">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-ubuntu"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(ubuntu) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish".</li>
+                                    <li>Connect test device to PC. Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(ubuntu).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html
new file mode 100755 (executable)
index 0000000..584c453
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-windows7">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-windows7"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(windows) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish". Connect test device to PC.</li>
+                                    <li>Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(windows).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html
new file mode 100755 (executable)
index 0000000..c70d346
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-unload-event">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-unload-event"/>
+                <input type="hidden" id="app_id"  value="wrt3lue021.LifecycleUnloadEvent"/>
+                <input type="hidden" id="package_id" value="wrt3lue021"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt
new file mode 100755 (executable)
index 0000000..2253054
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.html
new file mode 100755 (executable)
index 0000000..bd16fe2
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-localization">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-localization"/>
+                <input type="hidden" id="app_id"  value="wrt3olo022.OtherLocalization"/>
+                <input type="hidden" id="package_id" value="wrt3olo022"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the local language is English (check the installed widget's name on the device screen, it should be "english-ol").</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a dialog with "default description." popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt
new file mode 100755 (executable)
index 0000000..8575be4
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html
new file mode 100755 (executable)
index 0000000..4d00293
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-groups">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-groups"/>
+                <input type="hidden" id="app_id"  value="wrtsche005.otherurischemesmailtogroups"/>
+                <input type="hidden" id="package_id" value="wrtsche005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with its groups account is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt
new file mode 100755 (executable)
index 0000000..e72dd64
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html
new file mode 100755 (executable)
index 0000000..8f8319a
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-tel">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-tel"/>
+                <input type="hidden" id="app_id"  value="wrtsche007.otherurischemesmailtotel"/>
+                <input type="hidden" id="package_id" value="wrtsche007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The telephone call is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt
new file mode 100755 (executable)
index 0000000..5ffa641
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html
new file mode 100755 (executable)
index 0000000..8e4c77e
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto"/>
+                <input type="hidden" id="app_id"  value="wrt3ous125.OtherUriSchemesMailto"/>
+                <input type="hidden" id="package_id" value="wrt3ous125"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with your wrote contents(cc account, bcc account, body content, groups account, subject content) are displayed on the screen when click the "send email" button.</li>
+              <li>The telephone call is displayed on the screen when click the "call" button.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt
new file mode 100755 (executable)
index 0000000..de5168e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html
new file mode 100755 (executable)
index 0000000..2e437bb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes"/>
+                <input type="hidden" id="app_id"  value="wrt3ous027.otherurischemes"/>
+                <input type="hidden" id="package_id" value="wrt3ous027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the sms module, mms module and email module of the device are requested when click the links "sms", "mmsto" and "mailto".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt
new file mode 100755 (executable)
index 0000000..cff9345
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html
new file mode 100755 (executable)
index 0000000..1c65544
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-widget-access-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-widget-access-policy"/>
+                <input type="hidden" id="app_id"  value="wrt3owa028.otherwidgetaccesspolicy"/>
+                <input type="hidden" id="package_id" value="wrt3owa028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link of "www.baidu.com", it opens the home page of "www.baidu.com".</li>
+              <li>Close the widget and launch again, it cannot open the home page of "www.163.com".</li>
+              <li>Click the link of "www.163.com", it opens the home page of "www.163.com" in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt
new file mode 100755 (executable)
index 0000000..25575e0
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html
new file mode 100755 (executable)
index 0000000..58102e2
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="protection-encryption-check">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="protection-encryption-check"/>
+                <input type="hidden" id="app_id"  value="wrt5pec002.protectionencryptioncheck"/>
+                <input type="hidden" id="package_id" value="wrt5pec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.The resources(js, CSS, HTML files) of protection-encryption-check application is encrypted.<br>
+               For example: use the command: admin user: "vi /opt/usr/globalapps/wrt5pec002/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt5pec002/res/wgt/index.html" to show the content of "index.html" in terminal, the content of "index.html" is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if "js code ok" and a image which same as this widget icon are displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt
new file mode 100755 (executable)
index 0000000..cfc9ef0
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.html
new file mode 100755 (executable)
index 0000000..d46b176
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-permission">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-permission"/>
+                <input type="hidden" id="app_id"  value="wrt5pec120.securitypermission"/>
+                <input type="hidden" id="package_id" value="wrt5pec120"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt
new file mode 100755 (executable)
index 0000000..d7874ff
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.html
new file mode 100755 (executable)
index 0000000..93c90e5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-policy"/>
+                <input type="hidden" id="app_id"  value="wrt5pec119.securitypolicy"/>
+                <input type="hidden" id="package_id" value="wrt5pec119"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt
new file mode 100755 (executable)
index 0000000..3d95451
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html
new file mode 100755 (executable)
index 0000000..f36ef5a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all-ports">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all-ports"/>
+                <input type="hidden" id="app_id"  value="wrturla003.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrturla003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt
new file mode 100755 (executable)
index 0000000..71246f5
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html
new file mode 100755 (executable)
index 0000000..1ef1e73
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all"/>
+                <input type="hidden" id="app_id"  value="wrt3uam047.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrt3uam047"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt
new file mode 100755 (executable)
index 0000000..d617c00
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html
new file mode 100755 (executable)
index 0000000..2695f68
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-all"/>
+                <input type="hidden" id="app_id"  value="wrturla005.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt
new file mode 100755 (executable)
index 0000000..9445918
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html
new file mode 100755 (executable)
index 0000000..6c06ff2
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrturla006.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrturla006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/zh-hans/forums/general-support?langredirect=1". It is unable to open in this widget.</li>
+              <li>Click the link "https://accounts.google.com/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com/SignUp?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt
new file mode 100755 (executable)
index 0000000..01f41f0
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html
new file mode 100755 (executable)
index 0000000..5551395
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https"/>
+                <input type="hidden" id="app_id"  value="wrturla004.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt
new file mode 100755 (executable)
index 0000000..6b8e628
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html
new file mode 100755 (executable)
index 0000000..6e9f55c
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrt3uam048.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrt3uam048"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.baidu.com/gaoji/preferences.html". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com/cn". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt
new file mode 100755 (executable)
index 0000000..91f4c05
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html
new file mode 100755 (executable)
index 0000000..36c321a
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi"/>
+                <input type="hidden" id="app_id"  value="wrt3uam046.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrt3uam046"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It doesn't open in the widget, it opens in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt
new file mode 100755 (executable)
index 0000000..1bdb686
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/index.html b/mobile/tct-behavior-tests/tests/WRTUI/index.html
new file mode 100755 (executable)
index 0000000..ce2a691
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test multiple browsing</li>
+                <li id="multiple-browsing-context">
+                    <a href="javascript:goToApp('res/multiple-browsing-context.html')" data-transition="slide" style="">
+                        <h2>multiple-browsing-context</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-allow-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-not-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-not-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-not-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-not-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-not-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-not-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test rotation</li>
+                <li id="view-mode-maximized-rotation">
+                    <a href="javascript:goToApp('res/view-mode-maximized-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-maximized-rotation</h2>
+                    </a>
+                </li>
+                <li id="view-mode-fullscreen-rotation">
+                    <a href="javascript:goToApp('res/view-mode-fullscreen-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-fullscreen-rotation</h2>
+                    </a>
+                </li>
+                <li id="application-rotation-sensor-enable">
+                    <a href="javascript:goToApp('res/application-rotation-sensor-enable.html')" data-transition="slide" style="">
+                        <h2>application-rotation-sensor-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of view mode and multiple browsing context support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support two view modes: “maximized” and “fullscreen” of W3C 'view-mode' Media Feature.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/js/main.js b/mobile/tct-behavior-tests/tests/WRTUI/js/main.js
new file mode 100755 (executable)
index 0000000..57984c1
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+*/
+var allId=new Array('wrt4ars001',
+                    'wrt4vmm015',
+                    'wrt4mbc004',
+                    'wrt4vmf013',
+                    'wrtspec004',
+                    'wrtspec002',
+                    'Odsz8ZWo5A',
+                    '2DJ6sfQ1mh');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTUI";
+var RESULT_FILE_NAME = "tct-behavior-child.wrtui.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/js/tests.js b/mobile/tct-behavior-tests/tests/WRTUI/js/tests.js
new file mode 100755 (executable)
index 0000000..c1bccb5
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#uninstall').addClass("ui-disabled");
+            $('#launch').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTUI/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html b/mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html
new file mode 100755 (executable)
index 0000000..6ee475b
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-rotation-sensor-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-rotation-sensor-enable"/>
+                <input type="hidden" id="app_id"  value="wrt4ars001.applicationrotationsensorenable"/>
+                <input type="hidden" id="package_id" value="wrt4ars001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Turn on the auto-rotate screen. (Maybe this option can be found in the "setting" menu of the device).</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen orientation is changed and a "PASS" popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt
new file mode 100755 (executable)
index 0000000..b3d80bd
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..8fb3aa5
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec004.cspmodeallownavigationaccess"/>
+                <input type="hidden" id="package_id" value="wrtspec004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..d80435f
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html
new file mode 100755 (executable)
index 0000000..17a4355
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-not-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-not-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec002.notNavigationAccess"/>
+                <input type="hidden" id="package_id" value="wrtspec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..03addee
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html b/mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html
new file mode 100755 (executable)
index 0000000..7f488d5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="multiple-browsing-context">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="multiple-browsing-context"/>
+                <input type="hidden" id="app_id"  value="wrt4mbc004.multiplebrowsingcontext"/>
+                <input type="hidden" id="package_id" value="wrt4mbc004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a new page with "index2.html" can be opened when click the "open window" button on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt
new file mode 100755 (executable)
index 0000000..5d62b8b
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..cdf0233
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="Odsz8ZWo5A.notCspAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="Odsz8ZWo5A"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a blank page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..173a17e
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..9962666
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-not-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-not-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="2DJ6sfQ1mh.notCspNotAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="2DJ6sfQ1mh"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..d1baa06
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html
new file mode 100755 (executable)
index 0000000..9f22049
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-fullscreen-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-fullscreen-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmf013.viewmodefullscreenrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmf013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and fullscreen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt
new file mode 100755 (executable)
index 0000000..200bd83
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt differ
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html
new file mode 100755 (executable)
index 0000000..59c4b76
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-maximized-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-maximized-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmm015.viewmodemaximizedrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmm015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and maximized.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt
new file mode 100755 (executable)
index 0000000..86e84f7
Binary files /dev/null and b/mobile/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt differ
diff --git a/tools/build/pack.py b/tools/build/pack.py
new file mode 100755 (executable)
index 0000000..3171db3
--- /dev/null
@@ -0,0 +1,1104 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Fan, Yugang <yugang.fan@intel.com>
+
+import os
+import shutil
+import glob
+import time
+import sys
+import stat
+import random
+import json
+import logging
+import zipfile
+import signal
+import subprocess
+from optparse import OptionParser
+
+reload(sys)
+sys.setdefaultencoding('utf8')
+
+TOOL_VERSION = "v0.1"
+VERSION_FILE = "VERSION"
+DEFAULT_CMD_TIMEOUT = 600
+PKG_TYPES = ["apk", "xpk", "wgt", "apk-aio", "cordova-aio", "cordova", "embeddingapi"]
+PKG_MODES = ["shared", "embedded"]
+PKG_ARCHS = ["x86", "arm"]
+PKG_BLACK_LIST = []
+PKG_NAME = None
+BUILD_PARAMETERS = None
+BUILD_ROOT = None
+BUILD_ROOT_SRC = None
+BUILD_ROOT_SRC_PKG = None
+BUILD_ROOT_SRC_PKG_APP = None
+BUILD_ROOT_SRC_SUB_APP = None
+BUILD_ROOT_PKG = None
+BUILD_ROOT_PKG_APP = None
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def pidExists(pid):
+    if pid < 0:
+        return False
+    try:
+        os.kill(pid, 0)
+    except OSError:
+        return False
+    else:
+        return True
+
+
+def isWindows():
+    return sys.platform == "cygwin" or sys.platform.startswith("win")
+
+
+def killProcesses(ppid=None):
+    if isWindows():
+        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
+    else:
+        ppid = str(ppid)
+        pidgrp = []
+
+        def GetChildPids(ppid):
+            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
+            pids = os.popen(command).read()
+            pids = pids.split()
+            return pids
+
+        pidgrp.extend(GetChildPids(ppid))
+        for pid in pidgrp:
+            pidgrp.extend(GetChildPids(pid))
+
+        pidgrp.insert(0, ppid)
+        while len(pidgrp) > 0:
+            pid = pidgrp.pop()
+            try:
+                os.kill(int(pid), signal.SIGKILL)
+                return True
+            except OSError:
+                try:
+                    os.popen("kill -9 %d" % int(pid))
+                    return True
+                except Exception:
+                    return False
+
+
+def safelyGetValue(origin_json=None, key=None):
+    if origin_json and key and key in origin_json:
+        return origin_json[key]
+    return None
+
+
+def checkContains(origin_str=None, key_str=None):
+    if origin_str.upper().find(key_str.upper()) >= 0:
+        return True
+    return False
+
+
+def getRandomStr():
+    str_pool = list("abcdefghijklmnopqrstuvwxyz1234567890")
+    random_str = ""
+    for i in range(15):
+        index = random.randint(0, len(str_pool) - 1)
+        random_str = random_str + str_pool[index]
+
+    return random_str
+
+
+def zipDir(dir_path, zip_file):
+    try:
+        if os.path.exists(zip_file):
+            if not doRemove([zip_file]):
+                return False
+        if not os.path.exists(os.path.dirname(zip_file)):
+            os.makedirs(os.path.dirname(zip_file))
+        z_file = zipfile.ZipFile(zip_file, "w")
+        orig_dir = os.getcwd()
+        os.chdir(dir_path)
+        for root, dirs, files in os.walk("."):
+            for i_file in files:
+                LOG.info("zip %s" % os.path.join(root, i_file))
+                z_file.write(os.path.join(root, i_file))
+        z_file.close()
+        os.chdir(orig_dir)
+    except Exception as e:
+        LOG.error("Fail to pack %s to %s: %s" % (dir_path, zip_file, e))
+        return False
+    LOG.info("Done to zip %s to %s" % (dir_path, zip_file))
+    return True
+
+
+def overwriteCopy(src, dest, symlinks=False, ignore=None):
+    if not os.path.exists(dest):
+        os.makedirs(dest)
+        shutil.copystat(src, dest)
+    sub_list = os.listdir(src)
+    if ignore:
+        excl = ignore(src, sub_list)
+        sub_list = [x for x in sub_list if x not in excl]
+    for i_sub in sub_list:
+        s_path = os.path.join(src, i_sub)
+        d_path = os.path.join(dest, i_sub)
+        if symlinks and os.path.islink(s_path):
+            if os.path.lexists(d_path):
+                os.remove(d_path)
+            os.symlink(os.readlink(s_path), d_path)
+            try:
+                s_path_s = os.lstat(s_path)
+                s_path_mode = stat.S_IMODE(s_path_s.st_mode)
+                os.lchmod(d_path, s_path_mode)
+            except Exception:
+                pass
+        elif os.path.isdir(s_path):
+            overwriteCopy(s_path, d_path, symlinks, ignore)
+        else:
+            shutil.copy2(s_path, d_path)
+
+
+def doCopy(src_item=None, dest_item=None):
+    LOG.info("Copying %s to %s" % (src_item, dest_item))
+    try:
+        if os.path.isdir(src_item):
+            overwriteCopy(src_item, dest_item, symlinks=True)
+        else:
+            if not os.path.exists(os.path.dirname(dest_item)):
+                LOG.info("Create non-existent dir: %s" %
+                         os.path.dirname(dest_item))
+                os.makedirs(os.path.dirname(dest_item))
+            shutil.copy2(src_item, dest_item)
+    except Exception as e:
+        LOG.error("Fail to copy file %s: %s" % (src_item, e))
+        return False
+
+    return True
+
+
+def doRemove(target_file_list=None):
+    for i_file in target_file_list:
+        LOG.info("Removing %s" % i_file)
+        try:
+            if os.path.isdir(i_file):
+                shutil.rmtree(i_file)
+            else:
+                os.remove(i_file)
+        except Exception as e:
+            LOG.error("Fail to remove file %s: %s" % (i_file, e))
+            return False
+    return True
+
+
+def updateCopylistPrefix(src_default, dest_default, src_sub, dest_sub):
+    src_new = ""
+    dest_new = ""
+    PACK_TOOL_TAG = "PACK-TOOL-ROOT"
+
+    if src_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        src_new = src_sub.replace(PACK_TOOL_TAG, BUILD_PARAMETERS.pkgpacktools)
+    else:
+        src_new = os.path.join(src_default, src_sub)
+
+    if dest_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        dest_new = dest_sub.replace(PACK_TOOL_TAG, BUILD_ROOT)
+    else:
+        dest_new = os.path.join(dest_default, dest_sub)
+
+    return (src_new, dest_new)
+
+
+def buildSRC(src=None, dest=None, build_json=None):
+    if not os.path.exists(src):
+        LOG.info("+Src dir does not exist, skip build src process ...")
+        return True
+    if not doCopy(src, dest):
+        return False
+    if "blacklist" in build_json:
+        if build_json["blacklist"].count("") > 0:
+            build_json["blacklist"].remove("")
+        black_file_list = []
+        for i_black in build_json["blacklist"]:
+            black_file_list = black_file_list + \
+                glob.glob(os.path.join(dest, i_black))
+
+        black_file_list = list(set(black_file_list))
+        if not doRemove(black_file_list):
+            return False
+
+    if "copylist" in build_json:
+        for i_s_key in build_json["copylist"].keys():
+            if i_s_key and build_json["copylist"][i_s_key]:
+                (src_updated, dest_updated) = updateCopylistPrefix(
+                    src, dest, i_s_key, build_json["copylist"][i_s_key])
+                if not doCopy(src_updated, dest_updated):
+                    return False
+
+    return True
+
+
+def exitHandler(return_code=1):
+    LOG.info("+Cleaning build root folder ...")
+    if not BUILD_PARAMETERS.bnotclean and os.path.exists(BUILD_ROOT):
+        if not doRemove([BUILD_ROOT]):
+            LOG.error("Fail to clean build root, exit ...")
+            sys.exit(1)
+
+    if return_code == 0:
+        LOG.info("================ DONE ================")
+    else:
+        LOG.error(
+            "================ Found Something Wrong !!! ================")
+    sys.exit(return_code)
+
+
+def prepareBuildRoot():
+    LOG.info("+Preparing build root folder ...")
+    global BUILD_ROOT
+    global BUILD_ROOT_SRC
+    global BUILD_ROOT_SRC_PKG
+    global BUILD_ROOT_SRC_PKG_APP
+    global BUILD_ROOT_SRC_SUB_APP
+    global BUILD_ROOT_PKG
+    global BUILD_ROOT_PKG_APP
+
+    while True:
+        BUILD_ROOT = os.path.join("/tmp", getRandomStr())
+        if os.path.exists(BUILD_ROOT):
+            continue
+        else:
+            break
+
+    BUILD_ROOT_SRC = os.path.join(BUILD_ROOT, PKG_NAME)
+    BUILD_ROOT_SRC_PKG = os.path.join(BUILD_ROOT, "pkg")
+    BUILD_ROOT_SRC_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app")
+    BUILD_ROOT_SRC_SUB_APP = os.path.join(BUILD_ROOT, "sub-app")
+    BUILD_ROOT_PKG = os.path.join(BUILD_ROOT, "pkg", "opt", PKG_NAME)
+    BUILD_ROOT_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app", "opt", PKG_NAME)
+
+    if not doCopy(BUILD_PARAMETERS.srcdir, BUILD_ROOT_SRC):
+        return False
+    if not doRemove(
+            glob.glob(os.path.join(BUILD_ROOT_SRC, "%s*.zip" % PKG_NAME))):
+        return False
+
+    return True
+
+
+def doCMD(cmd, time_out=DEFAULT_CMD_TIMEOUT, no_check_return=False):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    cmd_proc = subprocess.Popen(args=cmd, shell=True)
+    while True:
+        cmd_exit_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_exit_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        else:
+            if not no_check_return and cmd_exit_code != 0:
+                LOG.error("Fail to exe CMD")
+                return False
+            break
+        time.sleep(2)
+    return True
+
+
+def doCMDWithOutput(cmd, time_out=DEFAULT_CMD_TIMEOUT):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    output = []
+    cmd_return_code = 1
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+
+    while True:
+        output_line = cmd_proc.stdout.readline().strip("\r\n")
+        cmd_return_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_return_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        elif output_line == '' and cmd_return_code is not None:
+            break
+
+        sys.stdout.write("%s\n" % output_line)
+        sys.stdout.flush()
+        output.append(output_line)
+    if cmd_return_code != 0:
+        LOG.error("Fail to exe CMD")
+
+    return (cmd_return_code, output)
+
+
+def packXPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "make_xpk.py")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "make_xpk.py"),
+                pack_tool):
+            return False
+    orig_dir = os.getcwd()
+    os.chdir(BUILD_ROOT)
+    if os.path.exists("key.file"):
+        if not doRemove(["key.file"]):
+            os.chdir(orig_dir)
+            return False
+
+    key_file = safelyGetValue(build_json, "key-file")
+    if key_file == "key.file":
+        LOG.error(
+            "\"key.file\" is reserved name for default key file, "
+            "pls change the key file name ...")
+        os.chdir(orig_dir)
+        return False
+    if key_file:
+        pack_cmd = "python make_xpk.py %s %s -o %s" % (
+            app_src, key_file, os.path.join(app_dest, "%s.xpk" % app_name))
+    else:
+        pack_cmd = "python make_xpk.py %s key.file -o %s" % (
+            app_src, os.path.join(app_dest, "%s.xpk" % app_name))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packWGT(build_json=None, app_src=None, app_dest=None, app_name=None):
+    if not zipDir(app_src, os.path.join(app_dest, "%s.wgt" % app_name)):
+        return False
+
+    if BUILD_PARAMETERS.signature == True:
+        if safelyGetValue(build_json, "sign-flag") == "true":
+            if not os.path.exists(os.path.join(BUILD_ROOT, "signing")):
+                if not doCopy(
+                        os.path.join(BUILD_PARAMETERS.pkgpacktools, "signing"),
+                        os.path.join(BUILD_ROOT, "signing")):
+                    return False
+            signing_cmd = "%s --dist platform %s" % (
+                os.path.join(BUILD_ROOT, "signing", "sign-widget.sh"),
+                os.path.join(app_dest, "%s.wgt" % app_name))
+            if not doCMD(signing_cmd, DEFAULT_CMD_TIMEOUT):
+                return False
+
+    return True
+
+
+def packAPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    if not os.path.exists(os.path.join(BUILD_ROOT, "crosswalk")):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "crosswalk"),
+                os.path.join(BUILD_ROOT, "crosswalk")):
+            return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doRemove(files):
+            return False
+
+    ext_opt = ""
+    cmd_opt = ""
+    url_opt = ""
+    mode_opt = ""
+    arch_opt = ""
+    icon_opt = ""
+
+    common_opts = safelyGetValue(build_json, "apk-common-opts")
+    if common_opts is None:
+        common_opts = ""
+
+    tmp_opt = safelyGetValue(build_json, "apk-ext-opt")
+    if tmp_opt:
+        ext_opt = "--extensions='%s'" % os.path.join(BUILD_ROOT_SRC, tmp_opt)
+
+    tmp_opt = safelyGetValue(build_json, "apk-cmd-opt")
+    if tmp_opt:
+        cmd_opt = "--xwalk-command-line='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-url-opt")
+    if tmp_opt:
+        url_opt = "--app-url='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-mode-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_MODES:
+            mode_opt = "--mode=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app mode: %s" % tmp_opt)
+            return False
+    else:
+        mode_opt = "--mode=%s" % BUILD_PARAMETERS.pkgmode
+
+    tmp_opt = safelyGetValue(build_json, "apk-arch-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_ARCHS:
+            arch_opt = "--arch=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app arch: %s" % tmp_opt)
+            return False
+    else:
+        arch_opt = "--arch=%s" % BUILD_PARAMETERS.pkgarch
+
+    tmp_opt = safelyGetValue(build_json, "apk-icon-opt")
+    if tmp_opt:
+        icon_opt = "--icon=%s" % tmp_opt
+    elif tmp_opt == "":
+        icon_opt = ""
+    else:
+        icon_opt = "--icon=%s/icon.png" % app_src
+
+    if safelyGetValue(build_json, "apk-type") == "MANIFEST":
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s " \
+            "--manifest=%s/manifest.json  %s %s %s %s %s" % (
+                app_name, app_src, mode_opt, arch_opt,
+                ext_opt, cmd_opt, common_opts)
+    elif safelyGetValue(build_json, "apk-type") == "HOSTEDAPP":
+        if not url_opt:
+            LOG.error(
+                "Fail to find the key \"apk-url-opt\" for hosted APP packing")
+            return False
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s %s " \
+                   "%s %s %s %s %s" % (
+                       app_name, app_name, mode_opt, arch_opt, ext_opt,
+                       cmd_opt, url_opt, common_opts)
+    else:
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s " \
+                   "--app-root=%s --app-local-path=index.html %s %s " \
+                   "%s %s %s %s" % (
+                       app_name, app_name, app_src, icon_opt, mode_opt,
+                       arch_opt, ext_opt, cmd_opt, common_opts)
+
+    orig_dir = os.getcwd()
+    os.chdir(os.path.join(BUILD_ROOT, "crosswalk"))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doCopy(files[0], os.path.join(app_dest, "%s.apk" % app_name)):
+            os.chdir(orig_dir)
+            return False
+    else:
+        LOG.error("Fail to find the apk file")
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packCordova(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "cordova")
+    app_name = app_name.replace("-", "_")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova"),
+                pack_tool):
+            return False
+
+    plugin_tool = os.path.join(BUILD_ROOT, "cordova_plugins")
+    if not os.path.exists(plugin_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova_plugins"),
+                plugin_tool):
+            return False
+
+    orig_dir = os.getcwd()
+    os.chdir(pack_tool)
+    pack_cmd = "bin/create %s org.xwalk.%s %s" % (
+        app_name, app_name, app_name)
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(os.path.join(pack_tool, app_name))
+    plugin_dirs = os.listdir(plugin_tool)
+    for i_dir in plugin_dirs:
+        i_plugin_dir = os.path.join(plugin_tool, i_dir)
+        plugin_install_cmd = "plugman install --platform android --project " \
+                             "./ --plugin %s" % i_plugin_dir
+        if not doCMD(plugin_install_cmd, DEFAULT_CMD_TIMEOUT):
+            os.chdir(orig_dir)
+            return False
+    os.chdir(pack_tool)
+
+    if not doCopy(app_src, os.path.join(pack_tool, app_name, "assets", "www")):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(os.path.join(BUILD_ROOT, "cordova", app_name))
+    pack_cmd = "./cordova/build"
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(
+            BUILD_ROOT, "cordova", app_name, "bin", "%s-debug.apk" %
+            app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packEmbeddingAPI(
+        build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    library_dir_name = safelyGetValue(build_json, "embeddingapi-library-name")
+    if not library_dir_name:
+        LOG.error("Fail to get embeddingapi-library-name ...")
+        return False
+
+    new_library_dir_name = "core_library"
+    pack_tool = os.path.join(app_src, "..", new_library_dir_name)
+
+    if os.path.exists(pack_tool):
+        if not doRemove([pack_tool]):
+            return False
+
+    if not doCopy(
+            os.path.join(BUILD_PARAMETERS.pkgpacktools, library_dir_name),
+            pack_tool):
+        return False
+
+    if os.path.exists(os.path.join(pack_tool, "bin", "res", "crunch")):
+        if not doRemove([os.path.join(pack_tool, "bin", "res", "crunch")]):
+            return False
+
+    orig_dir = os.getcwd()
+    android_project_path = os.path.join(app_src, "android-project")
+    try:
+        os.makedirs(android_project_path)
+    except Exception as e:
+        LOG.error("Fail to create tmp project dir: %s" % e)
+        return False
+
+    (return_code, output) = doCMDWithOutput("android list target")
+    api_level = ""
+    for line in output:
+        if "API level" in line:
+            api_level = line.split(":")[1].strip()
+            break
+    if not api_level:
+        LOG.error("Fail to get Android API Level")
+        os.chdir(orig_dir)
+        return False
+
+    android_project_cmd = "android create project --name %s --target " \
+                          "android-%s --path %s --package com.%s " \
+                          "--activity MainActivity" % (
+                              app_name, api_level, android_project_path, app_name)
+    if not doCMD(android_project_cmd):
+        os.chdir(orig_dir)
+        return False
+
+    try:
+        update_file = open(
+            os.path.join(android_project_path, "project.properties"), "a+")
+        update_file.writelines(
+            "{0}\n".format(
+                "android.library.reference.1=../%s" %
+                new_library_dir_name))
+        update_file.close()
+    except Exception as e:
+        LOG.error(
+            "Fail to update %s: %s" %
+            (os.path.join(
+                android_project_path,
+                "project.properties"),
+                e))
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(android_project_path, "build.xml"),
+                  os.path.join(app_src, "build.xml")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "project.properties"),
+            os.path.join(app_src, "project.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(app_src, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(pack_tool, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(app_src)
+    if not doCMD("ant debug"):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(app_src, "bin", "%s-debug.apk" % app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packAPP(build_json=None, app_src=None, app_dest=None, app_name=None):
+    LOG.info("Packing %s(%s)" % (app_name, app_src))
+    if not os.path.exists(app_dest):
+        try:
+            os.makedirs(app_dest)
+        except Exception as e:
+            LOG.error("Fail to init package install dest dir: %s" % e)
+            return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not packXPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not packWGT(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "APK"):
+        if not packAPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "CORDOVA"):
+        if not packCordova(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "EMBEDDINGAPI"):
+        if not packEmbeddingAPI(build_json, app_src, app_dest, app_name):
+            return False
+    else:
+        LOG.error("Got wrong pkg type: %s" % BUILD_PARAMETERS.pkgtype)
+        return False
+
+    LOG.info("Success to pack APP: %s" % app_name)
+    return True
+
+
+def createIndexFile(index_file_path=None, hosted_app=None):
+    try:
+        if hosted_app:
+            index_url = "http://127.0.0.1/opt/%s/webrunner/index.html?" \
+                "testsuite=../tests.xml&testprefix=../../.." % PKG_NAME
+        else:
+            index_url = "opt/%s/webrunner/index.html?testsuite=../tests.xml" \
+                        "&testprefix=../../.." % PKG_NAME
+        html_content = "<!doctype html><head><meta http-equiv='Refresh' " \
+                       "content='1; url=%s'></head>" % index_url
+        index_file = open(index_file_path, "w")
+        index_file.write(html_content)
+        index_file.close()
+    except Exception as e:
+        LOG.error("Fail to create index.html for top-app: %s" % e)
+        return False
+    LOG.info("Success to create index file %s" % index_file_path)
+    return True
+
+
+def buildSubAPP(app_dir=None, build_json=None, app_dest_default=None):
+    app_dir_inside = safelyGetValue(build_json, "app-dir")
+    if app_dir_inside:
+        app_dir = app_dir_inside
+    LOG.info("+Building sub APP(s) from %s ..." % app_dir)
+    app_dir = os.path.join(BUILD_ROOT_SRC, app_dir)
+    app_name = safelyGetValue(build_json, "app-name")
+    if not app_name:
+        app_name = os.path.basename(app_dir)
+
+    app_src = os.path.join(BUILD_ROOT_SRC_SUB_APP, app_name)
+    if buildSRC(app_dir, app_src, build_json):
+        app_dest = safelyGetValue(build_json, "install-path")
+        if app_dest:
+            app_dest = os.path.join(app_dest_default, app_dest)
+        else:
+            app_dest = app_dest_default
+
+        if safelyGetValue(build_json, "all-apps") == "true":
+            app_dirs = os.listdir(app_src)
+            apps_num = 0
+            for i_app_dir in app_dirs:
+                if os.path.isdir(os.path.join(app_src, i_app_dir)):
+                    i_app_name = os.path.basename(i_app_dir)
+                    if not packAPP(
+                            build_json, os.path.join(app_src, i_app_name),
+                            app_dest, i_app_name):
+                        return False
+                    else:
+                        apps_num = apps_num + 1
+            if apps_num > 0:
+                LOG.info("Totally packed %d apps in %s" % (apps_num, app_dir))
+                return True
+        else:
+            return packAPP(build_json, app_src, app_dest, app_name)
+    return False
+
+
+def buildPKGAPP(build_json=None):
+    LOG.info("+Building package APP ...")
+    if not doCopy(os.path.join(BUILD_ROOT_SRC, "icon.png"),
+                  os.path.join(BUILD_ROOT_SRC_PKG_APP, "icon.png")):
+        return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not doCopy(
+                os.path.join(BUILD_ROOT_SRC, "manifest.json"),
+                os.path.join(BUILD_ROOT_SRC_PKG_APP, "manifest.json")):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not doCopy(os.path.join(BUILD_ROOT_SRC, "config.xml"),
+                      os.path.join(BUILD_ROOT_SRC_PKG_APP, "config.xml")):
+            return False
+
+    hosted_app = False
+    if safelyGetValue(build_json, "hosted-app") == "true":
+        hosted_app = True
+    if not createIndexFile(
+            os.path.join(BUILD_ROOT_SRC_PKG_APP, "index.html"), hosted_app):
+        return False
+
+    if not hosted_app:
+        if "blacklist" not in build_json:
+            build_json.update({"blacklist": []})
+        build_json["blacklist"].extend(PKG_BLACK_LIST)
+        if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG_APP, build_json):
+            return False
+
+        if "subapp-list" in build_json:
+            for i_sub_app in build_json["subapp-list"].keys():
+                if not buildSubAPP(
+                        i_sub_app, build_json["subapp-list"][i_sub_app],
+                        BUILD_ROOT_PKG_APP):
+                    return False
+
+    if not packAPP(
+            build_json, BUILD_ROOT_SRC_PKG_APP, BUILD_ROOT_PKG, PKG_NAME):
+        return False
+
+    return True
+
+
+def buildPKG(build_json=None):
+    if "blacklist" not in build_json:
+        build_json.update({"blacklist": []})
+    build_json["blacklist"].extend(PKG_BLACK_LIST)
+    if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG, build_json):
+        return False
+
+    if "subapp-list" in build_json:
+        for i_sub_app in build_json["subapp-list"].keys():
+            if not buildSubAPP(
+                    i_sub_app, build_json["subapp-list"][i_sub_app],
+                    BUILD_ROOT_PKG):
+                return False
+
+    if "pkg-app" in build_json:
+        if not buildPKGAPP(build_json["pkg-app"]):
+            return False
+
+    return True
+
+
+def main():
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    try:
+        usage = "Usage: ./pack.py -t apk -m shared -a x86"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-c",
+            "--cfg",
+            dest="pkgcfg",
+            help="specify the path of config json file")
+        opts_parser.add_option(
+            "-t",
+            "--type",
+            dest="pkgtype",
+            help="specify the pkg type, e.g. apk, xpk, wgt ...")
+        opts_parser.add_option(
+            "-m",
+            "--mode",
+            dest="pkgmode",
+            help="specify the apk mode, e.g. shared, embedded")
+        opts_parser.add_option(
+            "-a",
+            "--arch",
+            dest="pkgarch",
+            help="specify the apk arch, e.g. x86, arm")
+        opts_parser.add_option(
+            "-d",
+            "--dest",
+            dest="destdir",
+            help="specify the installation folder for packed package")
+        opts_parser.add_option(
+            "-s",
+            "--src",
+            dest="srcdir",
+            help="specify the path of pkg resource for packing")
+        opts_parser.add_option(
+            "--tools",
+            dest="pkgpacktools",
+            help="specify the parent folder of pack tools")
+        opts_parser.add_option(
+            "--notclean",
+            dest="bnotclean",
+            action="store_true",
+            help="disable the build root clean after the packing")
+        opts_parser.add_option(
+            "--sign",
+            dest="signature",
+            action="store_true",
+            help="signature operation will be done when packing wgt")
+        opts_parser.add_option(
+            "-v",
+            "--version",
+            dest="bversion",
+            action="store_true",
+            help="show this tool's version")
+        opts_parser.add_option(
+            "--pkg-version",
+            dest="pkgversion",
+            help="specify the pkg version, e.g. 0.0.0.1")
+
+        if len(sys.argv) == 1:
+            sys.argv.append("-h")
+
+        global BUILD_PARAMETERS
+        (BUILD_PARAMETERS, args) = opts_parser.parse_args()
+    except Exception as e:
+        LOG.error("Got wrong options: %s, exit ..." % e)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.bversion:
+        print "Version: %s" % TOOL_VERSION
+        sys.exit(0)
+
+    if not BUILD_PARAMETERS.srcdir:
+        BUILD_PARAMETERS.srcdir = os.getcwd()
+    BUILD_PARAMETERS.srcdir = os.path.expanduser(BUILD_PARAMETERS.srcdir)
+
+    if not os.path.exists(
+            os.path.join(BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)):
+        if not os.path.exists(
+                os.path.join(BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)):
+            if not os.path.exists(
+                    os.path.join(BUILD_PARAMETERS.srcdir, VERSION_FILE)):
+                LOG.info(
+                    "Not found pkg version file, try to use option --pkg-version")
+                pkg_version_file_path = None
+            else:
+                pkg_version_file_path = os.path.join(
+                    BUILD_PARAMETERS.srcdir, VERSION_FILE)
+        else:
+            pkg_version_file_path = os.path.join(
+                BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)
+    else:
+        pkg_version_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)
+
+    try:
+        pkg_main_version = 0
+        pkg_release_version = 1
+        if BUILD_PARAMETERS.pkgversion:
+            LOG.info("Using %s as pkg version " % BUILD_PARAMETERS.pkgversion)
+            pkg_main_version = BUILD_PARAMETERS.pkgversion
+        else:
+            if pkg_version_file_path is not None:
+                LOG.info("Using pkg version file: %s" % pkg_version_file_path)
+                with open(pkg_version_file_path, "rt") as pkg_version_file:
+                    pkg_version_raw = pkg_version_file.read()
+                    pkg_version_file.close()
+                    pkg_version_json = json.loads(pkg_version_raw)
+                    pkg_main_version = pkg_version_json["main-version"]
+                    pkg_release_version = pkg_version_json["release-version"]
+    except Exception as e:
+        LOG.error("Fail to read pkg version file: %s, exit ..." % e)
+        sys.exit(1)
+
+    if not BUILD_PARAMETERS.pkgtype:
+        LOG.error("No pkg type provided, exit ...")
+        sys.exit(1)
+    elif not BUILD_PARAMETERS.pkgtype in PKG_TYPES:
+        LOG.error("Wrong pkg type, only support: %s, exit ..." %
+                  PKG_TYPES)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk" or \
+       BUILD_PARAMETERS.pkgtype == "apk-aio":
+        if not BUILD_PARAMETERS.pkgmode:
+            LOG.error("No pkg mode option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgmode in PKG_MODES:
+            LOG.error(
+                "Wrong pkg mode option provided, only support:%s, exit ..." %
+                PKG_MODES)
+            sys.exit(1)
+
+        if not BUILD_PARAMETERS.pkgarch:
+            LOG.error("No pkg arch option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgarch in PKG_ARCHS:
+            LOG.error(
+                "Wrong pkg arch option provided, only support:%s, exit ..." %
+                PKG_ARCHS)
+            sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        if not BUILD_PARAMETERS.destdir or not os.path.exists(
+                BUILD_PARAMETERS.destdir):
+            LOG.error("No all-in-one installation dest dir found, exit ...")
+            sys.exit(1)
+
+    elif not BUILD_PARAMETERS.destdir:
+        BUILD_PARAMETERS.destdir = BUILD_PARAMETERS.srcdir
+    BUILD_PARAMETERS.destdir = os.path.expanduser(BUILD_PARAMETERS.destdir)
+
+    if not BUILD_PARAMETERS.pkgpacktools:
+        BUILD_PARAMETERS.pkgpacktools = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", "tools")
+    BUILD_PARAMETERS.pkgpacktools = os.path.expanduser(
+        BUILD_PARAMETERS.pkgpacktools)
+
+    config_json = None
+    if BUILD_PARAMETERS.pkgcfg:
+        config_json_file_path = BUILD_PARAMETERS.pkgcfg
+    else:
+        config_json_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "suite.json")
+    try:
+        LOG.info("Using config json file: %s" % config_json_file_path)
+        with open(config_json_file_path, "rt") as config_json_file:
+            config_raw = config_json_file.read()
+            config_json_file.close()
+            config_json = json.loads(config_raw)
+    except Exception as e:
+        LOG.error("Fail to read config json file: %s, exit ..." % e)
+        sys.exit(1)
+
+    global PKG_NAME
+    PKG_NAME = safelyGetValue(config_json, "pkg-name")
+    if not PKG_NAME:
+        PKG_NAME = os.path.basename(BUILD_PARAMETERS.srcdir)
+        LOG.warning(
+            "Fail to read pkg name from json, "
+            "using src dir name as pkg name ...")
+
+    LOG.info("================= %s (%s-%s) ================" %
+             (PKG_NAME, pkg_main_version, pkg_release_version))
+
+    if not safelyGetValue(config_json, "pkg-list"):
+        LOG.error("Fail to read pkg-list, exit ...")
+        sys.exit(1)
+
+    pkg_json = None
+    for i_pkg in config_json["pkg-list"].keys():
+        i_pkg_list = i_pkg.replace(" ", "").split(",")
+        if BUILD_PARAMETERS.pkgtype in i_pkg_list:
+            pkg_json = config_json["pkg-list"][i_pkg]
+
+    if not pkg_json:
+        LOG.error("Fail to read pkg json, exit ...")
+        sys.exit(1)
+
+    if not prepareBuildRoot():
+        exitHandler(1)
+
+    if "pkg-blacklist" in config_json:
+        PKG_BLACK_LIST.extend(config_json["pkg-blacklist"])
+
+    if not buildPKG(pkg_json):
+        exitHandler(1)
+
+    LOG.info("+Building package ...")
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        pkg_file_list = os.listdir(os.path.join(BUILD_ROOT, "pkg"))
+        for i_file in pkg_file_list:
+            if not doCopy(
+                    os.path.join(BUILD_ROOT, "pkg", i_file),
+                    os.path.join(BUILD_PARAMETERS.destdir, i_file)):
+                exitHandler(1)
+    else:
+        pkg_file = os.path.join(
+            BUILD_PARAMETERS.destdir,
+            "%s-%s-%s.%s.zip" %
+            (PKG_NAME,
+             pkg_main_version,
+             pkg_release_version,
+             BUILD_PARAMETERS.pkgtype))
+
+        if not zipDir(os.path.join(BUILD_ROOT, "pkg"), pkg_file):
+            exitHandler(1)
+
+if __name__ == "__main__":
+    main()
+    exitHandler(0)
diff --git a/tools/coverage/stats.py b/tools/coverage/stats.py
new file mode 100755 (executable)
index 0000000..e10865f
--- /dev/null
@@ -0,0 +1,200 @@
+#!/usr/bin/python
+#!encoding:utf-8
+
+import os
+import sys
+import re
+import commands
+import glob
+import fnmatch
+import string
+from xml.etree import ElementTree as ET
+from optparse import OptionParser
+
+
+def iterfindfiles (path, fnexp):
+    for root, dirs, files in os.walk(path):
+           for filename in fnmatch.filter(files, fnexp):
+                   yield os.path.join(root, filename)
+
+def count_upstream (string = None, str_entry=None ):
+    if string.find('/%s/' % str_entry) >= 0:
+        return 1
+    else:
+        return 0
+
+def analy_test_file(file_path = None):
+    total_number = 0
+    total_auto = 0
+    total_auto_webdriver = 0
+    total_manual = 0
+    p0_number = 0
+    p0_auto   = 0
+    p0_auto_webdriver = 0
+    p0_manual = 0
+    p1_number = 0
+    p1_auto   = 0
+    p1_auto_webdriver = 0
+    p1_manual = 0
+    p2_number = 0
+    p2_auto   = 0
+    p2_auto_webdriver = 0
+    p2_manual = 0
+    p3_number = 0
+    p3_auto   = 0
+    p3_auto_webdriver = 0
+    p3_manual = 0
+    try:
+        suite_name = os.path.basename(os.path.dirname(file_path))
+        tree = ET.parse(file_path)
+        root = tree.getroot()
+        for set_node in root.findall('suite/set'):
+            flag = 0
+            s_type = set_node.get('type')
+            if s_type == 'ref' or s_type == 'script' :
+               if os.path.split(file_path)[0].split('/')[-1].find("wrt") > -1:
+                  flag = 0
+               else:
+                  flag = 1
+            for tc_node in set_node.findall('testcase'):
+              subcase = 1
+              s_status = tc_node.get('status')
+              s_subcase = tc_node.get('subcase')
+              s_priority = tc_node.get('priority')
+              s_execution_type = tc_node.get('execution_type')
+              if s_status == 'designed' :
+                 continue
+              if s_subcase:
+                 subcase = string.atoi(s_subcase)
+              if s_priority == 'P0' :
+                 if s_execution_type == "auto" :
+                   p0_auto += 1*subcase
+                   if flag == 1:
+                     p0_auto_webdriver += 1*subcase
+                 else:
+                   p0_manual += 1*subcase
+              elif s_priority == 'P1' :
+                 if s_execution_type == "auto" :
+                   p1_auto += 1*subcase
+                   if flag == 1:
+                     p1_auto_webdriver += 1*subcase
+                 else:
+                   p1_manual += 1*subcase
+              elif s_priority == 'P2' :
+                 if s_execution_type == "auto" :
+                   p2_auto += 1*subcase
+                   if flag == 1:
+                     p2_auto_webdriver += 1*subcase
+                 else:
+                   p2_manual += 1*subcase
+              elif s_priority == 'P3' :
+                 if s_execution_type == "auto" :
+                   p3_auto += 1*subcase
+                   if flag == 1:
+                     p3_auto_webdriver += 1*subcase
+                 else:
+                   p3_manual += 1*subcase
+    except Exception, e:
+         print "Got error when analy test files: %s" % e
+         print file_path
+
+    p0_number = p0_auto + p0_manual
+    p1_number = p1_auto + p1_manual
+    p2_number = p2_auto + p2_manual
+    p3_number = p3_auto + p3_manual
+    total_auto = p0_auto + p1_auto + p2_auto + p3_auto  
+    total_auto_webdriver = p0_auto_webdriver + p1_auto_webdriver + p2_auto_webdriver + p3_auto_webdriver 
+    total_manual = p0_manual + p1_manual + p2_manual + p3_manual  
+    total_number = total_auto + total_manual
+
+    case_message = suite_name + " " + str(total_number) + " " + str(total_auto) + " " + str(total_auto_webdriver) + " " + str(total_manual) + " " + str(p0_number) + " " + str(p0_auto) + " " + str(p0_auto_webdriver) + " " + str(p0_manual) + " " + str(p1_number) + " " + str(p1_auto) + " " + str(p1_auto_webdriver) + " " + str(p1_manual) + " " + str(p2_number) + " " + str(p2_auto) + " " + str(p2_auto_webdriver) + " " + str(p2_manual) + " " + str(p3_number) + " " + str(p3_auto) + " " + str(p3_auto_webdriver) + " " + str(p3_manual) + " "
+
+    return case_message
+
+def get_upstream(file_path):
+    n_upstream = 0
+    upstream_name = ["w3c","csswg","webkit","khronos","blink","ecmascript_simd"]
+    exist_upstream = []
+    try:
+        suite_name = os.path.basename(os.path.dirname(file_path))
+        tree = ET.parse(file_path)
+        root = tree.getroot()
+        for entry_node in root.findall('suite/set/testcase/description/test_script_entry'):
+           for element in upstream_name :
+             if count_upstream(entry_node.text, element) == 1:
+                    n_upstream += 1
+                    if element not in exist_upstream :
+                       exist_upstream.append(element)
+    except Exception, e:
+        print e
+
+    upstream = ""
+    for element in exist_upstream:
+      upstream += element + "/"
+    return str(n_upstream) + " " + upstream[: -1]
+
+
+def get_case_status(file_path):
+
+    if "tct-widget02-w3c-tests" in file_path:
+        return
+    if "tct-testconfig" in file_path:
+        return
+    if "xwalk-system-tests" in file_path:
+        return
+    
+    try:
+        case_message = analy_test_file(file_path)
+        upstream = get_upstream(file_path)
+        content = case_message + upstream
+        fp = open("analy_result.csv",'a')
+        fp.write(content)
+        fp.write("\n")
+        fp.close()
+    except Exception, e:
+        print "Got error when get case status: %s" % e
+
+def init_result_file():
+    title = "Suite_name,Total,Total_auto,Total_auto_webdriver,Total_manual,P0,P0_auto,P0_auto_webdriver,P0_manual,P1,P1_auto,\
+P1_auto_webdriver,P1_manual,P2,P2_auto,P2_auto_webdriver,P2_manual,P3,P3_auto,P3_auto_webdriver,P3_manual,\
+Integrated_Upstream_TCs,Upstream_Resource"
+    try:
+        file_path = os.getcwd() + "/analy_result.csv"
+        if os.path.exists(file_path):
+           os.remove(file_path)
+        fp = open("analy_result.csv",'a')
+        fp.write(title)
+        fp.write("\n")
+        fp.close()
+    except Exception, e:
+        print "Got error when init analy file : %s" % e
+
+def main():
+    try:
+        usage = "./stats.py -f ../../webapi/tct-2dtransforms-css3-tests/tests.full.xml"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-r",
+            dest="suitesdir",
+            help="specify the path of folder which tests.full.xml located in.")
+        opts_parser.add_option(
+            "-f",
+            dest="xmlfile",
+            help="specify the path of tests.full.xml file")
+        
+        init_result_file()
+        if len(sys.argv) == 1:
+                   sys.argv.append("-h")
+        (PARAMETERS, args) = opts_parser.parse_args()
+        if PARAMETERS.suitesdir:
+            for filename in iterfindfiles("%s" % PARAMETERS.suitesdir, "tests.full.xml"):
+                get_case_status(filename)
+
+        if PARAMETERS.xmlfile:
+            get_case_status(PARAMETERS.xmlfile)   
+    except Exception as e:
+        print "Got error: %s, exit" % e
+
+if __name__ == '__main__':
+       main()
+
diff --git a/tools/crosswalk/README.md b/tools/crosswalk/README.md
new file mode 100644 (file)
index 0000000..22b8c46
--- /dev/null
@@ -0,0 +1,15 @@
+## Introduction
+
+This `crosswalk` tool is used to pack .apk test suite.
+
+Please get the latest scripts from
+https://origin-download.01.org/crosswalk/releases/crosswalk/android/canary/
+
+## Authors:
+* Xiong, Jiehua <jiehuax.xiong@intel.com>
+
+## License
+
+Copyright (c) 2014 Intel Corporation. All rights reserved.
+Use of this source code is governed by a BSD-style license that can be
+found in the `LICENSE` file.
diff --git a/tools/format/json_formatter b/tools/format/json_formatter
new file mode 100755 (executable)
index 0000000..746a1f7
--- /dev/null
@@ -0,0 +1,244 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright notice
+#   , this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Fan, Yugang <yugang.fan@intel.com>
+
+import sys
+import os
+import json
+import logging
+from optparse import OptionParser
+
+VERSION = "v0.1"
+LOG = None
+LOG_LEVEL = logging.DEBUG
+FORMAT_ERROR_STATUS = False
+
+
+class color_formatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def get_file_list(format_list=None, recursive=False, symlinks=True):
+    global FORMAT_ERROR_STATUS
+    file_list = []
+    for format_item in format_list:
+        if not os.path.exists(format_item):
+            LOG.error("%s is not existing" % format_item)
+            FORMAT_ERROR_STATUS = True
+            continue
+        elif os.path.islink(format_item):
+            if symlinks:
+                format_item = os.path.join(
+                    os.path.dirname(format_item),
+                    os.readlink(format_item))
+            else:
+                LOG.warning("%s is link, skip it" % format_item)
+                continue
+
+        if os.path.isdir(format_item):
+            if not recursive:
+                LOG.error("%s is not a file" % format_item)
+                FORMAT_ERROR_STATUS = True
+                continue
+            for dirpath, dirnames, files in os.walk(format_item):
+                for i_file in files:
+                    if i_file.endswith(".json"):
+                        i_file_path = os.path.join(dirpath, i_file)
+                        if os.path.islink(i_file_path):
+                            if symlinks:
+                                file_list = file_list + [
+                                    os.path.join(
+                                        os.path.dirname(i_file_path),
+                                        os.readlink(i_file_path))]
+                            else:
+                                LOG.warning(
+                                    "%s is link, skip it" %
+                                    i_file_path)
+                                continue
+                        else:
+                            file_list = file_list + [i_file_path]
+        else:
+            file_list = file_list + [format_item]
+
+    if not file_list:
+        LOG.error("No json file found for formatting ...")
+    return file_list
+
+
+def main():
+    global LOG
+    global FORMAT_ERROR_STATUS
+
+    LOG = logging.getLogger("json-formater")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = color_formatter("%(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    try:
+        usage = "Usage: \n\tjson_formatter -i file.json\n\t" \
+                "json_formatter -r json_dir\n\tjson_formatter file.json"
+        opts_parser = OptionParser(usage=usage, version=VERSION)
+        opts_parser.add_option(
+            "-i",
+            "--in-place",
+            dest="inplace",
+            action="store_true",
+            help="make changes to json files in place")
+        opts_parser.add_option(
+            "-r",
+            "--recursive",
+            dest="recursive",
+            action="store_true",
+            help="run recursively over directories, "
+                 "force the formatter to use \"--in-place\"")
+        opts_parser.add_option(
+            "-n",
+            "--indent",
+            dest="indent",
+            action="store",
+            type="int",
+            help="json indent, default value is 4")
+        opts_parser.add_option(
+            "-u",
+            "--unsort-keys",
+            dest="unsortkeys",
+            action="store_true",
+            help="not sort json keys")
+        opts_parser.add_option(
+            "-s",
+            "--symlinks",
+            dest="symlinks",
+            action="store_true",
+            help="follow symlinks")
+
+        if len(sys.argv) == 1:
+            sys.argv.append("-h")
+        (options, args) = opts_parser.parse_args()
+    except Exception as e:
+        LOG.error("Got options error: %s" % e)
+        sys.exit(1)
+
+    files_list = []
+    format_list = [os.getcwd()]
+
+    if options.symlinks:
+        follow_symlinks = True
+    else:
+        follow_symlinks = False
+
+    if args:
+        format_list = args
+
+    if options.recursive:
+        options.inplace = True
+        follow_recursive = True
+    else:
+        follow_recursive = False
+
+    json_indent = 4
+    if options.indent:
+        json_indent = options.indent
+
+    json_sort = True
+    if options.unsortkeys:
+        json_sort = False
+
+    files_list = get_file_list(
+        format_list,
+        recursive=follow_recursive,
+        symlinks=follow_symlinks)
+    for i_file in files_list:
+        LOG.info("-->> Formatting %s" % i_file)
+        try:
+            with open(i_file, "rt") as original_json_file:
+                original_json_raw = original_json_file.read()
+                original_json_file.close()
+                original_json = json.loads(original_json_raw)
+                updated_json_tmp = json.dumps(
+                    original_json,
+                    indent=json_indent,
+                    sort_keys=json_sort)
+                updated_json = None
+                for i_line in updated_json_tmp.splitlines():
+                    i_line = i_line.rstrip()
+                    if i_line:
+                        if updated_json:
+                            updated_json = "%s\n%s" % (updated_json, i_line)
+                        else:
+                            updated_json = i_line
+                if not updated_json:
+                    LOG.error("Got empty json string from %s" % i_file)
+                    FORMAT_ERROR_STATUS = True
+                    continue
+                if options.inplace:
+                    os.rename(i_file, "%s.json-formatter" % i_file)
+                    try:
+                        with open(i_file, "w") as original_json_file:
+                            original_json_file.write(updated_json)
+                            original_json_file.close()
+                            os.remove("%s.json-formatter" % i_file)
+                    except Exception as e:
+                        LOG.error("Fail to format %s: %s" % (i_file, e))
+                        FORMAT_ERROR_STATUS = True
+                        if os.path.exists(i_file):
+                            os.remove(i_file)
+                        os.rename("%s.json-formatter" % i_file, i_file)
+                else:
+                    print updated_json
+        except Exception as e:
+            LOG.error("Fail to format %s: %s" % (i_file, e))
+            FORMAT_ERROR_STATUS = True
+            continue
+        LOG.info("Done")
+
+    if FORMAT_ERROR_STATUS:
+        sys.exit(1)
+    else:
+        sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/make_xpk.py b/tools/make_xpk.py
new file mode 100755 (executable)
index 0000000..1937e3e
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2013 Intel Corporation. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""
+Generate XPK package from package resources and the author private key.
+"""
+import argparse
+import os
+from Crypto.PublicKey import RSA
+from Crypto import Random
+from Crypto.Signature import PKCS1_v1_5
+from Crypto.Hash import SHA
+import traceback
+import zipfile
+import struct
+
+class XPKGenerator(object):
+  def __init__(self, source_dir, key_file, output_file):
+    """
+    source_dir  : the path to package resource directory.
+    key_file    : the path to RSA private key file, if the file is invalid,
+                  generator will create it automatically.
+    output_file : the output XPK file path.
+    """
+    self.source_dir_ = source_dir
+    self.output_file_ = output_file
+    if not os.path.exists(key_file):
+      try:
+        print('Start to generate RSA key')
+        rng = Random.new().read
+        self.RSAkey = RSA.generate(1024, rng)
+        kfile = open(key_file,'w')
+        kfile.write(self.RSAkey.exportKey('PEM'))
+        kfile.close()
+        print('Finished generating RSA key, saved as %s' % key_file)
+      except IOError:
+        if os.path.exists(key_file):
+          os.remove(key_file)
+        traceback.print_exc()
+    else:
+      self.RSAkey = RSA.importKey(open(key_file, 'r').read())
+    self.pubkey = self.RSAkey.publickey().exportKey('DER')
+
+  def Generate(self):
+    if not os.path.exists(self.source_dir_):
+      print("The source directory %s is invalid." % self.source_dir_)
+      return
+    try:
+      zip_file = '%s.tmp' % self.output_file_
+      self.__Compress(self.source_dir_, zip_file)
+      signer = PKCS1_v1_5.new(self.RSAkey)
+      zfile = open(zip_file, 'rb')
+      sha = SHA.new(zfile.read())
+      signature = signer.sign(sha)
+      xpk = open(self.output_file_, 'wb')
+      zfile.seek(0)
+      print('Generating XPK package: %s' % self.output_file_)
+      xpk.write('\x43\x72\x57\x6B')
+      xpk.write(struct.pack('<I', len(self.pubkey)))
+      xpk.write(struct.pack('<I', len(signature)))
+      xpk.write(self.pubkey)
+      xpk.write(signature)
+      xpk.write(zfile.read())
+      zfile.close()
+      xpk.close()
+      print('Generated new XPK package %s successfully.'
+            % self.output_file_)
+    except IOError:
+      if os.path.exists(self.output_file_):
+        os.remove(self.output_file_)
+      traceback.print_exc()
+    finally:
+      if os.path.exists(zip_file):
+        os.remove(zip_file)
+
+  @classmethod
+  def __Compress(cls, src, dst):
+    try:
+      print('Adding resources from %s into package.' % src)
+      zfile = zipfile.ZipFile(dst, 'w')
+      abs_src = os.path.abspath(src)
+      for dirname, _, files in os.walk(src):
+        for filename in files:
+          absname = os.path.abspath(os.path.join(dirname, filename))
+          relativename = absname[len(abs_src) + 1:]
+          zfile.write(absname, relativename)
+      zfile.close()
+      print('Generated package successfully.')
+    except IOError:
+      if os.path.exists(dst):
+        os.remove(dst)
+      traceback.print_exc()
+
+def main():
+  parser = argparse.ArgumentParser(
+      description='XPKGenerator arguments parser')
+  parser.add_argument('input',
+      help='Directory path to Crosswalk package resources')
+  parser.add_argument(
+      'key',
+      help='Path to private key file, a new private ' \
+           'key file will be generated if it is invalid.')
+  parser.add_argument(
+      '-o', '--output',
+      help='Path to generated XPK file',
+      default='default')
+  args = parser.parse_args()
+
+  output_file = args.output
+  if output_file == 'default':
+    head, tail = os.path.split(args.input)
+    while len(tail) == 0:
+      head, tail = os.path.split(head)
+    output_file = tail + '.xpk'
+  generator = XPKGenerator(args.input, args.key, output_file)
+  generator.Generate()
+
+if __name__ == '__main__':
+  main()
diff --git a/tools/template/reftest_reference_ref.html b/tools/template/reftest_reference_ref.html
new file mode 100644 (file)
index 0000000..24efb41
--- /dev/null
@@ -0,0 +1,42 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Your, Name <youremail@intel.com>
+
+-->
+
+<meta charset="utf-8">
+<title>[Test Area] Reference File</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<style>
+  [CSS for test]
+</style>
+<body>
+  <p>Test passes if [description of pass condition].</p>
+  [Content of test]
+</body>
diff --git a/tools/template/reftest_test_case.html b/tools/template/reftest_test_case.html
new file mode 100644 (file)
index 0000000..30fcddc
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Your, Name <youremail@intel.com>
+
+-->
+
+<meta charset="utf-8">
+<title>[Test Area]: [Title/Scope of Test]</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="http://www.w3.org/TR/[direct link to tested section]">
+<link rel="match" href="[path to reference file]">
+<meta name="flags" content="[requirement flags]">
+<meta name="assert" content="Test checks that [explanation of what you're trying to test].">
+<style>
+  [CSS for test]
+</style>
+<body>
+  <p>Test passes if [description of pass condition].</p>
+  [Content of test]
+</body>
diff --git a/tools/template/script_test_case.html b/tools/template/script_test_case.html
new file mode 100644 (file)
index 0000000..fb4da26
--- /dev/null
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2014 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Your, Name <youremail@intel.com>
+
+-->
+
+<meta charset="utf-8">
+<title>[Test Area]: [Title/Scope of Test]</title>
+<link rel="author" title="Intel" href="http://www.intel.com">
+<link rel="help" href="http://www.w3.org/TR/[direct link to tested section]">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="log"></div>
+<script>
+
+test(function() {
+  // [body of test function - must include at least one assert*() function]
+}, [Test Name]);
+
+// Include as many test() functions as you need
+
+</script>
diff --git a/tools/xml/README.md b/tools/xml/README.md
new file mode 100644 (file)
index 0000000..a918a26
--- /dev/null
@@ -0,0 +1,16 @@
+## Introduction
+
+This directory contains tools for verifying tests.full.xml and converting xml to csv or csv to xml.
+
+## Command
+  
+To convert tests.full.xml to csv file with command:
+    python xml2csv.py -c /path/to/tests.full.xml
+
+
+To convert csv file to tests.full.xml and tests.xml with command:
+    python csv2xml.py -c /path/***.csv
+
+
+To verify case path, id, purpose and set type are right with command:
+    python xmlverifier.py -v /path/***
diff --git a/tools/xml/csv2xml.py b/tools/xml/csv2xml.py
new file mode 100755 (executable)
index 0000000..4447e4d
--- /dev/null
@@ -0,0 +1,170 @@
+#!/usr/bin/python
+#encoding:utf-8
+
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Liu, xin <xinx.liu@intel.com>
+
+import os
+import csv
+import re
+import sys
+import platform
+import logging  
+import logging.handlers
+from xml.etree import ElementTree
+
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+def csv2full(csv_path, split_sign):
+    if not os.path.isfile(csv_path):
+        print '%s is not a file' % csv_path
+        return
+    name, ext = os.path.splitext(csv_path)
+    if not ext == '.csv':
+        print '%s is not a csv' % csv_path
+        return
+    LOG.info("+Convert csv to xml start ...")
+    csv_file = file(csv_path, 'rb')
+    csv_file.readline()
+    reader = csv.reader(csv_file)
+    csv_content = []
+    for line in reader:
+        csv_content.append(line)
+
+    csv_file.close()
+    suite_name = csv_content[0][16].split('/')[2]
+    category_name = csv_content[0][12]
+    set_name = name.split(split_sign)[-1]
+    folder = os.path.dirname(csv_path)
+    full_test_path = '%s%stests.full(%s).xml' % (folder, split_sign, set_name)
+    make_full_test(csv_content, full_test_path, suite_name, set_name, category_name)
+    LOG.info('General %s' % full_test_path)
+    test_path = '%s%stests(%s).xml' % (folder, split_sign, set_name)
+    make_test(csv_content, test_path, suite_name, set_name, category_name)
+    LOG.info('General %s' % test_path)
+    LOG.info("== Convert csv to xml finish==")
+
+def make_full_test(csv_content, full_test_name, suite_name, set_name, category_name):
+    full_test_file = open(full_test_name, 'w')
+    content = '<?xml version="1.0" encoding="UTF-8"?>\n<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>\n<test_definition>\n  <suite name="%s" launcher="WRTLauncher" category="%s">\n    <set name="%s">' % (suite_name, category_name, set_name)
+    for line in csv_content:
+        content += '\n      <testcase purpose="%s" type="%s" status="%s" component="%s" execution_type="%s" priority="%s" id="%s">\n        <description>\n          <test_script_entry>%s</test_script_entry>\n        </description>\n        <specs>\n          <spec>\n            <spec_assertion element_type="%s" element_name="%s" interface="%s" specification="%s" section="%s" category="%s"/>\n            <spec_url>%s</spec_url>\n            <spec_statement/>\n          </spec>\n        </specs>\n      </testcase>' % (line[1],
+         line[17],
+         line[15],
+         line[2],
+         line[4],
+         line[6],
+         line[0],
+         line[16],
+         line[7],
+         line[8],
+         line[9],
+         line[10],
+         line[11],
+         line[12],
+         line[13])
+
+    content += '\n    </set>\n  </suite>\n</test_definition>'
+    full_test_file.seek(0)
+    full_test_file.truncate()
+    full_test_file.write(content)
+    full_test_file.close()
+
+def make_test(csv_content, test_name, suite_name, set_name, category_name):
+    test_file = open(test_name, 'w')
+    content = '<?xml version="1.0" encoding="UTF-8"?>\n<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>\n<test_definition>\n  <suite name="%s" category="%s" launcher="WRTLauncher">\n    <set name="%s">' % (suite_name, category_name, set_name)
+    for line in csv_content:
+        content += '\n      <testcase component="%s" execution_type="%s" id="%s" purpose="%s">\n        <description>\n          <test_script_entry>%s</test_script_entry>\n        </description>\n      </testcase>' % (line[2],
+         line[4],
+         line[0],
+         line[1],
+         line[16])
+
+    content += '\n    </set>\n  </suite>\n</test_definition>'
+    test_file.seek(0)
+    test_file.truncate()
+    test_file.write(content)
+    test_file.close()
+
+def echo_about():
+    """
+    This function will print the user guide and stop toolkit.
+    """
+    about = 'csv2xml V1.0\n-c <path>  |  Convert csv file to tests.full.xml and tests.xml\n'
+    print about
+    sys.exit()
+
+def main():
+    """
+    main function will call different functions according to the command line argvs followed the toolkit.
+    """
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    sys_name = platform.system()
+    if sys_name == 'Windows':
+        split_sign = '\\'
+    elif sys_name == 'Linux':
+        split_sign = '/'
+    if len(sys.argv) != 3:
+        print 'Error: No enough argv!'
+        echo_about()
+    else:
+        {'-c': lambda : csv2full(sys.argv[2], split_sign)}[sys.argv[1]]()
+
+if __name__ == '__main__':
+    main()
diff --git a/tools/xml/xml2csv.py b/tools/xml/xml2csv.py
new file mode 100755 (executable)
index 0000000..07de9c3
--- /dev/null
@@ -0,0 +1,184 @@
+#!/usr/bin/python
+#encoding:utf-8
+
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Liu, xin <xinx.liu@intel.com>
+
+import os
+import csv
+import re
+import sys
+import platform
+import logging  
+import logging.handlers
+from xml.etree import ElementTree
+
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+def xml2csv(xml_path, split_sign):
+    if not os.path.isfile(xml_path):
+        print '%s is not a file' % xml_path
+        return
+    name, ext = os.path.splitext(xml_path)
+
+    if not ext == '.xml':
+        print '%s is not a xml' % xml_path
+        return
+    if not name.split(split_sign)[-1] == 'tests.full':
+        print name
+        print '%s is not tests.full.xml' % xml_path
+        return
+    LOG.info("+Convert xml to csv start ...")
+    folder = os.path.dirname(xml_path)
+    csv_path = folder + split_sign
+    make_csv(xml_path, csv_path)
+    LOG.info("===Convert xml to csv finish===")
+
+def make_csv(xml_path, csv_path):
+    root_node = ElementTree.parse(xml_path)
+    set_node = root_node.find('suite/set')
+    csv_file_name = set_node.attrib['name']
+    csv_path += csv_file_name + '.csv'
+    LOG.info("General: %s" % csv_path)
+    writer = csv.writer(file(csv_path, 'wb'))
+    writer.writerow(['Name',
+     'Description',
+     'Component',
+     'Onload_Delay',
+     'Execution_Type',
+     'Package',
+     'Priority',
+     'ElementType',
+     'ElementName',
+     'Interface',
+     'Specification',
+     'Section',
+     'Category',
+     'SpecURL',
+     'SpecStatement',
+     'Status',
+     'Test_Script_Entry',
+     'Type',
+     'PreCondition',
+     'PostCondition',
+     'StepNumber',
+     'StepDescription',
+     'StepExpectedResult'])
+    case_nodes = set_node.findall('testcase')
+    for case_node in case_nodes:
+        spec_assertion = case_node.find('specs/spec/spec_assertion')
+        element_type = ''
+        if 'element_type' in spec_assertion.attrib:
+            element_type = spec_assertion.attrib['element_type']
+        else:
+            element_type = 'true'
+        element_name = ''
+        if 'element_name' in spec_assertion.attrib:
+            element_name = spec_assertion.attrib['element_name']
+        writer.writerow([case_node.attrib['id'],
+         case_node.attrib['purpose'],
+         case_node.attrib['component'],
+         '',
+         case_node.attrib['execution_type'],
+         '',
+         case_node.attrib['priority'],
+         element_type,
+         element_name,
+         spec_assertion.attrib['interface'],
+         spec_assertion.attrib['specification'],
+         spec_assertion.attrib['section'],
+         spec_assertion.attrib['category'],
+         case_node.find('specs/spec/spec_url').text,
+         '',
+         case_node.attrib['status'],
+         case_node.find('description/test_script_entry').text,
+         case_node.attrib['type'],
+         '',
+         '',
+         '1',
+         '',
+         'pass'])
+
+def echo_about():
+    """
+    This function will print the user guide and stop toolkit.
+    """
+    about = 'xml2csv V1.0\n-c <path>  |  Convert tests.full.xml to csv file\n'
+    print about
+    sys.exit()
+
+def main():
+    """
+    main function will call different functions according to the command line argvs followed the toolkit.
+    """
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    sys_name = platform.system()
+    if sys_name == 'Windows':
+        split_sign = '\\'
+    elif sys_name == 'Linux':
+        split_sign = '/'
+    if len(sys.argv) != 3:
+        print 'Error: No enough argv!'
+        echo_about()
+    else:
+        {
+         '-c': lambda : xml2csv(sys.argv[2], split_sign)}[sys.argv[1]]()
+
+if __name__ == '__main__':
+    main()
diff --git a/tools/xml/xmlverifier.py b/tools/xml/xmlverifier.py
new file mode 100755 (executable)
index 0000000..4165ec9
--- /dev/null
@@ -0,0 +1,174 @@
+#!/usr/bin/python
+#encoding:utf-8
+
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Liu, xin <xinx.liu@intel.com>
+
+import os
+import csv
+import re
+import sys
+import platform
+import logging  
+import logging.handlers
+from xml.etree import ElementTree
+
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def verify_xml(xml_dir, split_sign):
+    if not os.path.isdir(xml_dir):
+        if not os.path.isfile(xml_dir):
+            LOG.error("Not dir and not file error")
+            return
+        else:
+            name, ext = os.path.splitext(xml_dir)
+            if not ext == '.xml':
+                print '%s is not a xml' % xml_path
+                return
+            else:
+                verify_path(xml_dir, split_sign)
+            
+    paths = [ item for item in os.walk(xml_dir) ]
+    for path, dirs, files in paths:
+        for filename in files:
+            if filename == "tests.full.xml":
+                verify_path(path + split_sign + filename, split_sign)
+
+def verify_path(xml_path, split_sign):
+    LOG.info("+Verify xml: " + xml_path)
+    try:
+        root_node = ElementTree.parse(xml_path)
+    except Exception as e:
+        LOG.error("xml parse error")
+        return False
+    suite_node = root_node.find('suite')
+    set_nodes = suite_node.findall('set')
+    id_list = []
+    purpose_list = []
+    set_type = ['js', 'wrt', 'ref', 'qunit', 'script', 'pyunit', 'androidunit']
+    for set_node in set_nodes:
+        try:
+            if set_node.attrib['type'] not in set_type:
+                LOG.info("set wrong type: " + set_node.attrib['name'])
+                break
+        except Exception as e:
+            LOG.error("set no type: " + set_node.attrib['name'])
+            return False
+        if set_node.attrib['type'] == 'script':
+            break
+        case_nodes = set_node.findall('testcase')
+        for case_node in case_nodes:
+            verify_path =  os.path.dirname(xml_path)
+            casepath = case_node.find('description/test_script_entry').text
+            if casepath is None:
+                break
+            id_list.append(case_node.attrib['id'])
+            purpose_list.append(case_node.attrib['purpose'])
+            arraypath =  casepath.split('?')[0].split(split_sign)
+            if len(arraypath) < 3:
+                break
+            if arraypath.count('http:') > 0:
+                del arraypath[0:5]
+            else:
+                del arraypath[0:3]
+            for i in range(len(arraypath)):
+                verify_path += split_sign + arraypath[i]
+            
+            if not os.path.exists(verify_path):
+                LOG.info("path no found: " + verify_path)
+    temp_array = []
+    for xid in range(len(id_list)):
+        if id_list.count(id_list[xid]) > 1 and id_list[xid] not in temp_array: 
+            LOG.info(str(id_list.count(id_list[xid])) + " same id : " + id_list[xid])
+            temp_array.append(id_list[xid])
+    del temp_array[:]
+    for xpurpose in range(len(purpose_list)):
+        if purpose_list.count(purpose_list[xpurpose]) > 1 and purpose_list[xpurpose] not in temp_array: 
+            LOG.info(str(purpose_list.count(purpose_list[xpurpose])) + " same purpose: " + purpose_list[xpurpose])
+            temp_array.append(purpose_list[xpurpose])
+    del temp_array[:]
+    LOG.info("===Verify case path, id and purpose finish===")
+
+def echo_about():
+    """
+    This function will print the user guide and stop toolkit.
+    """
+    about = 'xmlverifier V1.0\n-v <path>  |  Verify case path, id, purpose and set type are right\n'
+    print about
+    sys.exit()
+
+def main():
+    """
+    main function will call different functions according to the command line argvs followed the toolkit.
+    """
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    sys_name = platform.system()
+    if sys_name == 'Windows':
+        split_sign = '\\'
+    elif sys_name == 'Linux':
+        split_sign = '/'
+    if len(sys.argv) != 3:
+        print 'Error: No enough argv!'
+        echo_about()
+    else:
+        {'-v': lambda : verify_xml(sys.argv[2], split_sign)}[sys.argv[1]]()
+
+if __name__ == '__main__':
+    main()
diff --git a/tv/tct-behavior-tests/LICENSE.Apache-2.0 b/tv/tct-behavior-tests/LICENSE.Apache-2.0
new file mode 100755 (executable)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/tv/tct-behavior-tests/LICENSE.BSD-3 b/tv/tct-behavior-tests/LICENSE.BSD-3
new file mode 100755 (executable)
index 0000000..624f664
--- /dev/null
@@ -0,0 +1,28 @@
+This software is licensed under following license.
+
+****************************************************************************
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+****************************************************************************
diff --git a/tv/tct-behavior-tests/LICENSE.CC-BY-3.0 b/tv/tct-behavior-tests/LICENSE.CC-BY-3.0
new file mode 100755 (executable)
index 0000000..67323bd
--- /dev/null
@@ -0,0 +1,295 @@
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES.
+DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP.
+CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS
+MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+DAMAGES RESULTING FROM ITS USE.
+
+License
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS
+PUBLIC LICENSE("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR
+OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE
+OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND
+BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED
+TO BE A CONTRACT,
+THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR
+ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+a."Adaptation" means a work based upon the Work, or upon the Work and
+other pre-existing works, such as a translation, adaptation, derivative work,
+arrangement of music or other alterations of a literary or artistic work,
+or phonogram or performance and includes cinematographic adaptations
+or any other form in which the Work may be recast,
+transformed, or adapted including in any form recognizably derived from
+the original,
+except that a work that constitutes a Collection will not be considered
+an Adaptation for the purpose of this License.
+For the avoidance of doubt, where the Work is a musical work, performance
+or phonogram, the synchronization of the Work in timed-relation with a moving
+image ("synching") will be considered an Adaptation for the purpose of this License.
+b."Collection" means a collection of literary or artistic works,
+such as encyclopedias and anthologies, or performances,
+phonograms or broadcasts, or other works or subject matter other than
+works listed in Section 1(f) below, which, by reason of the selection
+and arrangement of their contents, constitute intellectual creations,
+in which the Work is included in its entirety in unmodified form
+along with one or more other contributions, each constituting separate
+and independent works in themselves, which together are assembled into
+a collective whole.
+A work that constitutes a Collection will not be considered an Adaptation
+(as defined above) for the purposes of this License.
+c."Distribute" means to make available to the public the original and
+copies of the Work or Adaptation, as appropriate, through sale or
+other transfer of ownership.
+d."Licensor" means the individual, individuals, entity or entities that offer(s)
+the Work under the terms of this License.
+e."Original Author" means, in the case of a literary or artistic work,
+the individual, individuals,
+entity or entities who created the Work or if no individual or entity can be identified,
+the publisher; and in addition
+(i) in the case of a performance the actors, singers, musicians, dancers,
+and other persons who act, sing, deliver, declaim, play in, interpret or
+otherwise perform literary or artistic works or expressions of folklore;
+(ii) in the case of a phonogram the producer being the person or legal entity
+who first fixes the sounds of a performance or other sounds; and,
+(iii) in the case of broadcasts, the organization that transmits the broadcast.
+f."Work" means the literary and/or artistic work offered under the terms
+of this License including without limitation any production in the literary,
+scientific and artistic domain, whatever may be the mode or form of its expression
+including digital form, such as a book, pamphlet and other writing; a lecture,
+address, sermon or other work of the same nature; a dramatic or dramatico-musical work;
+a choreographic work or entertainment in dumb show;
+a musical composition with or without words; a cinematographic work to which
+are assimilated works expressed by a process analogous to cinematography;
+a work of drawing, painting, architecture, sculpture, engraving or lithography;
+a photographic work to which are assimilated works expressed by a process analogous
+to photography; a work of applied art; an illustration, map, plan, sketch or
+three-dimensional work relative to geography, topography, architecture or science;
+a performance; a broadcast; a phonogram; a compilation of data to the extent it
+is protected as a copyrightable work; or a work performed by a variety or
+circus performer to the extent it is not otherwise considered a literary or artistic work.
+g."You" means an individual or entity exercising rights under this License
+who has not previously violated the terms of this License with respect to the Work,
+or who has received express permission from the Licensor to exercise rights
+under this License despite a previous violation.
+h."Publicly Perform" means to perform public recitations of the Work and to
+communicate to the public those public recitations, by any means or process,
+including by wire or wireless means or public digital performances;
+to make available to the public Works in such a way that members of the public
+may access these Works from a place and at a place individually chosen by them;
+to perform the Work to the public by any means or process and the communication
+to the public of the performances of the Work, including by public digital performance;
+to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+i."Reproduce" means to make copies of the Work by any means including without
+limitation by sound or visual recordings and the right of fixation and
+reproducing fixations of the Work, including storage of a protected performance
+or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
+or restrict any uses free from copyright or rights arising from limitations or
+exceptions that are provided for in connection with the copyright protection
+under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License,
+Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual
+(for the duration of the applicable copyright) license to exercise the rights
+in the Work as stated below:
+
+a.to Reproduce the Work, to incorporate the Work into one or more Collections,
+and to Reproduce the Work as incorporated in the Collections;
+b.to create and Reproduce Adaptations provided that any such Adaptation,
+including any translation in any medium, takes reasonable steps to clearly label,
+demarcate or otherwise identify that changes were made to the original Work.
+For example, a translation could be marked "The original work was translated
+from English to Spanish," or a modification could indicate
+"The original work has been modified.";
+c.to Distribute and Publicly Perform the Work including as incorporated
+in Collections; and,
+d.to Distribute and Publicly Perform Adaptations.
+e.For the avoidance of doubt:
+
+i.Non-waivable Compulsory License Schemes. In those jurisdictions in which
+the right to collect royalties through any statutory or compulsory licensing
+scheme cannot be waived, the Licensor reserves the exclusive right to collect
+such royalties for any exercise by You of the rights granted under this License;
+ii.Waivable Compulsory License Schemes. In those jurisdictions in which the right
+to collect royalties through any statutory or compulsory licensing scheme can be waived,
+the Licensor waives the exclusive right to collect such royalties for any exercise
+by You of the rights granted under this License; and,
+iii.Voluntary License Schemes. The Licensor waives the right to collect royalties,
+whether individually or, in the event that the Licensor is a member of a collecting
+society that administers voluntary licensing schemes, via that society,
+from any exercise by You of the rights granted under this License.
+The above rights may be exercised in all media and formats whether now known
+or hereafter devised. The above rights include the right to make such modifications
+as are technically necessary to exercise the rights in other media and formats.
+Subject to Section 8(f), all rights not expressly granted by Licensor
+are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made
+subject to and limited by the following restrictions:
+
+a.You may Distribute or Publicly Perform the Work only under the terms of
+this License. You must include a copy of, or the Uniform Resource Identifier (URI)
+for, this License with every copy of the Work You Distribute or Publicly Perform.
+You may not offer or impose any terms on the Work that restrict the terms of
+this License or the ability of the recipient of the Work to exercise
+the rights granted to that recipient under the terms of the License.
+You may not sublicense the Work. You must keep intact all notices that refer
+to this License and to the disclaimer of warranties with every copy of
+the Work You Distribute or Publicly Perform.
+When You Distribute or Publicly Perform the Work,
+You may not impose any effective technological measures on the Work
+that restrict the ability of a recipient of the Work from You to exercise
+the rights granted to that recipient under the terms of the License.
+This Section 4(a) applies to the Work as incorporated in a Collection,
+but this does not require the Collection apart from the Work itself
+to be made subject to the terms of this License.
+If You create a Collection, upon notice from any Licensor You must,
+to the extent practicable, remove from the Collection any credit
+as required by Section 4(b), as requested. If You create an Adaptation,
+upon notice from any Licensor You must, to the extent practicable,
+remove from the Adaptation any credit as required by Section 4(b),
+as requested. b.If You Distribute, or Publicly Perform the Work or
+any Adaptations or Collections, You must, unless a request has been made
+pursuant to Section 4(a), keep intact all copyright notices for the Work
+and provide, reasonable to the medium or means You are utilizing:
+(i) the name of the Original Author (or pseudonym, if applicable)
+if supplied, and/or if the Original Author and/or Licensor designate
+another party or parties (e.g., a sponsor institute, publishing entity, journal)
+for attribution ("Attribution Parties") in Licensor's copyright notice,
+terms of service or by other reasonable means,
+the name of such party or parties; (ii) the title of the Work if supplied;
+(iii) to the extent reasonably practicable, the URI, if any,
+that Licensor specifies to be associated with the Work,
+unless such URI does not refer to the copyright notice or licensing information
+for the Work; and (iv) , consistent with Section 3(b),
+in the case of an Adaptation,
+a credit identifying the use of the Work in the Adaptation
+(e.g., "French translation of the Work by Original Author," or
+"Screenplay based on original Work by Original Author").
+The credit required by this Section 4(b) may be implemented
+in any reasonable manner; provided, however, that in the case of
+a Adaptation or Collection, at a minimum such credit will appear,
+if a credit for all contributing authors of the Adaptation or Collection appears,
+then as part of these credits and in a manner at least as prominent
+as the credits for the other contributing authors.
+For the avoidance of doubt, You may only use the credit required by this Section
+for the purpose of attribution in the manner set out above and,
+by exercising Your rights under this License, You may not implicitly
+or explicitly assert or imply any connection with, sponsorship or
+endorsement by the Original Author, Licensor and/or Attribution Parties,
+as appropriate, of You or Your use of the Work, without the separate,
+express prior written permission of the Original Author,
+Licensor and/or Attribution Parties.
+c.Except as otherwise agreed in writing by the Licensor or as may be otherwise
+permitted by applicable law, if You Reproduce, Distribute or Publicly Perform
+the Work either by itself or as part of any Adaptations or Collections,
+You must not distort, mutilate, modify or take other derogatory action
+in relation to the Work which would be prejudicial to the Original Author's honor
+or reputation. Licensor agrees that in those jurisdictions (e.g. Japan),
+in which any exercise of the right granted in Section 3(b) of this License
+(the right to make Adaptations) would be deemed to be a distortion,
+mutilation, modification or other derogatory action prejudicial to
+the Original Author's honor and reputation, the Licensor will waive or
+not assert, as appropriate, this Section, to the fullest extent permitted
+by the applicable national law, to enable You to reasonably exercise
+Your right under Section 3(b) of this License (right to make Adaptations)
+but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
+LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES
+OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
+OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+WHETHER OR NOT DISCOVERABLE.
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES,
+SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
+IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY
+FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
+EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+a.This License and the rights granted hereunder will terminate automatically
+upon any breach by You of the terms of this License.
+Individuals or entities who have received Adaptations or Collections
+from You under this License, however,
+will not have their licenses terminated provided such individuals or entities
+remain in full compliance with those licenses.
+Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+b.Subject to the above terms and conditions, the license granted here is
+perpetual (for the duration of the applicable copyright in the Work).
+Notwithstanding the above, Licensor reserves the right to release the Work
+under different license terms or to stop distributing the Work at any time;
+provided, however that any such election will not serve to withdraw
+this License (or any other license that has been, or is required to be,
+granted under the terms of this License),
+and this License will continue in full force and effect unless terminated
+as stated above.
+
+8. Miscellaneous
+
+a.Each time You Distribute or Publicly Perform the Work or a Collection,
+the Licensor offers to the recipient a license to the Work on the same terms
+and conditions as the license granted to You under this License.
+b.Each time You Distribute or Publicly Perform an Adaptation,
+Licensor offers to the recipient a license to the original Work on the same terms
+and conditions as the license granted to You under this License.
+c.If any provision of this License is invalid or unenforceable
+under applicable law, it shall not affect the validity or enforceability
+of the remainder of the terms of this License, and without further action
+by the parties to this agreement, such provision shall be reformed
+to the minimum extent necessary to make such provision valid and enforceable.
+d.No term or provision of this License shall be deemed waived and
+no breach consented to unless such waiver or consent shall be in writing
+and signed by the party to be charged with such waiver or consent.
+e.This License constitutes the entire agreement between the parties
+with respect to the Work licensed here. There are no understandings,
+agreements or representations with respect to the Work not specified here.
+Licensor shall not be bound by any additional provisions that may appear
+in any communication from You. This License may not be modified
+without the mutual written agreement of the Licensor and You.
+f.The rights granted under, and the subject matter referenced,
+in this License were drafted utilizing the terminology of the Berne Convention
+for the Protection of Literary and Artistic Works (as amended on September 28, 1979),
+the Rome Convention of 1961, the WIPO Copyright Treaty of 1996,
+the WIPO Performances and Phonograms Treaty of 1996
+and the Universal Copyright Convention (as revised on July 24, 1971).
+These rights and subject matter take effect in the relevant jurisdiction
+in which the License terms are sought to be enforced according to
+the corresponding provisions of the implementation of those treaty provisions
+in the applicable national law. If the standard suite of rights granted
+under applicable copyright law includes additional rights not granted
+under this License, such additional rights are deemed to be included in the License;
+this License is not intended to restrict the license of any rights under applicable law.
+Creative Commons Notice
+Creative Commons is not a party to this License, and makes no warranty
+whatsoever in connection with the Work. Creative Commons will not be liable to
+You or any party on any legal theory for any damages whatsoever,
+including without limitation any general, special, incidental
+or consequential damages arising in connection to this license.
+Notwithstanding the foregoing two (2) sentences,
+if Creative Commons has expressly identified itself as the Licensor hereunder,
+it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public
+that the Work is licensed under the CCPL, Creative Commons does not authorize
+the use by either party of the trademark "Creative Commons" or any related trademark
+or logo of Creative Commons without the prior written consent of Creative Commons.
+Any permitted use will be in compliance with Creative Commons'
+then-current trademark usage guidelines, as may be published on its website
+or otherwise made available upon request from time to time.
+For the avoidance of doubt, this trademark restriction does not form part
+of this License.
+
+Creative Commons may be contacted at http://creativecommons.org/.
diff --git a/tv/tct-behavior-tests/Makefile.am b/tv/tct-behavior-tests/Makefile.am
new file mode 100755 (executable)
index 0000000..f2239c7
--- /dev/null
@@ -0,0 +1,32 @@
+##
+# Copyright (c) 2012 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this list
+#   of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#               Fan, Yugang <yugang.fan@intel.com>
+#
+
+docdir = /opt/tct-behavior-tests
+dist_doc_DATA = README LICENSE.Apache-2.0 LICENSE.BSD-3 LICENSE.CC-BY-3.0
diff --git a/tv/tct-behavior-tests/README b/tv/tct-behavior-tests/README
new file mode 100755 (executable)
index 0000000..251058c
--- /dev/null
@@ -0,0 +1,14 @@
+1. How to build from source
+
+1.1. Package installation
+    Check that the following packages are installed on the target platform. 
+     (Install them if they are not installed yet.)
+     zip
+
+1.2. Get signing tool to sign WGT.
+    Get signing tool and put it under tools/ folder
+     # cp -ar /path/to/signing /path/to/behavior/tools/
+
+1.3. Package test suite using pack.sh.
+     # ./pack.py -t wgt
+     Then tct-behavior-tests zip packages will be generated under current folder.
diff --git a/tv/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf b/tv/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..64b5e41
Binary files /dev/null and b/tv/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf differ
diff --git a/tv/tct-behavior-tests/askpolicy.sh b/tv/tct-behavior-tests/askpolicy.sh
new file mode 100755 (executable)
index 0000000..1c39bdd
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+for i in `grep -r "0xA" /var/cynara/db/_ | grep $1`
+do
+    CLIENT=`echo $i | cut -d ";" -f1`
+    USER=`echo $i | cut -d ";" -f2`
+    PRIVILEGE=`echo $i | cut -d ";" -f3`
+    #echo "cyad --erase=\"\" -r=no -c $CLIENT -u $USER -p $PRIVILEGE"
+    cyad --erase="" -r=no -c $CLIENT -u $USER -p $PRIVILEGE
+done
diff --git a/tv/tct-behavior-tests/autogen b/tv/tct-behavior-tests/autogen
new file mode 100755 (executable)
index 0000000..b292d7b
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+##
+# Copyright (c) 2012 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this list
+#   of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#               Fan, Yugang <yugang.fan@intel.com>
+#
+
+autoreconf --install
+automake --add-missing --copy >/dev/null 2>&1
diff --git a/tv/tct-behavior-tests/config.xml b/tv/tct-behavior-tests/config.xml
new file mode 100755 (executable)
index 0000000..64dc712
--- /dev/null
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://tizen.org/test/tct-behavior-tests" version="2.4" viewmodes="">
+    <access origin="*"/>
+    <tizen:application id="tctbhtests.TCTBehaviorTests" package="tctbhtests" required_version="2.4"/>
+    <icon src="icon.png" height="117" width="117"/>
+    <name>tct-behavior-tests</name>
+    <tizen:privilege name="http://tizen.org/privilege/mediacapture"/>
+    <tizen:privilege name="http://tizen.org/privilege/alarm"/>
+    <tizen:privilege name="http://tizen.org/privilege/application.launch"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/download"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/system"/>
+    <tizen:privilege name="http://tizen.org/privilege/internet"/>
+    <tizen:privilege name="http://tizen.org/privilege/package.info"/>
+    <tizen:privilege name="http://tizen.org/privilege/telephony"/>
+    <tizen:privilege name="http://tizen.org/privilege/packagemanager.install"/>
+    <tizen:setting context-menu="disable" background-support="disable" encryption="disable" install-location="auto"/>
+</widget>
diff --git a/tv/tct-behavior-tests/configure.ac b/tv/tct-behavior-tests/configure.ac
new file mode 100755 (executable)
index 0000000..a4acaa0
--- /dev/null
@@ -0,0 +1,34 @@
+##
+# Copyright (c) 2012 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without modification,
+# are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this list
+#   of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright notice,
+#   this list of conditions and the following disclaimer in the documentation
+#   and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#               Fan, Yugang <yugang.fan@intel.com>
+#
+
+AC_INIT([tct-behavior-tests], [2.4], [yugang.fan@intel.com])
+AM_INIT_AUTOMAKE([-Wall -Werror foreign])
+AC_CONFIG_FILES([Makefile])
+AC_OUTPUT
diff --git a/tv/tct-behavior-tests/css/images/COPYING b/tv/tct-behavior-tests/css/images/COPYING
new file mode 100755 (executable)
index 0000000..ae807ae
--- /dev/null
@@ -0,0 +1,18 @@
+------------------------------------------------------------------------------------------
+ajax-loader.gif
+icons-18-black.png
+icons-18-white.png
+icons-36-black.png
+icons-36-white.png
+
+These files come from
+https://github.com/jquery/jquery-mobile/tree/1.2-stable/css/themes/default/images
+without any modification.
+
+They are licensed under the jQuery Mobile (https://jquery.org/license/) [MIT license]
+
+------------------------------------------------------------------------------------------
+fail.png
+pass.png
+
+These files are created by Intel test developers under 3-Clause BSD License.
diff --git a/tv/tct-behavior-tests/css/images/ajax-loader.gif b/tv/tct-behavior-tests/css/images/ajax-loader.gif
new file mode 100755 (executable)
index 0000000..fd1a189
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/ajax-loader.gif differ
diff --git a/tv/tct-behavior-tests/css/images/fail.png b/tv/tct-behavior-tests/css/images/fail.png
new file mode 100755 (executable)
index 0000000..fa6a888
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/fail.png differ
diff --git a/tv/tct-behavior-tests/css/images/icons-18-black.png b/tv/tct-behavior-tests/css/images/icons-18-black.png
new file mode 100755 (executable)
index 0000000..ce1b758
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/icons-18-black.png differ
diff --git a/tv/tct-behavior-tests/css/images/icons-18-white.png b/tv/tct-behavior-tests/css/images/icons-18-white.png
new file mode 100755 (executable)
index 0000000..1ab0127
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/icons-18-white.png differ
diff --git a/tv/tct-behavior-tests/css/images/icons-36-black.png b/tv/tct-behavior-tests/css/images/icons-36-black.png
new file mode 100755 (executable)
index 0000000..1a59d7c
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/icons-36-black.png differ
diff --git a/tv/tct-behavior-tests/css/images/icons-36-white.png b/tv/tct-behavior-tests/css/images/icons-36-white.png
new file mode 100755 (executable)
index 0000000..5647bdc
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/icons-36-white.png differ
diff --git a/tv/tct-behavior-tests/css/images/pass.png b/tv/tct-behavior-tests/css/images/pass.png
new file mode 100755 (executable)
index 0000000..e215f83
Binary files /dev/null and b/tv/tct-behavior-tests/css/images/pass.png differ
diff --git a/tv/tct-behavior-tests/css/jquery.mobile.css b/tv/tct-behavior-tests/css/jquery.mobile.css
new file mode 100755 (executable)
index 0000000..3773a21
--- /dev/null
@@ -0,0 +1,2609 @@
+/*
+* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Released under the MIT license.
+* http://jquery.org/license
+*
+*/
+
+
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+       border: 1px solid               #333 /*{a-bar-border}*/;
+       background:                     #111 /*{a-bar-background-color}*/;
+       color:                                  #fff /*{a-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+       color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a a.ui-link {
+       color: #7cc4e7 /*{a-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-a a.ui-link:visited {
+    color: #2489ce /*{a-bar-link-visited}*/;
+}
+.ui-bar-a a.ui-link:hover {
+       color: #2489ce /*{a-bar-link-hover}*/;
+}
+.ui-bar-a a.ui-link:active {
+       color: #2489ce /*{a-bar-link-active}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+       border: 1px solid               #444 /*{a-body-border}*/;
+       background:                     #222 /*{a-body-background-color}*/;
+       color:                                  #fff /*{a-body-color}*/;
+       text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);       
+}
+.ui-overlay-a {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+       color:  #fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+       color: #2489ce /*{a-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-a .ui-link:visited {
+    color: #2489ce /*{a-body-link-visited}*/;
+}
+.ui-body-a .ui-link:hover {
+       color: #2489ce /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+       color: #2489ce /*{a-body-link-active}*/;
+}
+.ui-btn-up-a {
+       border: 1px solid               #111 /*{a-bup-border}*/;
+       background:                     #333 /*{a-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bup-color}*/;
+       text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a:visited,
+.ui-btn-up-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+       border: 1px solid               #000 /*{a-bhover-border}*/;
+       background:                     #444 /*{a-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bhover-color}*/;
+       text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+       border: 1px solid               #000 /*{a-bdown-border}*/;
+       background:                     #222 /*{a-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bdown-color}*/;
+       text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a:visited,
+.ui-btn-down-a:hover,
+.ui-btn-down-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+       border: 1px solid               #456f9a /*{b-bar-border}*/;
+       background:                     #5e87b0 /*{b-bar-background-color}*/;
+       color:                                  #fff /*{b-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+       color:  #fff /*{b-bar-color}*/;
+}
+.ui-bar-b a.ui-link {
+       color: #ddf0f8 /*{b-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-b a.ui-link:visited {
+    color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-bar-b a.ui-link:hover {
+       color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b a.ui-link:active {
+       color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+       border: 1px solid               #999 /*{b-body-border}*/;
+       background:                     #f3f3f3 /*{b-body-background-color}*/;
+       color:                                  #222 /*{b-body-color}*/;
+       text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+       color:  #333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+       color: #2489ce /*{b-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-b .ui-link:visited {
+    color: #2489ce /*{b-body-link-visited}*/;
+}
+.ui-body-b .ui-link:hover {
+       color: #2489ce /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+       color: #2489ce /*{b-body-link-active}*/;
+}
+.ui-btn-up-b {
+       border: 1px solid               #044062 /*{b-bup-border}*/;
+       background:                     #396b9e /*{b-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bup-color}*/;
+       text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b:visited,
+.ui-btn-up-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+       border: 1px solid               #00415e /*{b-bhover-border}*/;
+       background:                     #4b88b6 /*{b-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bhover-color}*/;
+       text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b:visited,
+.ui-btn-hover-b:hover,
+.ui-btn-hover-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+       border: 1px solid               #225377 /*{b-bdown-border}*/;
+       background:                     #4e89c5 /*{b-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bdown-color}*/;
+       text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b:visited,
+.ui-btn-down-b:hover,
+.ui-btn-down-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+       border: 1px solid               #b3b3b3 /*{c-bar-border}*/;
+       background:                     #eee /*{c-bar-background-color}*/;
+       color:                                  #3e3e3e /*{c-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/      #fff /*{c-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+       color:  #3e3e3e /*{c-bar-color}*/;
+}
+.ui-bar-c a.ui-link {
+       color: #7cc4e7 /*{c-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-c a.ui-link:visited {
+    color: #2489ce /*{c-bar-link-visited}*/;
+}
+.ui-bar-c a.ui-link:hover {
+       color: #2489ce /*{c-bar-link-hover}*/;
+}
+.ui-bar-c a.ui-link:active {
+       color: #2489ce /*{c-bar-link-active}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+       border: 1px solid               #aaa /*{c-body-border}*/;
+       color:                                  #333 /*{c-body-color}*/;
+       text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+       background:                     #f9f9f9 /*{c-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+       color:  #333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+       color: #2489ce /*{c-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-c .ui-link:visited {
+    color: #2489ce /*{c-body-link-visited}*/;
+}
+.ui-body-c .ui-link:hover {
+       color: #2489ce /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+       color: #2489ce /*{c-body-link-active}*/;
+}
+.ui-btn-up-c {
+       border: 1px solid               #ccc /*{c-bup-border}*/;
+       background:                     #eee /*{c-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bup-color}*/;
+       text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c:visited,
+.ui-btn-up-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+       border: 1px solid               #bbb /*{c-bhover-border}*/;
+       background:                     #dfdfdf /*{c-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bhover-color}*/;
+       text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c:visited,
+.ui-btn-hover-c:hover,
+.ui-btn-hover-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+       border: 1px solid               #bbb /*{c-bdown-border}*/;
+       background:                     #d6d6d6 /*{c-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bdown-color}*/;
+       text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c:visited,
+.ui-btn-down-c:hover,
+.ui-btn-down-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+       border: 1px solid               #bbb /*{d-bar-border}*/;
+       background:                     #bbb /*{d-bar-background-color}*/;
+       color:                                  #333 /*{d-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+       color:  #333 /*{d-bar-color}*/;
+}
+.ui-bar-d a.ui-link {
+       color: #2489ce /*{d-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-d a.ui-link:visited {
+    color: #2489ce /*{d-bar-link-visited}*/;
+}
+.ui-bar-d a.ui-link:hover {
+       color: #2489ce /*{d-bar-link-hover}*/;
+}
+.ui-bar-d a.ui-link:active {
+       color: #2489ce /*{d-bar-link-active}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+       border: 1px solid               #bbb /*{d-body-border}*/;
+       color:                                  #333 /*{d-body-color}*/;
+       text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/     #fff /*{d-body-shadow-color}*/;
+       background:                     #fff /*{d-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+       color:  #333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+       color: #2489ce /*{d-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-d .ui-link:visited {
+    color: #2489ce /*{d-body-link-visited}*/;
+}
+.ui-body-d .ui-link:hover {
+       color: #2489ce /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+       color: #2489ce /*{d-body-link-active}*/;
+}
+.ui-btn-up-d {
+       border: 1px solid               #bbb /*{d-bup-border}*/;
+       background:                     #fff /*{d-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bup-color}*/;
+       text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d:visited,
+.ui-btn-up-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+       border: 1px solid               #aaa /*{d-bhover-border}*/;
+       background:                     #eee /*{d-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bhover-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/       #fff /*{d-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d:visited,
+.ui-btn-hover-d:hover,
+.ui-btn-hover-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+       border: 1px solid               #aaa /*{d-bdown-border}*/;
+       background:                     #eee /*{d-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bdown-color}*/;
+       text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/  #fff /*{d-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d:visited,
+.ui-btn-down-d:hover,
+.ui-btn-down-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-e a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-e a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-e a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-e a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-e .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-e .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-e {
+       border: 1px solid               #f4c63f /*{e-bup-border}*/;
+       background:                     #fadb4e /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e:visited,
+.ui-btn-up-e a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+       border: 1px solid               #f2c43d /*{e-bhover-border}*/;
+       background:                     #fbe26f /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e:visited,
+.ui-btn-hover-e:hover,
+.ui-btn-hover-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+       border: 1px solid               #f2c43d /*{e-bdown-border}*/;
+       background:                     #fceda7 /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e:visited,
+.ui-btn-down-e:hover,
+.ui-btn-down-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* r
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-r {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-r,
+.ui-bar-r input,
+.ui-bar-r select,
+.ui-bar-r textarea,
+.ui-bar-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-r .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-r a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-r a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-r a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-r a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-r,
+.ui-overlay-r {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-r {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-r,
+.ui-body-r input,
+.ui-body-r select,
+.ui-body-r textarea,
+.ui-body-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-r .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-r .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-r .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-r .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-r .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bup-border}*/;
+       background:                     rgb(241, 163, 150) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bup-background-start}*/), rgb(241, 163, 150) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-r:visited,
+.ui-btn-up-r a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bhover-border}*/;
+       background:                     rgb(245, 219, 196) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bhover-background-start}*/), to( rgb(241, 163, 150) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-r:visited,
+.ui-btn-hover-r:hover,
+.ui-btn-hover-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-r {
+       border: 1px solid               rgb(250, 230, 220) /*{e-bdown-border}*/;
+       background:                     rgb(250, 230, 220) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(250, 230, 220) /*{e-bdown-background-start}*/), to( rgb(241, 163, 150) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-r:visited,
+.ui-btn-down-r:hover,
+.ui-btn-down-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-r,
+.ui-btn-hover-r,
+.ui-btn-down-r {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* g
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-g {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-g,
+.ui-bar-g input,
+.ui-bar-g select,
+.ui-bar-g textarea,
+.ui-bar-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-g .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-g a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-g a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-g a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-g a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-g,
+.ui-overlay-g {
+        border: 1px solid               #f7c942 /*{e-body-border}*/;
+        color:                                  #222 /*{e-body-color}*/;
+        text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+        background:                     #fff9df /*{e-body-background-color}*/;
+        background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+        background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+        background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+        background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+        background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+        background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+       //background-image:         linear-gradient( rgb(253, 102, 127) /*{e-body-background-start}*/, rgb(189, 215, 175) /*{e-body-background-end}*/);
+}
+.ui-overlay-g {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-g,
+.ui-body-g input,
+.ui-body-g select,
+.ui-body-g textarea,
+.ui-body-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-g .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-g .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-g .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-g .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-g .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bup-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bup-background-start}*/), to( rgb(99, 220, 179) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-g:visited,
+.ui-btn-up-g a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bhover-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bhover-background-start}*/), to( rgb(99, 220, 179) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-g:visited,
+.ui-btn-hover-g:hover,
+.ui-btn-hover-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-g {
+       border: 1px solid               rgb(220, 250, 250) /*{e-bdown-border}*/;
+       background:                     rgb(220, 250, 250) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 250) /*{e-bdown-background-start}*/), to( rgb(99, 220, 179) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-g:visited,
+.ui-btn-down-g:hover,
+.ui-btn-down-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-g,
+.ui-btn-hover-g,
+.ui-btn-down-g {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* Structure */
+/* links within "buttons" 
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+       text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+       border: 1px solid               #2373a5 /*{global-active-border}*/;
+       background:                     #5393c5 /*{global-active-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{global-active-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+       text-decoration: none;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active:visited,
+.ui-btn-active:hover,
+.ui-btn-active a.ui-link-inherit {
+       color:                                  #fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+       border-top: 1px solid   #fff;
+       border-color:                   rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+       }
+.ui-corner-right {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+       -moz-border-radius:                             .6em /*{global-radii-blocks}*/;
+       -webkit-border-radius:                          .6em /*{global-radii-blocks}*/;
+       border-radius:                                          .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+       -moz-border-radius:                                0;
+       -webkit-border-radius:                             0;
+       border-radius:                                             0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+       border-bottom: rgb(130,130,130);
+       border-bottom: rgba(130,130,130,.3);
+       border-bottom-width: 1px;
+       border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+       filter: Alpha(Opacity=30);
+       opacity: .3;
+       zoom: 1;
+}
+.ui-disabled,
+.ui-disabled a {
+       cursor: default !important;
+       pointer-events: none;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+       background:                                             #666 /*{global-icon-color}*/;
+       background:                                             rgba(0,0,0,.4) /*{global-icon-disc}*/;
+       background-image: url(images/icons-18-white.png) /*{global-icon-set}*/;
+       background-repeat: no-repeat;
+       -moz-border-radius:                             9px;
+       -webkit-border-radius:                          9px;
+       border-radius:                                          9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+       background:                                             #fff;
+       background:                                             rgba(255,255,255,.3);
+       background-image: url(images/icons-18-black.png);
+       background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+       only screen and (min--moz-device-pixel-ratio: 1.5),
+       only screen and (min-resolution: 240dpi) {
+       
+       .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+       .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+       .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+       .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 
+       .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+               background-image: url(images/icons-36-white.png);
+               -moz-background-size: 776px 18px;
+               -o-background-size: 776px 18px;
+               -webkit-background-size: 776px 18px;
+               background-size: 776px 18px;
+       }
+       .ui-icon-alt {
+               background-image: url(images/icons-36-black.png);
+       }
+}
+/* plus minus */
+.ui-icon-plus {
+       background-position:    -0 50%;
+}
+.ui-icon-minus {
+       background-position:    -36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+       background-position:    -72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+       background-position:    -108px 50%;
+}
+.ui-icon-arrow-l {
+       background-position:    -144px 50%;
+}
+.ui-icon-arrow-u {
+       background-position:    -180px 50%;
+}
+.ui-icon-arrow-d {
+       background-position:    -216px 50%;
+}
+/* misc */
+.ui-icon-check {
+       background-position:    -252px 50%;
+}
+.ui-icon-gear {
+       background-position:    -288px 50%;
+}
+.ui-icon-refresh {
+       background-position:    -324px 50%;
+}
+.ui-icon-forward {
+       background-position:    -360px 50%;
+}
+.ui-icon-back {
+       background-position:    -396px 50%;
+}
+.ui-icon-grid {
+       background-position:    -432px 50%;
+}
+.ui-icon-star {
+       background-position:    -468px 50%;
+}
+.ui-icon-alert {
+       background-position:    -504px 50%;
+}
+.ui-icon-info {
+       background-position:    -540px 50%;
+}
+.ui-icon-home {
+       background-position:    -576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+       background-position:    -612px 50%;
+}
+.ui-icon-checkbox-off {
+       background-position:    -684px 50%;
+}
+.ui-icon-checkbox-on {
+       background-position:    -648px 50%;
+}
+.ui-icon-radio-off {
+       background-position:    -756px 50%;
+}
+.ui-icon-radio-on {
+       background-position:    -720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon,
+.ui-selectmenu-list .ui-icon {
+       -moz-border-radius: 3px;
+       -webkit-border-radius: 3px;
+       border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+       background-color: transparent;  
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+       background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+       background: url(images/ajax-loader.gif);
+       background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+        -moz-border-radius-topright:           1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+       -moz-border-radius:                             1em /*{global-radii-buttons}*/;
+       -webkit-border-radius:                          1em /*{global-radii-buttons}*/;
+       border-radius:                                          1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+       background: #666;
+       filter: Alpha(Opacity=50);
+       opacity: .5;
+       position: absolute;
+       width: 100%;
+       height: 100%;
+}
+.ui-overlay-shadow {
+       -moz-box-shadow: 0px 0px 12px                   rgba(0,0,0,.6);
+       -webkit-box-shadow: 0px 0px 12px                rgba(0,0,0,.6);
+       box-shadow: 0px 0px 12px                                rgba(0,0,0,.6);
+}
+.ui-shadow {
+       -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                       rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow  {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.3);
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.3);
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+       -moz-box-shadow: inset 0px 1px 4px              rgba(0,0,0,.2);
+       -webkit-box-shadow: inset 0px 1px 4px   rgba(0,0,0,.2);
+       box-shadow: inset 0px 1px 4px                   rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus, .ui-link-inherit:focus {
+       outline: 0;
+}
+.ui-btn.ui-focus {
+       z-index: 1;
+}
+.ui-focus,
+.ui-btn:focus {
+       -moz-box-shadow: inset 0px 0px 3px              #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: inset 0px 0px 3px   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       box-shadow: inset 0px 0px 3px                   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+}
+.ui-input-text.ui-focus,
+.ui-input-search.ui-focus {
+       -moz-box-shadow: 0px 0px 12px                   #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: 0px 0px 12px                #387bbe /*{global-active-background-color}*/;
+       box-shadow: 0px 0px 12px                                        #387bbe /*{global-active-background-color}*/;   
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+       -moz-box-shadow: none !important;
+       -webkit-box-shadow: none !important;
+       box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus,
+.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
+       outline-width: 1px;
+       outline-style: auto;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
+.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+       width: 100%;
+       height: 100%;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+}
+.ui-page-pre-in {
+       opacity: 0;
+}
+.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.out {
+       -webkit-animation-timing-function: ease-in;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-timing-function: ease-in;
+       -moz-animation-duration: 225ms;
+}
+@-webkit-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+.fade.out {
+       opacity: 0;
+       -webkit-animation-duration: 125ms;
+       -webkit-animation-name: fadeout;
+       -moz-animation-duration: 125ms;
+       -moz-animation-name: fadeout;
+}
+.fade.in {
+       opacity: 1;
+       -webkit-animation-duration: 225ms;
+       -webkit-animation-name: fadein;
+       -moz-animation-duration: 225ms;
+       -moz-animation-name: fadein;
+}
+.pop {
+       -webkit-transform-origin: 50% 50%;
+       -moz-transform-origin: 50% 50%;
+}
+.pop.in {
+       -webkit-transform: scale(1);
+       -moz-transform: scale(1);
+    opacity: 1;
+       -webkit-animation-name: popin;
+       -moz-animation-name: popin;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-duration: 350ms;
+}
+.pop.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       opacity: 0;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+}
+.pop.out.reverse {
+       -webkit-transform: scale(.8);
+       -moz-transform: scale(.8);
+       -webkit-animation-name: popout;
+       -moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+    from {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-moz-keyframes popin {
+    from {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-webkit-keyframes popout {
+    from {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+}
+@-moz-keyframes popout {
+    from {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+    from { -webkit-transform: translateX(100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+    from { -moz-transform: translateX(100%); }
+    to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+    from { -webkit-transform: translateX(-100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+    from { -moz-transform: translateX(-100%); }
+    to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.slide.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+}
+.slide.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromright;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromleft;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-duration: 225ms;
+}
+.slidefade.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slidedown.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfromtop;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfromtop;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+       -webkit-transform: translateY(-100%);
+       -moz-transform: translateY(-100%);
+       -webkit-animation-name: slideouttotop;
+       -moz-animation-name: slideouttotop;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+    from { -webkit-transform: translateY(-100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+    from { -moz-transform: translateY(-100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slideup.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfrombottom;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfrombottom;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+       -webkit-transform: translateY(100%);
+       -moz-transform: translateY(100%);
+       -webkit-animation-name: slideouttobottom;
+       -moz-animation-name: slideouttobottom;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+    from { -webkit-transform: translateY(100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+    from { -moz-transform: translateY(100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.flip {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0);
+}
+.flip.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -webkit-animation-duration: 175ms;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -moz-animation-duration: 175ms;
+}
+.flip.in {
+       -webkit-animation-name: flipintoright;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-name: flipintoright;
+       -moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.turn {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -webkit-transform-origin: 0;
+       
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-transform-origin: 0;
+}
+.turn.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -webkit-animation-duration: 125ms;
+       -moz-animation-duration: 125ms;
+}
+.turn.in {
+       -webkit-animation-name: flipintoright;
+       -moz-animation-name: flipintoright;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+       
+}
+.turn.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+       -webkit-transform-origin: 50% 30%;
+       -moz-transform-origin: 50% 30%; 
+       -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+       -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+       -webkit-transform-origin: none;
+       -moz-transform-origin: none;    
+       -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+}
+.flow.out {
+       -webkit-transform: translateX(-100%) scale(.7);
+       -webkit-animation-name: flowouttoleft;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(-100%) scale(.7);
+       -moz-animation-name: flowouttoleft;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.in {
+       -webkit-transform: translateX(0) scale(1);
+       -webkit-animation-name: flowinfromright;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(0) scale(1);
+       -moz-animation-name: flowinfromright;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: flowouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+       -webkit-animation-name: flowinfromleft;
+       -moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform:  translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+    0% { -webkit-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+    0% { -moz-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+    0% { -webkit-transform: translateX(100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+    0% { -moz-transform: translateX(100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { display: block; float: none; }
+/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
+.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
+.ui-grid-a .ui-block-a { clear: left; }
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
+.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
+.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
+.ui-grid-d > :nth-child(n) { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+       left: 0;
+       right: 0;
+       width: 100%;
+       position: fixed;
+       z-index: 1000;
+}
+.ui-header-fixed {
+       top: 0;
+}
+.ui-footer-fixed {
+       bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+       filter: Alpha(Opacity=90);
+       opacity: .9;
+}
+.ui-page-header-fixed {
+       padding-top: 2.6875em;
+}
+.ui-page-footer-fixed {
+       padding-bottom: 2.6875em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+       padding: 0;
+}
+.ui-fixed-hidden {
+       position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+       left: -9999px;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn { 
+       z-index: 10;
+}
+.ui-navbar { max-width: 100%; }
+.ui-navbar.ui-mini { margin: 0; }
+.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; }
+.ui-navbar ul:after { clear: both; }
+.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; }
+.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
+.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
+/* add border if not in header/footer (full width) */
+.ui-navbar li:last-child .ui-btn,
+.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
+.ui-header .ui-navbar li:last-child .ui-btn,
+.ui-footer .ui-navbar li:last-child .ui-btn,
+.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
+.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
+.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
+.ui-header .ui-navbar li .ui-btn,
+.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+/* fixing gaps caused by subpixel problem */
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
+.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
+.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
+.ui-mini { margin-top: .25em; margin-bottom: .25em; }
+.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
+.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; }
+.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; }
+.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right { margin: 0; } /* .ui-mobile to increase specificity level */
+.ui-btn-block { display: block; }
+.ui-header > .ui-btn,
+.ui-footer > .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-block,
+.ui-footer .ui-btn-block { display: block; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-fullsize .ui-btn-inner,
+.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini.ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini.ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-mini.ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; }
+/* Fixes IE/WP filter alpha opacity bugs */
+.ui-disabled .ui-btn-hidden { display: none; }
+.ui-disabled { z-index: 1; }
+.ui-field-contain .ui-btn.ui-submit { margin: 0; }
+label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+       .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
+}
+.ui-collapsible-inset { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
+.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
+.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
+.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; }
+.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+       display: block;
+       margin: 0 -15px;        
+       padding: 10px 15px;
+       border-left-width: 0;
+       border-right-width: 0;
+       border-top: none;      /* Overrides ui-body-* */
+       background-image: none; /* Overrides ui-body-* */
+}
+.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-collapsible-set .ui-collapsible:first-child { margin-top: 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
+.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
+.ui-bar .ui-controlgroup { margin: 0 5px; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px }
+.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; }
+.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,
+.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,
+.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
+.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-select .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn { float: none; margin: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last, .ui-controlgroup-horizontal .ui-select:last-child,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+@media all and (min-width: 450px){
+       .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; }
+       .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
+       .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+       .ui-hide-label .ui-controlgroup-controls { width: 100%; }
+}      
+.ui-dialog {
+        background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain {
+       width: 92.5%;
+       max-width: 500px;
+       margin: 10% auto 15px auto;
+       padding: 0;
+       position: relative;
+       top: -15px;
+}
+.ui-dialog-contain > .ui-header, 
+.ui-dialog-contain > .ui-content, 
+.ui-dialog-contain > .ui-footer { 
+       display: block;
+       position: relative; 
+       width: auto;
+       margin: 0;
+}
+.ui-dialog-contain > .ui-header {
+       border: none;
+       overflow: hidden;
+       z-index: 10; 
+       padding: 0;
+}
+.ui-dialog-contain > .ui-content { 
+       padding: 15px; 
+}
+.ui-dialog-contain > .ui-footer {
+       z-index: 10; 
+       padding: 0 15px; 
+}
+.ui-popup-open .ui-header-fixed,
+.ui-popup-open .ui-footer-fixed {
+       position: absolute !important;  /* See line #553 of popup.js */
+}
+.ui-popup-screen {
+       background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */
+       top: 0px;
+       left: 0px;
+       right: 0px;
+       bottom: 1px;
+       position: absolute;
+       filter: Alpha(Opacity=0);
+       opacity: 0;
+       z-index: 1099;
+}
+.ui-popup-screen.in {
+       opacity: 0.5;
+       filter: Alpha(Opacity=50);
+}
+.ui-popup-screen.out {
+       opacity: 0;
+       filter: Alpha(Opacity=0);
+}
+.ui-popup-container {
+       z-index: 1100;
+       display: inline-block;
+       position: absolute;
+       padding: 0;
+       outline: 0;
+}
+.ui-popup {
+       position: relative;
+}
+.ui-popup.ui-content,
+.ui-popup .ui-content {
+       overflow: visible;
+}
+.ui-popup > p,
+.ui-popup > h1,
+.ui-popup > h2,
+.ui-popup > h3,
+.ui-popup > h4,
+.ui-popup > h5,
+.ui-popup > h6 {
+       margin: .5em 7px;
+}
+.ui-popup > span {
+       display: block;
+       margin: .5em 7px;
+}
+.ui-popup .ui-title {
+       font-size: 16px;
+       font-weight: bold;
+       margin-top: .5em;
+       margin-bottom: .5em;
+}
+.ui-popup-container .ui-content > p,
+.ui-popup-container .ui-content > h1,
+.ui-popup-container .ui-content > h2,
+.ui-popup-container .ui-content > h3,
+.ui-popup-container .ui-content > h4,
+.ui-popup-container .ui-content > h5,
+.ui-popup-container .ui-content > h6 {
+       margin: .5em 0;
+}
+.ui-popup-container .ui-content > span {
+       margin: 0;
+}
+.ui-popup-container .ui-content > p:first-child,
+.ui-popup-container .ui-content > h1:first-child,
+.ui-popup-container .ui-content > h2:first-child,
+.ui-popup-container .ui-content > h3:first-child,
+.ui-popup-container .ui-content > h4:first-child,
+.ui-popup-container .ui-content > h5:first-child,
+.ui-popup-container .ui-content > h6:first-child {
+       margin-top: 0;
+}
+.ui-popup-container .ui-content > p:last-child,
+.ui-popup-container .ui-content > h1:last-child,
+.ui-popup-container .ui-content > h2:last-child,
+.ui-popup-container .ui-content > h3:last-child,
+.ui-popup-container .ui-content > h4:last-child,
+.ui-popup-container .ui-content > h5:last-child,
+.ui-popup-container .ui-content > h6:last-child {
+       margin-bottom: 0;
+}
+.ui-popup > img {
+       width: auto;
+       height: auto;
+       max-width: 100%;
+       max-height: 100%;
+       vertical-align: middle;
+}
+.ui-popup iframe {
+       vertical-align: middle;
+}
+@media all and (min-width: 450px){
+       .ui-popup .ui-field-contain label.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-label,
+       .ui-popup .ui-field-contain label.ui-select,
+       .ui-popup .ui-field-contain label.ui-input-text {
+               font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em;
+       }
+       .ui-popup .ui-field-contain .ui-btn.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-controls,
+       .ui-popup .ui-field-contain .ui-select,
+       .ui-popup .ui-field-contain input.ui-input-text,
+       .ui-popup .ui-field-contain textarea.ui-input-text,
+       .ui-popup .ui-field-contain .ui-input-search {
+               width: 100%; display: block;
+       }
+}
+.ui-popup > .ui-btn-left,
+.ui-popup > .ui-btn-right {
+       position: absolute; 
+       top: -9px;
+       margin: 0;
+       z-index: 1101;
+}
+.ui-popup > .ui-btn-left { left: -9px; }
+.ui-popup > .ui-btn-right { right: -9px; }
+.ui-popup.ui-corner-all > .ui-header,
+.ui-popup.ui-corner-all ~ .ui-content,
+.ui-popup.ui-corner-all > .ui-content:first-child {
+       -webkit-border-top-left-radius:  inherit;
+       border-top-left-radius:          inherit;
+       -webkit-border-top-right-radius: inherit;
+       border-top-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content,
+.ui-popup.ui-corner-all > .ui-footer,
+.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child {
+       -webkit-border-bottom-left-radius:  inherit;
+       border-bottom-left-radius:          inherit;
+       -webkit-border-bottom-right-radius: inherit;
+       border-bottom-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-child(2),
+.ui-popup.ui-corner-all > .ui-header:nth-child(2) {
+       -webkit-border-top-left-radius:  0;
+       border-top-left-radius:          0;
+       -webkit-border-top-right-radius: 0;
+       border-top-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2),
+.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2) {
+       -webkit-border-bottom-left-radius:  0;
+       border-bottom-left-radius:          0;
+       -webkit-border-bottom-right-radius: 0;
+       border-bottom-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-header:only-child,
+.ui-popup.ui-corner-all > .ui-footer:only-child {
+       -webkit-border-radius: inherit;
+       border-radius:         inherit;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin-top: .5em; margin-bottom: .5em; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; }
+.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:last-child { border-bottom-width: 0; }
+.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
+@media all and (min-width: 450px){
+       .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; }
+.ui-field-contain .ui-select .ui-btn { margin: 0; }
+/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+/* Display none because of issues with IE/WP's filter alpha opacity */
+.ui-select .ui-disabled select { display: none; }
+@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; }
+.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; }
+.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { padding: 6px; min-width: 160px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -99999px; left: -9999px; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header { margin: 0; padding: 0; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-select { width: 78%; display: inline-block; }
+       .ui-hide-label .ui-select { width: 100%; } 
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; display: block; width: 100%; outline: 0; }
+input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; }
+.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; }
+input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; }
+.ui-input-search.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-input-search { margin: 0; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-input-text  { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+       .ui-field-contain input.ui-input-text, 
+       .ui-field-contain textarea.ui-input-text, 
+       .ui-field-contain .ui-input-search { width: 78%; display: inline-block; } 
+       .ui-hide-label input.ui-input-text, 
+       .ui-hide-label textarea.ui-input-text, 
+       .ui-hide-label .ui-input-search { width: 100%; }
+       .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; }
+ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-collapsible-content > .ui-listview { margin: -10px -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-collapsible-content .ui-listview-inset { margin: .5em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li.ui-btn { margin: 0; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-static { background-image: none; }
+.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li-last, .ui-li.ui-field-contain.ui-li-last { border-bottom-width: 1px; }
+.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last { border-bottom-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child { border-top-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last { -webkit-border-bottom-left-radius: inherit; -webkit-border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt { -webkit-border-bottom-right-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+        .ui-li-aside { width: 45%; }
+}       
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
+.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
+.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
+.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
+.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; }
+.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; }
+.ui-listview-filter-inset { margin: -15px -5px; background: transparent; }
+.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-li.ui-screen-hidden{ display:none; }
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+    .ui-li .ui-btn-text { overflow:  visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; }
+input.ui-slider-input.ui-mini,
+.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; }
+.ui-field-contain input.ui-slider-input { margin: 0; }
+input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; }
+/* Fixes input fields being to small on Safari/Mac because of the up and down arrows. */
+.ui-slider-input::-webkit-outer-spin-button { margin: 0; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-btn.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin: -15px 0 0 -15px; outline: 0; }
+a.ui-btn.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain div.ui-slider { width: 43%; }
+       .ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}      
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle { margin: 1px 0 0 -15px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }
diff --git a/tv/tct-behavior-tests/css/main.css b/tv/tct-behavior-tests/css/main.css
new file mode 100755 (executable)
index 0000000..c9ea8a0
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+.ui-page .ui-content .ui-listview img {
+    position:absolute;
+    top:0;
+    bottom:0;
+    margin:auto;
+}
+
+.ui-page .ui-content .ui-listview h1 {
+    line-height : 45px;
+    vertical-align : middle;
+    white-space : normal;
+}
+
+.ui-li-count {
+    min-width: 30px;
+    text-align: center;
+}
+
+#overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: #000;
+    opacity: 0.6;
+    filter: alpha(opacity=60);
+    z-index:50;
+}
+
+.wgtButton {
+    height:40px;
+    line-height:20px;
+}
+
+.hideButton {
+    display:none;
+}
+
+.fontSize {
+    font-size:85%
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/icon.png b/tv/tct-behavior-tests/icon.png
new file mode 100755 (executable)
index 0000000..f5578b3
Binary files /dev/null and b/tv/tct-behavior-tests/icon.png differ
diff --git a/tv/tct-behavior-tests/index.html b/tv/tct-behavior-tests/index.html
new file mode 100755 (executable)
index 0000000..720b3d7
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+-->
+<html>
+<head>
+    <title>TCT Behavior Test Tool</title>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="css/main.css" />
+    <script src="js/thirdparty/jquery.js"></script>
+    <script src="js/thirdparty/jquery.mobile.js"></script>
+    <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="page" id="home_ui">
+    <div id="tool_title" data-role="header" data-position="fixed"></div>
+    <div id="app_selector" data-role="content">
+        <ul data-role="listview" id="mylist" data-divider-theme="b" data-inset="true"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+        <div data-role="controlgroup" data-type="horizontal">
+            <a href="javascript:exportResult();" data-role="button" data-icon="gear">Export</a>
+            <a href="javascript:resetResult();" data-role="button" data-icon="refresh">Reset</a>
+            <a href="#popup_exit" data-rel="popup" data-position-to="window" data-role="button" data-inline="true" data-transition="pop" data-icon="back">Exit</a>
+        </div>
+    </div>
+    <div data-role="popup" id="popup_exit" data-overlay-theme="a" data-theme="c" data-dismissible="false" style="max-width:400px;" class="ui-corner-all">
+        <div data-role="header" data-theme="a" class="ui-corner-top">
+            <h1>Reminder</h1>
+        </div>
+        <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
+            <h3 class="ui-title">Do you want to save test result before exit?</h3>
+            <a href="javascript:SaveAndExit();" data-role="button" data-theme="c">Yes</a>
+            <a href="javascript:exitTest();" data-role="button" data-theme="e">No, thanks</a>
+        </div>
+    </div>
+</div>
+<script>
+    updateToolTitle();
+</script>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/inst.apk.py b/tv/tct-behavior-tests/inst.apk.py
new file mode 100755 (executable)
index 0000000..56e4343
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PARAMETERS = None
+ADB_CMD = "adb"
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip('\n')
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s uninstall org.xwalk.%s" % (
+                    ADB_CMD, PARAMETERS.device, os.path.basename(os.path.splitext(file)[0]))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s install %s" % (ADB_CMD,
+                                               PARAMETERS.device, os.path.join(root, file))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.device:
+        (return_code, output) = doCMD("adb devices")
+        for line in output:
+            if str.find(line, "\tdevice") != -1:
+                PARAMETERS.device = line.split("\t")[0]
+                break
+
+    if not PARAMETERS.device:
+        print "No device found"
+        sys.exit(1)
+
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/tv/tct-behavior-tests/inst.wgt.py b/tv/tct-behavior-tests/inst.wgt.py
new file mode 100755 (executable)
index 0000000..2b1ecaa
--- /dev/null
@@ -0,0 +1,252 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+ADMIN_USER_30 = tct_parser.get('DEVICE', 'DEVICE_ADMIN_USER_30')
+
+def userCheck():
+    global GLOVAL_OPT
+    if ADMIN_USER_30 == EXECUTION_MODE_30:
+        GLOVAL_OPT="--global"
+    else:
+        GLOVAL_OPT=""
+
+
+def askpolicyremoving():
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+   
+    print pkg_id
+    print (os.getcwd())
+    print (os.path.dirname(os.path.realpath(__file__)) )
+    if not doRemoteCopy("%s/askpolicy.sh" % SCRIPT_DIR, "%s" % (SRC_DIR)):
+        action_status = False
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell .%s/askpolicy.sh %s" % (PARAMETERS.device, 
+        SRC_DIR, pkg_id)
+    return doCMD(cmd)
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -q -u -n %s" % (GLOVAL_OPT, pkg_id))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -i -t wgt -q -p %s/%s" % (GLOVAL_OPT, SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".wgt"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = EXECUTION_MODE_30
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    userCheck()
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            #askpolicyremoving()
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/tv/tct-behavior-tests/inst.xpk.py b/tv/tct-behavior-tests/inst.xpk.py
new file mode 100755 (executable)
index 0000000..1c47cca
--- /dev/null
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -u -t xpk -q -n %s" % pkg_id)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -i -t xpk -q -p %s/%s" % (SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".xpk"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "owner"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/tv/tct-behavior-tests/js/main.js b/tv/tct-behavior-tests/js/main.js
new file mode 100755 (executable)
index 0000000..fd75a41
--- /dev/null
@@ -0,0 +1,771 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+var _appURL;
+var _resultXML;
+var Tests;
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+//var accMarks = {}; //Re-enter popup
+var noSupport = {};
+var resultFile = "tct-behavior-tests_" + getCurrentTime() + ".result.xml";
+var tmpResultFile = "tct-behavior-tests.tmpresult.xml";
+var isLaunching = false;
+
+function checkTizen(){
+    if (typeof(tizen) == 'undefined')
+        return false;
+    else
+        return true;
+}
+
+function updateToolTitle() {
+    var version = '';
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "config.xml",
+        dataType : "xml",
+        success : function(xml){
+            $(xml).find("widget").each(
+                function(){
+                    if ($(this).attr('version'))
+                        version = $(this).attr('version');
+                }
+            );
+        }
+    });
+
+    $("#tool_title").empty().append("<h1 style=\"width:75%; margin-left:auto; margin-right:auto;\">TCT Behavior Test Tool</h1><a class=\"ui-btn-right\">" + version + "</a>");
+}
+
+function launchApp() {
+    window.open(_appURL);
+    $.mobile.hidePageLoadingMsg();
+    $('#overlay').remove();
+}
+
+function runApp(url) {
+    if (isLaunching){
+        setTimeout(function(){isLaunching = false;}, 200);
+        return;
+    }
+/*  Re-enter popup
+    if (accMarks[url] == 1)
+        url += "?reenter";
+    else
+        accMarks[url] = 1;
+*/
+    isLaunching = true;
+    _appURL = url;
+    $.mobile.showPageLoadingMsg();
+    $('<div></div>').prependTo('body').attr('id', 'overlay');
+    _timer = setTimeout(launchApp, 200);
+}
+
+function updateAppDecorationStyle() {
+    $(".ui-content").css("padding", '6px');
+    $("a.ui-link-inherit").css("padding", '0px 85px 0px 10px');
+    $(".ui-li-has-thumb a.ui-link-inherit").css("padding-left", '40px');
+    $(".ui-li-heading").css("font-size", '14px');
+}
+
+function updateAppDecoration() {
+    $("#mylist").empty();
+    $(_resultXML).find("set").each(
+        function(){
+            $("#mylist").append("<li data-role=\"list-divider\" role=\"heading\">"+$(this).attr("name")+"</li>");
+            $(this).find("testcase").each(
+                function(){
+                     var url = "tests/" + $(this).attr("id") + "/index.html?test_name="+$(this).attr("purpose");
+                     var appLine = "<li id=\"" + $(this).attr("id") + "\" class=\"test_app\">" +
+                           "<a href=\"javascript:runApp('" + url + "')\">" +
+                           "<h1>" + $(this).attr("purpose") + "</h1></a></li>";
+                     $("#mylist").append(appLine);
+                     if($(this).attr("result") == "PASS"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/pass.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:green;'>" +
+                             "PASS" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'g');
+                     } else if($(this).attr("result") == "FAIL"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/fail.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:red;'>" +
+                             "FAIL" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'r');
+                     }
+                     if (noSupport[$(this).attr("id")]) {
+                        $("#mylist > li :last").find("a").attr('href', '');
+                        $("#mylist > li :last").attr('data-theme', 'a');
+                        $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:black;'>" +
+                             "UNSUPPORTED" + "</span>");
+                     }
+                }
+            );
+        }
+    );
+    $("#mylist").listview( "refresh" );
+    updateAppDecorationStyle();
+}
+
+function exportResult() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function exportTmpResult() {
+    writeFile(tmpResultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function resetResult() {
+    _resetResult();
+    updateAppDecoration();
+    isLaunching = false;
+}
+
+function _resetResult() {
+    Tests.each(
+        function() {
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if (isCappresent2 === false) {
+                noSupport[testAppname] = true;
+                $(this).attr("result", "UNSUPPORTED");
+            } else {
+                $(this).attr("result", "N/A");
+            }
+
+        }
+    );
+}
+
+function exitTest(){
+    try {
+        var app = tizen.application.getCurrentApplication();
+        app.exit();
+    } catch(err) {
+        closeWindow();
+    }
+}
+
+function closeWindow() {
+    window.open('', '_self', '');
+    window.close();
+}
+
+function getCurrentTime() {
+    var d = new Date();
+    return d.toISOString();
+}
+
+function removeUnsupportedFeature(content) {
+    var xml = content;
+    var pos, before, after, posBefore, posAfter;
+
+    pos = xml.indexOf('result="UNSUPPORTED"');
+    while (pos != -1)
+    {
+        before = xml.substring(0, pos);
+        after = xml.substring(pos);
+        posBefore = before.lastIndexOf("<testcase");
+        posAfter = after.indexOf("<testcase");
+        if (posAfter == -1) {
+            posAfter = after.indexOf("</set>");
+        }
+        xml = before.substring(0, posBefore) + after.substring(posAfter);
+        pos = xml.indexOf('result="UNSUPPORTED"');
+    }
+
+    return xml;
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(removeUnsupportedFeature(content.replace("testcase.xsl", "testresult.xsl")));
+        fs.close();
+
+        if (filename == resultFile)
+            alert("Export result to " + resultFile + " successfully.");
+
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/tct-behavior-result/" + filename);
+
+        file = dir.createFile("tct-behavior-result/" + filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function SaveAndExit() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), true);
+}
+
+function updateBar() {
+    $(':jqmData(role=header)').removeClass("slidedown");
+    $(':jqmData(role=footer)').removeClass("slideup");
+    $(':jqmData(role=footer)').attr("align", "center");
+    $(':jqmData(role=footer)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 20px 15px 40px');
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "./tests.xml",
+        dataType : "xml",
+        success : function(xml){
+            _resultXML = xml;
+            Tests = $(xml).find("testcase");
+            getSummary();
+            getCapPresent();
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++)
+            if (files[i].name == tmpResultFile) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("testcase"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        _resetResult();
+        updateAppDecoration();
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents/tct-behavior-result', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    Tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order, tmpItem) {
+                    if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                        $(item).attr("result", $(tmpItem).attr("result"));
+                        return false;
+                    }
+                }
+            );
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if(isCappresent2 === false){
+                noSupport[testAppname] = true;
+            }
+        }
+    );
+}
+
+function recordResultToXML(test_name, result){
+    Tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result)
+            }
+        }
+    );
+}
+
+function initTests() {
+    updateBar();
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result == ""){
+                isLaunching = false;
+            } else {
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function getSummary() {
+
+    if (!checkTizen())
+        return;
+
+    var summaryXML = "";
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+    if (tizen.systeminfo == 'undefined') {
+        return;
+    } else {
+        summaryXML += "<capabilities>";
+       // var caps = tizen.systeminfo.getCapabilities();
+        for (var i = 0; i < caps.length; i++) {
+               try {
+                   var cap = tizen.systeminfo.getCapability(caps[i]);
+                   console.log(caps[i] + " : " + cap);
+                   if(cap === true || cap ===false) {
+                       summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"boolean\"/>\r\n";
+                   } else {
+                       if (/^\d+$/.test(cap))
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"Integer\">\r\n";
+                       else
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"String\">\r\n";
+                       //summaryXML += "        <value>" + cap + "</value>\r\n";
+                       summaryXML += "    </capability>\r\n";
+                   }
+               } catch(error) {
+                       console.log("error - "+error.name +", message = "+error.message);
+               }
+        }
+        summaryXML += "</capabilities>";
+    }
+    var summaryDoc = $.parseXML(summaryXML);
+    var testDef = $(_resultXML).find("test_definition");
+    $(testDef[0]).prepend(summaryDoc.documentElement);
+}
+
+function getCapPresent() {
+    try {
+      var caps2 = tizen.systeminfo.getCapability(caps[0]);
+    } catch (err){
+        alert("Exception: " + err.message);
+    }
+}
+
+function isCapPresent(name) {
+    var cap3 = tizen.systeminfo.getCapability(name)
+    if (cap3 != undefined) {
+        if (typeof(cap3) == "boolean")
+            return cap3;
+        else
+            return true;
+    }
+    else
+        return false;
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/js/tests.js b/tv/tct-behavior-tests/js/tests.js
new file mode 100755 (executable)
index 0000000..bb24be7
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Li, Hao <haox.li@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+function EnablePassButton(){
+    $('#pass_button').removeClass("ui-disabled");
+}
+
+function DisablePassButton(){
+    $('#pass_button').addClass("ui-disabled");
+}
+
+function getAppName() {
+    var lpath = window.location.pathname;
+    var from = lpath.lastIndexOf("tests/") + 6;
+    var to = lpath.lastIndexOf("/");
+    return lpath.substring(from, to);
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+function testLaunching(){
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+}
+
+function updateFooterButton(){
+    var footbar = $(':jqmData(role=footer)');
+    footbar.empty();
+    footbar.attr("align", "center");
+    footbar.append("<div data-role=\"controlgroup\" data-type=\"horizontal\">" +
+        "<a href=\"javascript:reportResult('PASS');\" id=\"pass_button\" data-role=\"button\" data-icon=\"check\" style=\"color: green\">Pass</a>" +
+        "<a href=\"javascript:reportResult('FAIL');\" id=\"fail_button\" data-role=\"button\" data-icon=\"delete\" style=\"color: red\">Fail</a>" +
+        "<a href=\"#popup_info\" data-role=\"button\" data-icon=\"info\" data-rel=\"popup\" data-transition=\"pop\">Info</a>" +
+        "<a href=\"javascript:backAppsHome();\" data-role=\"button\" data-icon=\"home\">Back</a></div>");
+
+    footbar.trigger("create");
+    footbar.find(':jqmData(role=button) > span:first-child').css('padding', '15px 10px 15px 30px');
+    $("#popup_info").popup( "option", "theme", "a");
+    var maxHeight = $(window).height() - 100 + "px";
+    $("#popup_info").css("max-height", maxHeight);
+    $("#popup_info").css("margin-bottom", "30px");
+    $("#popup_info").css("overflow-y", "auto");
+}
+
+$(document).bind('pagecreate', updateFooterButton);
+
+function Parm(data, name) {
+    var p;
+    ts = $(data).find(name);
+    if (ts) {
+        t = $(ts).get(0);
+        if (t)
+            p = $(t).text().trim();
+    }
+
+    if (p) {
+        var rawVal = decodeURI(p);
+        if (rawVal.indexOf(',') < 0)
+            p = rawVal;
+        else
+            p = rawVal.split(',');
+    }
+
+    return p;
+}
+
+function getParms() {
+    var parms = new Array();
+    var str = location.search.substring(1);
+    var items = str.split('&');
+    for ( var i = 0; i < items.length; i++) {
+        var pos = items[i].indexOf('=');
+        if (pos > 0) {
+            var key = items[i].substring(0, pos);
+            var val = items[i].substring(pos + 1);
+            if (!parms[key]) {
+                var rawVal = decodeURI(val);
+                if (rawVal.indexOf(',') < 0)
+                    parms[key] = rawVal;
+                else
+                    parms[key] = rawVal.split(',');
+            }
+        }
+    }
+
+    return parms["test_name"];
+}
+
+$(document).ready(function(){
+    testLaunching();
+    var testname = getParms();
+    document.title = testname
+    $("#main_page_title").text(testname);
+    window.history.pushState("","",window.location.href);
+//    var qstr = location.search.substring(1);
+//    if (!qstr || qstr.indexOf("reenter") < 0)
+//        $("[href='#popup_info']").click();
+});
+
+function checkInstalledPkg(pkgId) {
+    var packageInfo = null;
+    try {
+        if(pkgId && (typeof(tizen) != 'undefined')) {
+            packageInfo = tizen.package.getPackageInfo(pkgId);
+        }
+    } catch (e) {}
+
+    return packageInfo === null ? false : true;
+}
diff --git a/tv/tct-behavior-tests/js/thirdparty/jquery.js b/tv/tct-behavior-tests/js/thirdparty/jquery.js
new file mode 100755 (executable)
index 0000000..f65cf1d
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */\r
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/js/thirdparty/jquery.mobile.js b/tv/tct-behavior-tests/js/thirdparty/jquery.mobile.js
new file mode 100755 (executable)
index 0000000..e0d02a9
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery Mobile vGit Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 jquerymobile.com | jquery.org/license !*/
+(function(a,b,c){typeof define=="function"&&define.amd?define(["jquery"],function(d){return c(d,a,b),d.mobile}):c(a.jQuery,a,b)})(this,document,function(a,b,c,d){(function(a,b,d){var e={};a.mobile=a.extend({},{version:"1.2.0",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:!0,hashListeningEnabled:!0,linkBindingEnabled:!0,defaultPageTransition:"fade",maxTransitionWidth:!1,minScrollBack:250,touchOverflowEnabled:!1,defaultDialogTransition:"pop",pageLoadErrorMessage:"Error Loading Page",pageLoadErrorMessageTheme:"e",phonegapNavigationEnabled:!1,autoInitializePage:!0,pushStateEnabled:!0,ignoreContentEnabled:!1,orientationChangeEnabled:!0,buttonMarkup:{hoverDelay:200},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91},silentScroll:function(d){a.type(d)!=="number"&&(d=a.mobile.defaultHomeScroll),a.event.special.scrollstart.enabled=!1,setTimeout(function(){b.scrollTo(0,d),a(c).trigger("silentscroll",{x:0,y:d})},20),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},nsNormalizeDict:e,nsNormalize:function(b){if(!b)return;return e[b]||(e[b]=a.camelCase(a.mobile.ns+b))},getInheritedTheme:function(a,b){var c=a[0],d="",e=/ui-(bar|body|overlay)-([a-z])\b/,f,g;while(c){f=c.className||"";if(f&&(g=e.exec(f))&&(d=g[2]))break;c=c.parentNode}return d||b||"a"},closestPageData:function(a){return a.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("page")},enhanceable:function(a){return this.haveParents(a,"enhance")},hijackable:function(a){return this.haveParents(a,"ajax")},haveParents:function(b,c){if(!a.mobile.ignoreContentEnabled)return b;var d=b.length,e=a(),f,g,h;for(var i=0;i<d;i++){g=b.eq(i),h=!1,f=b[i];while(f){var j=f.getAttribute?f.getAttribute("data-"+a.mobile.ns+c):"";if(j==="false"){h=!0;break}f=f.parentNode}h||(e=e.add(g))}return e},getScreenHeight:function(){return b.innerHeight||a(b).height()}},a.mobile),a.fn.jqmData=function(b,c){var e;return typeof b!="undefined"&&(b&&(b=a.mobile.nsNormalize(b)),arguments.length<2||c===d?e=this.data(b):e=this.data(b,c)),e},a.jqmData=function(b,c,d){var e;return typeof c!="undefined"&&(e=a.data(b,c?a.mobile.nsNormalize(c):c,d)),e},a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))},a.jqmRemoveData=function(b,c){return a.removeData(b,a.mobile.nsNormalize(c))},a.fn.removeWithDependents=function(){a.removeWithDependents(this)},a.removeWithDependents=function(b){var c=a(b);(c.jqmData("dependents")||a()).remove(),c.remove()},a.fn.addDependents=function(b){a.addDependents(a(this),b)},a.addDependents=function(b,c){var d=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(d,c))},a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()},a.fn.jqmEnhanceable=function(){return a.mobile.enhanceable(this)},a.fn.jqmHijackable=function(){return a.mobile.hijackable(this)};var f=a.find,g=/:jqmData\(([^)]*)\)/g;a.find=function(b,c,d,e){return b=b.replace(g,"[data-"+(a.mobile.ns||"")+"$1]"),f.call(this,b,c,d,e)},a.extend(a.find,f),a.find.matches=function(b,c){return a.find(b,null,null,c)},a.find.matchesSelector=function(b,c){return a.find(c,null,null,[b]).length>0}})(a,this),function(a,b){var c=0,d=Array.prototype.slice,e=a.cleanData;a.cleanData=function(b){for(var c=0,d;(d=b[c])!=null;c++)try{a(d).triggerHandler("remove")}catch(f){}e(b)},a.widget=function(b,c,d){var e,f,g,h,i=b.split(".")[0];b=b.split(".")[1],e=i+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][e]=function(b){return!!a.data(b,e)},a[i]=a[i]||{},f=a[i][b],g=a[i][b]=function(a,b){if(!this._createWidget)return new g(a,b);arguments.length&&this._createWidget(a,b)},a.extend(g,f,{version:d.version,_proto:a.extend({},d),_childConstructors:[]}),h=new c,h.options=a.widget.extend({},h.options),a.each(d,function(b,e){a.isFunction(e)&&(d[b]=function(){var a=function(){return c.prototype[b].apply(this,arguments)},d=function(a){return c.prototype[b].apply(this,a)};return function(){var b=this._super,c=this._superApply,f;return this._super=a,this._superApply=d,f=e.apply(this,arguments),this._super=b,this._superApply=c,f}}())}),g.prototype=a.widget.extend(h,{widgetEventPrefix:b},d,{constructor:g,namespace:i,widgetName:b,widgetBaseClass:e,widgetFullName:e}),f?(a.each(f._childConstructors,function(b,c){var d=c.prototype;a.widget(d.namespace+"."+d.widgetName,g,c._proto)}),delete f._childConstructors):c._childConstructors.push(g),a.widget.bridge(b,g)},a.widget.extend=function(c){var e=d.call(arguments,1),f=0,g=e.length,h,i;for(;f<g;f++)for(h in e[f])i=e[f][h],e[f].hasOwnProperty(h)&&i!==b&&(c[h]=a.isPlainObject(i)?a.widget.extend({},c[h],i):i);return c},a.widget.bridge=function(c,e){var f=e.prototype.widgetFullName;a.fn[c]=function(g){var h=typeof g=="string",i=d.call(arguments,1),j=this;return g=!h&&i.length?a.widget.extend.apply(null,[g].concat(i)):g,h?this.each(function(){var d,e=a.data(this,f);if(!e)return a.error("cannot call methods on "+c+" prior to initialization; "+"attempted to call method '"+g+"'");if(!a.isFunction(e[g])||g.charAt(0)==="_")return a.error("no such method '"+g+"' for "+c+" widget instance");d=e[g].apply(e,i);if(d!==e&&d!==b)return j=d&&d.jquery?j.pushStack(d.get()):d,!1}):this.each(function(){var b=a.data(this,f);b?b.option(g||{})._init():new e(g,this)}),j}},a.Widget=function(a,b){},a.Widget._childConstructors=[],a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(b,d){d=a(d||this.defaultElement||this)[0],this.element=a(d),this.uuid=c++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=a.widget.extend({},this.options,this._getCreateOptions(),b),this.bindings=a(),this.hoverable=a(),this.focusable=a(),d!==this&&(a.data(d,this.widgetName,this),a.data(d,this.widgetFullName,this),this._on({remove:"destroy"}),this.document=a(d.style?d.ownerDocument:d.document||d),this.window=a(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:a.noop,_getCreateEventData:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(c,d){var e=c,f,g,h;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof c=="string"){e={},f=c.split("."),c=f.shift();if(f.length){g=e[c]=a.widget.extend({},this.options[c]);for(h=0;h<f.length-1;h++)g[f[h]]=g[f[h]]||{},g=g[f[h]];c=f.pop();if(d===b)return g[c]===b?null:g[c];g[c]=d}else{if(d===b)return this.options[c]===b?null:this.options[c];e[c]=d}}return this._setOptions(e),this},_setOptions:function(a){var b;for(b in a)this._setOption(b,a[b]);return this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!b).attr("aria-disabled",b),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(b,c){c?(b=a(b),this.bindings=this.bindings.add(b)):(c=b,b=this.element);var d=this;a.each(c,function(c,e){function f(){if(d.options.disabled===!0||a(this).hasClass("ui-state-disabled"))return;return(typeof e=="string"?d[e]:e).apply(d,arguments)}typeof e!="string"&&(f.guid=e.guid=e.guid||f.guid||a.guid++);var g=c.match(/^(\w+)\s*(.*)$/),h=g[1]+d.eventNamespace,i=g[2];i?d.widget().delegate(i,h,f):b.bind(h,f)})},_off:function(a,b){b=(b||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,a.unbind(b).undelegate(b)},_delay:function(a,b){function c(){return(typeof a=="string"?d[a]:a).apply(d,arguments)}var d=this;return setTimeout(c,b||0)},_hoverable:function(b){this.hoverable=this.hoverable.add(b),this._on(b,{mouseenter:function(b){a(b.currentTarget).addClass("ui-state-hover")},mouseleave:function(b){a(b.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(b){this.focusable=this.focusable.add(b),this._on(b,{focusin:function(b){a(b.currentTarget).addClass("ui-state-focus")},focusout:function(b){a(b.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.apply(this.element[0],[c].concat(d))===!1||c.isDefaultPrevented())}},a.each({show:"fadeIn",hide:"fadeOut"},function(b,c){a.Widget.prototype["_"+b]=function(d,e,f){typeof e=="string"&&(e={effect:e});var g,h=e?e===!0||typeof e=="number"?c:e.effect||c:b;e=e||{},typeof e=="number"&&(e={duration:e}),g=!a.isEmptyObject(e),e.complete=f,e.delay&&d.delay(e.delay),g&&a.effects&&(a.effects.effect[h]||a.uiBackCompat!==!1&&a.effects[h])?d[b](e):h!==b&&d[h]?d[h](e.duration,e.easing,f):d.queue(function(c){a(this)[b](),f&&f.call(d[0]),c()})}}),a.uiBackCompat!==!1&&(a.Widget.prototype._getCreateOptions=function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]})}(a),function(a,b){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments),this._trigger("init")},_getCreateOptions:function(){var c=this.element,d={};return a.each(this.options,function(a){var e=c.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));e!==b&&(d[a]=e)}),d},enhanceWithin:function(b,c){this.enhance(a(this.options.initSelector,a(b)),c)},enhance:function(b,c){var d,e,f=a(b),g=this;f=a.mobile.enhanceable(f),c&&f.length&&(d=a.mobile.closestPageData(f),e=d&&d.keepNativeSelector()||"",f=f.not(e)),f[this.widgetName]()},raise:function(a){throw"Widget ["+this.widgetName+"]: "+a}})}(a),function(a,b){a.extend(a.mobile,{loadingMessageTextVisible:d,loadingMessageTheme:d,loadingMessage:d,showPageLoadingMsg:function(b,c,d){a.mobile.loading("show",b,c,d)},hidePageLoadingMsg:function(){a.mobile.loading("hide")},loading:function(){this.loaderWidget.loader.apply(this.loaderWidget,arguments)}});var c="ui-loader",e=a("html"),f=a(b);a.widget("mobile.loader",{options:{theme:"a",textVisible:!1,html:"",text:"loading"},defaultHtml:"<div class='"+c+"'>"+"<span class='ui-icon ui-icon-loading'></span>"+"<h1></h1>"+"</div>",fakeFixLoader:function(){var b=a("."+a.mobile.activeBtnClass).first();this.element.css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})},checkLoaderPosition:function(){var b=this.element.offset(),c=f.scrollTop(),d=a.mobile.getScreenHeight();if(b.top<c||b.top-c>d)this.element.addClass("ui-loader-fakefix"),this.fakeFixLoader(),f.unbind("scroll",this.checkLoaderPosition).bind("scroll",this.fakeFixLoader)},resetHtml:function(){this.element.html(a(this.defaultHtml).html())},show:function(b,g,h){var i,j,k,l;this.resetHtml(),a.type(b)==="object"?(l=a.extend({},this.options,b),b=l.theme||a.mobile.loadingMessageTheme):(l=this.options,b=b||a.mobile.loadingMessageTheme||l.theme),j=g||a.mobile.loadingMessage||l.text,e.addClass("ui-loading");if(a.mobile.loadingMessage!==!1||l.html)a.mobile.loadingMessageTextVisible!==d?i=a.mobile.loadingMessageTextVisible:i=l.textVisible,this.element.attr("class",c+" ui-corner-all ui-body-"+b+" ui-loader-"+(i||g||b.text?"verbose":"default")+(l.textonly||h?" ui-loader-textonly":"")),l.html?this.element.html(l.html):this.element.find("h1").text(j),this.element.appendTo(a.mobile.pageContainer),this.checkLoaderPosition(),f.bind("scroll",a.proxy(this.checkLoaderPosition,this))},hide:function(){e.removeClass("ui-loading"),a.mobile.loadingMessage&&this.element.removeClass("ui-loader-fakefix"),a(b).unbind("scroll",a.proxy(this.fakeFixLoader,this)),a(b).unbind("scroll",a.proxy(this.checkLoaderPosition,this))}}),f.bind("pagecontainercreate",function(){a.mobile.loaderWidget=a.mobile.loaderWidget||a(a.mobile.loader.prototype.defaultHtml).loader()})}(a,this),function(a,b,c,d){function x(a){while(a&&typeof a.originalEvent!="undefined")a=a.originalEvent;return a}function y(b,c){var e=b.type,f,g,i,k,l,m,n,o,p;b=a.Event(b),b.type=c,f=b.originalEvent,g=a.event.props,e.search(/^(mouse|click)/)>-1&&(g=j);if(f)for(n=g.length,k;n;)k=g[--n],b[k]=f[k];e.search(/mouse(down|up)|click/)>-1&&!b.which&&(b.which=1);if(e.search(/^touch/)!==-1){i=x(f),e=i.touches,l=i.changedTouches,m=e&&e.length?e[0]:l&&l.length?l[0]:d;if(m)for(o=0,p=h.length;o<p;o++)k=h[o],b[k]=m[k]}return b}function z(b){var c={},d,f;while(b){d=a.data(b,e);for(f in d)d[f]&&(c[f]=c.hasVirtualBinding=!0);b=b.parentNode}return c}function A(b,c){var d;while(b){d=a.data(b,e);if(d&&(!c||d[c]))return b;b=b.parentNode}return null}function B(){r=!1}function C(){r=!0}function D(){v=0,p.length=0,q=!1,C()}function E(){B()}function F(){G(),l=setTimeout(function(){l=0,D()},a.vmouse.resetTimerDuration)}function G(){l&&(clearTimeout(l),l=0)}function H(b,c,d){var e;if(d&&d[b]||!d&&A(c.target,b))e=y(c,b),a(c.target).trigger(e);return e}function I(b){var c=a.data(b.target,f);if(!q&&(!v||v!==c)){var d=H("v"+b.type,b);d&&(d.isDefaultPrevented()&&b.preventDefault(),d.isPropagationStopped()&&b.stopPropagation(),d.isImmediatePropagationStopped()&&b.stopImmediatePropagation())}}function J(b){var c=x(b).touches,d,e;if(c&&c.length===1){d=b.target,e=z(d);if(e.hasVirtualBinding){v=u++,a.data(d,f,v),G(),E(),o=!1;var g=x(b).touches[0];m=g.pageX,n=g.pageY,H("vmouseover",b,e),H("vmousedown",b,e)}}}function K(a){if(r)return;o||H("vmousecancel",a,z(a.target)),o=!0,F()}function L(b){if(r)return;var c=x(b).touches[0],d=o,e=a.vmouse.moveDistanceThreshold,f=z(b.target);o=o||Math.abs(c.pageX-m)>e||Math.abs(c.pageY-n)>e,o&&!d&&H("vmousecancel",b,f),H("vmousemove",b,f),F()}function M(a){if(r)return;C();var b=z(a.target),c;H("vmouseup",a,b);if(!o){var d=H("vclick",a,b);d&&d.isDefaultPrevented()&&(c=x(a).changedTouches[0],p.push({touchID:v,x:c.clientX,y:c.clientY}),q=!0)}H("vmouseout",a,b),o=!1,F()}function N(b){var c=a.data(b,e),d;if(c)for(d in c)if(c[d])return!0;return!1}function O(){}function P(b){var c=b.substr(1);return{setup:function(d,f){N(this)||a.data(this,e,{});var g=a.data(this,e);g[b]=!0,k[b]=(k[b]||0)+1,k[b]===1&&t.bind(c,I),a(this).bind(c,O),s&&(k.touchstart=(k.touchstart||0)+1,k.touchstart===1&&t.bind("touchstart",J).bind("touchend",M).bind("touchmove",L).bind("scroll",K))},teardown:function(d,f){--k[b],k[b]||t.unbind(c,I),s&&(--k.touchstart,k.touchstart||t.unbind("touchstart",J).unbind("touchmove",L).unbind("touchend",M).unbind("scroll",K));var g=a(this),h=a.data(this,e);h&&(h[b]=!1),g.unbind(c,O),N(this)||g.removeData(e)}}}var e="virtualMouseBindings",f="virtualTouchID",g="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),h="clientX clientY pageX pageY screenX screenY".split(" "),i=a.event.mouseHooks?a.event.mouseHooks.props:[],j=a.event.props.concat(i),k={},l=0,m=0,n=0,o=!1,p=[],q=!1,r=!1,s="addEventListener"in c,t=a(c),u=1,v=0,w;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var Q=0;Q<g.length;Q++)a.event.special[g[Q]]=P(g[Q]);s&&c.addEventListener("click",function(b){var c=p.length,d=b.target,e,g,h,i,j,k;if(c){e=b.clientX,g=b.clientY,w=a.vmouse.clickDistanceThreshold,h=d;while(h){for(i=0;i<c;i++){j=p[i],k=0;if(h===d&&Math.abs(j.x-e)<w&&Math.abs(j.y-g)<w||a.data(h,f)===j.touchID){b.preventDefault(),b.stopPropagation();return}}h=h.parentNode}}},!0)}(a,b,c),function(a,b){var d={touch:"ontouchend"in c};a.mobile=a.mobile||{},a.mobile.support=a.mobile.support||{},a.extend(a.support,d),a.extend(a.mobile.support,d)}(a),function(a,b,d){function j(b,c,d){var e=d.type;d.type=c,a.event.handle.call(b,d),d.type=e}a.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)},a.attrFn&&(a.attrFn[c]=!0)});var e=a.mobile.support.touch,f="touchmove scroll",g=e?"touchstart":"mousedown",h=e?"touchend":"mouseup",i=e?"touchmove":"mousemove";a.event.special.scrollstart={enabled:!0,setup:function(){function g(a,c){d=c,j(b,d?"scrollstart":"scrollstop",a)}var b=this,c=a(b),d,e;c.bind(f,function(b){if(!a.event.special.scrollstart.enabled)return;d||g(b,!0),clearTimeout(e),e=setTimeout(function(){g(b,!1)},50)})}},a.event.special.tap={tapholdThreshold:750,setup:function(){var b=this,d=a(b);d.bind("vmousedown",function(e){function i(){clearTimeout(h)}function k(){i(),d.unbind("vclick",l).unbind("vmouseup",i),a(c).unbind("vmousecancel",k)}function l(a){k(),f===a.target&&j(b,"tap",a)}if(e.which&&e.which!==1)return!1;var f=e.target,g=e.originalEvent,h;d.bind("vmouseup",i).bind("vclick",l),a(c).bind("vmousecancel",k),h=setTimeout(function(){j(b,"taphold",a.Event("taphold",{target:f}))},a.event.special.tap.tapholdThreshold)})}},a.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var b=this,c=a(b);c.bind(g,function(b){function j(b){if(!f)return;var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;g={time:(new Date).getTime(),coords:[c.pageX,c.pageY]},Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&b.preventDefault()}var e=b.originalEvent.touches?b.originalEvent.touches[0]:b,f={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(b.target)},g;c.bind(i,j).one(h,function(b){c.unbind(i,j),f&&g&&g.time-f.time<a.event.special.swipe.durationThreshold&&Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(f.coords[1]-g.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&f.origin.trigger("swipe").trigger(f.coords[0]>g.coords[0]?"swipeleft":"swiperight"),f=g=d})})}},a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})}(a,this),function(a,c){a.extend(a.support,{orientation:"orientation"in b&&"onorientationchange"in b})}(a),function(a){a.event.special.throttledresize={setup:function(){a(this).bind("resize",c)},teardown:function(){a(this).unbind("resize",c)}};var b=250,c=function(){f=(new Date).getTime(),g=f-d,g>=b?(d=f,a(this).trigger("throttledresize")):(e&&clearTimeout(e),e=setTimeout(c,b-g))},d=0,e,f,g}(a),function(a,b){function o(){var a=g();a!==h&&(h=a,d.trigger(e))}var d=a(b),e="orientationchange",f,g,h,i,j,k={0:!0,180:!0};if(a.support.orientation){var l=b.innerWidth||a(b).width(),m=b.innerHeight||a(b).height(),n=50;i=l>m&&l-m>n,j=k[b.orientation];if(i&&j||!i&&!j)k={"-90":!0,90:!0}}a.event.special.orientationchange=a.extend({},a.event.special.orientationchange,{setup:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;h=g(),d.bind("throttledresize",o)},teardown:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;d.unbind("throttledresize",o)},add:function(a){var b=a.handler;a.handler=function(a){return a.orientation=g(),b.apply(this,arguments)}}}),a.event.special.orientationchange.orientation=g=function(){var d=!0,e=c.documentElement;return a.support.orientation?d=k[b.orientation]:d=e&&e.clientWidth/e.clientHeight<1.1,d?"portrait":"landscape"},a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.attrFn&&(a.attrFn[e]=!0)}(a,this),function(a,d){var e=a(b),f=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'></div>"),e=a("<body>").append(d);return function(a){if(!(a in b)){var g=c.createElement("style"),h="@media "+a+" { #jquery-mediatest { position:absolute; } }";g.type="text/css",g.styleSheet?g.styleSheet.cssText=h:g.appendChild(c.createTextNode(h)),f.prepend(e).prepend(g),b[a]=d.css("position")==="absolute",e.add(g).remove()}return b[a]}}()}(a),function(a,d){function e(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+" "+h.join(b+" ")+b).split(" ");for(var e in c)if(g[c[e]]!==d)return!0}function m(a,b,d){var e=c.createElement("div"),f=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},g=function(a){return"-"+a.charAt(0).toLowerCase()+a.substr(1)+"-"},i=function(c){var d=g(c)+a+": "+b+";",h=f(c),i=h+f(a);e.setAttribute("style",d),!e.style[i]||(k=!0)},j=d?[d]:h,k;for(var l=0;l<j.length;l++)i(j[l]);return!!k}function n(){var b="transform-3d";return m("perspective","10px","moz")||a.mobile.media("(-"+h.join("-"+b+"),(-")+"-"+b+"),("+b+")")}function o(){var b=location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),d=null,e="",g,h;return c.length?e=c.attr("href"):c=d=a("<base>",{href:b}).appendTo("head"),g=a("<a href='testurl' />").prependTo(f),h=g[0].href,c[0].href=e||location.pathname,d&&d.remove(),h.indexOf(b)===0}function p(){var a=c.createElement("x"),d=c.documentElement,e=b.getComputedStyle,f;return"pointerEvents"in a.style?(a.style.pointerEvents="auto",a.style.pointerEvents="x",d.appendChild(a),f=e&&e(a,"").pointerEvents==="auto",d.removeChild(a),!!f):!1}function q(){var a=c.createElement("div");return typeof a.getBoundingClientRect!="undefined"}var f=a("<body>").prependTo("html"),g=f[0].style,h=["Webkit","Moz","O"],i="palmGetResource"in b,j=b.opera,k=b.operamini&&{}.toString.call(b.operamini)==="[object OperaMini]",l=b.blackberry&&!e("-webkit-transform");a.extend(a.mobile,{browser:{}}),a.mobile.browser.ie=function(){var a=3,b=c.createElement("div"),d=b.all||[];do b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->";while(d[0]);return a>4?a:!a}(),a.extend(a.support,{cssTransitions:"WebKitTransitionEvent"in b||m("transition","height 100ms linear")&&!j,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!e("content"),touchOverflow:!!e("overflowScrolling"),cssTransform3d:n(),boxShadow:!!e("boxShadow")&&!l,scrollTop:("pageXOffset"in b||"scrollTop"in c.documentElement||"scrollTop"in f[0])&&!i&&!k,dynamicBaseTag:o(),cssPointerEvents:p(),boundingRect:q()}),f.remove();var r=function(){var a=b.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();a.mobile.gradeA=function(){return(a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=7)&&(a.support.boundingRect||a.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/)!==null)},a.mobile.ajaxBlacklist=b.blackberry&&!b.WebKitPoint||k||r,r&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")}),a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")}(a),function(a,b){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:!1,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){var a=this;if(a._trigger("beforecreate")===!1)return!1;a.element.attr("tabindex","0").addClass("ui-page ui-body-"+a.options.theme).bind("pagebeforehide",function(){a.removeContainerBackground()}).bind("pagebeforeshow",function(){a.setContainerBackground()})},removeContainerBackground:function(){a.mobile.pageContainer.removeClass("ui-overlay-"+a.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(b){this.options.theme&&a.mobile.pageContainer.addClass("ui-overlay-"+(b||this.options.theme))},keepNativeSelector:function(){var b=this.options,c=b.keepNative&&a.trim(b.keepNative);return c&&b.keepNative!==b.keepNativeDefault?[b.keepNative,b.keepNativeDefault].join(", "):b.keepNativeDefault}})}(a),function(a,b,d){function k(a){return a=a||location.href,"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var e="hashchange",f=c,g,h=a.event.special,i=f.documentMode,j="on"+e in b&&(i===d||i>7);a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.fn[e].delay=50,h[e]=a.extend(h[e],{setup:function(){if(j)return!1;a(g.start)},teardown:function(){if(j)return!1;a(g.stop)}}),g=function(){function n(){var c=k(),d=m(h);c!==h?(l(h=c,d),a(b).trigger(e)):d!==h&&(location.href=location.href.replace(/#.*/,"")+d),g=setTimeout(n,a.fn[e].delay)}var c={},g,h=k(),i=function(a){return a},l=i,m=i;return c.start=function(){g||n()},c.stop=function(){g&&clearTimeout(g),g=d},a.browser.msie&&!j&&function(){var b,d;c.start=function(){b||(d=a.fn[e].src,d=d&&d+k(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){d||l(k()),n()}).attr("src",d||"javascript:0").insertAfter("body")[0].contentWindow,f.onpropertychange=function(){try{event.propertyName==="title"&&(b.document.title=f.title)}catch(a){}})},c.stop=i,m=function(){return k(b.location.href)},l=function(c,d){var g=b.document,h=a.fn[e].domain;c!==d&&(g.title=f.title,g.open(),h&&g.write('<script>document.domain="'+h+'"</script>'),g.close(),b.location.hash=c)}}(),c}()}(a,this),function(a,b,c){var d=function(d){return d===c&&(d=!0),function(c,e,f,g){var h=new a.Deferred,i=e?" reverse":"",j=a.mobile.urlHistory.getActive(),k=j.lastScroll||a.mobile.defaultHomeScroll,l=a.mobile.getScreenHeight(),m=a.mobile.maxTransitionWidth!==!1&&a(b).width()>a.mobile.maxTransitionWidth,n=!a.support.cssTransitions||m||!c||c==="none"||Math.max(a(b).scrollTop(),k)>a.mobile.getMaxScrollForTransition(),o=" ui-page-pre-in",p=function(){a.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+c)},q=function(){a.event.special.scrollstart.enabled=!1,b.scrollTo(0,k),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},r=function(){g.removeClass(a.mobile.activePageClass+" out in reverse "+c).height("")},s=function(){d?g.animationComplete(t):t(),g.height(l+a(b).scrollTop()).addClass(c+" out"+i)},t=function(){g&&d&&r(),u()},u=function(){f.css("z-index",-10),f.addClass(a.mobile.activePageClass+o),a.mobile.focusPage(f),f.height(l+k),q(),f.css("z-index",""),n||f.animationComplete(v),f.removeClass(o).addClass(c+" in"+i),n&&v()},v=function(){d||g&&r(),f.removeClass("out in reverse "+c).height(""),p(),a(b).scrollTop()!==k&&q(),h.resolve(c,e,f,g,!0)};return p(),g&&!n?s():t(),h.promise()}},e=d(),f=d(!1),g=function(){return a.mobile.getScreenHeight()*3};a.mobile.defaultTransitionHandler=e,a.mobile.transitionHandlers={"default":a.mobile.defaultTransitionHandler,sequential:e,simultaneous:f},a.mobile.transitionFallbacks={},a.mobile._maybeDegradeTransition=function(b){return b&&!a.support.cssTransform3d&&a.mobile.transitionFallbacks[b]&&(b=a.mobile.transitionFallbacks[b]),b},a.mobile.getMaxScrollForTransition=a.mobile.getMaxScrollForTransition||g}(a,this),function(a,d){function u(b){!!i&&(!i.closest("."+a.mobile.activePageClass).length||b)&&i.removeClass(a.mobile.activeBtnClass),i=null}function v(){m=!1,l.length>0&&a.mobile.changePage.apply(null,l.pop())}function z(b,c,d,e){c&&c.data("page")._trigger("beforehide",null,{nextPage:b}),b.data("page")._trigger("beforeshow",null,{prevPage:c||a("")}),a.mobile.hidePageLoadingMsg(),d=a.mobile._maybeDegradeTransition(d);var f=a.mobile.transitionHandlers[d||"default"]||a.mobile.defaultTransitionHandler,g=f(d,e,b,c);return g.done(function(){c&&c.data("page")._trigger("hide",null,{nextPage:b}),b.data("page")._trigger("show",null,{prevPage:c||a("")})}),g}function A(){var b=a("."+a.mobile.activePageClass),c=parseFloat(b.css("padding-top")),d=parseFloat(b.css("padding-bottom")),e=parseFloat(b.css("border-top-width")),f=parseFloat(b.css("border-bottom-width"));b.css("min-height",s()-c-d-e-f)}function B(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c),b.page()}function C(a){while(a){if(typeof a.nodeName=="string"&&a.nodeName.toLowerCase()==="a")break;a=a.parentNode}return a}function D(b){var c=a(b).closest(".ui-page").jqmData("url"),d=q.hrefNoHash;if(!c||!h.isPath(c))c=d;return h.makeUrlAbsolute(c,d)}var e=a(b),f=a("html"),g=a("head"),h={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,getLocation:function(a){var b=a?this.parseUrl(a):location,c=this.parseUrl(a||location.href).hash;return c=c==="#"?"":c,b.protocol+"//"+b.host+b.pathname+b.search+c},parseLocation:function(){return this.parseUrl(this.getLocation())},parseUrl:function(b){if(a.type(b)==="object")return b;var c=h.urlParseRE.exec(b||"")||[];return{href:c[0]||"",hrefNoHash:c[1]||"",hrefNoSearch:c[2]||"",domain:c[3]||"",protocol:c[4]||"",doubleSlash:c[5]||"",authority:c[6]||"",username:c[8]||"",password:c[9]||"",host:c[10]||"",hostname:c[11]||"",port:c[12]||"",pathname:c[13]||"",directory:c[14]||"",filename:c[15]||"",search:c[16]||"",hash:c[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;a=a||"",b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"";var c=b?b.split("/"):[],d=a.split("/");for(var e=0;e<d.length;e++){var f=d[e];switch(f){case".":break;case"..":c.length&&c.pop();break;default:c.push(f)}}return"/"+c.join("/")},isSameDomain:function(a,b){return h.parseUrl(a).domain===h.parseUrl(b).domain},isRelativeUrl:function(a){return h.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return h.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!h.isRelativeUrl(a))return a;b===d&&(b=q);var c=h.parseUrl(a),e=h.parseUrl(b),f=c.protocol||e.protocol,g=c.protocol?c.doubleSlash:c.doubleSlash||e.doubleSlash,i=c.authority||e.authority,j=c.pathname!=="",k=h.makePathAbsolute(c.pathname||e.filename,e.pathname),l=c.search||!j&&e.search||"",m=c.hash;return f+g+i+k+l+m},addSearchParams:function(b,c){var d=h.parseUrl(b),e=typeof c=="object"?a.param(c):c,f=d.search||"?";return d.hrefNoSearch+f+(f.charAt(f.length-1)!=="?"?"&":"")+e+(d.hash||"")},convertUrlToDataUrl:function(a){var c=h.parseUrl(a);return h.isEmbeddedPage(c)?c.hash.split(n)[0].replace(/^#/,""):h.isSameDomain(c,q)?c.hrefNoHash.replace(q.domain,"").split(n)[0]:b.decodeURIComponent(a)},get:function(a){return a===d&&(a=h.parseLocation().hash),h.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(n)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(q.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return h.stripHash(a.replace(/\?.*$/,"").replace(n,""))},isHashValid:function(a){return/^#[^#]+$/.test(a)},isExternal:function(a){var b=h.parseUrl(a);return b.protocol&&b.domain!==p.domain?!0:!1},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var c=h.parseUrl(h.makeUrlAbsolute(b,q)),e=c.hrefNoHash===p.hrefNoHash||r&&c.hrefNoHash===q.hrefNoHash,f=a.mobile.firstPage,g=f&&f[0]?f[0].id:d;return e&&(!c.hash||c.hash==="#"||g&&c.hash.replace(/^#/,"")===g)},isEmbeddedPage:function(a){var b=h.parseUrl(a);return b.protocol!==""?b.hash&&(b.hrefNoHash===p.hrefNoHash||r&&b.hrefNoHash===q.hrefNoHash):/^#/.test(b.href)},isPermittedCrossDomainRequest:function(b,c){return a.mobile.allowCrossDomainPages&&b.protocol==="file:"&&c.search(/^https?:/)!==-1}},i=null,j={stack:[],activeIndex:0,getActive:function(){return j.stack[j.activeIndex]},getPrev:function(){return j.stack[j.activeIndex-1]},getNext:function(){return j.stack[j.activeIndex+1]},addNew:function(a,b,c,d,e){j.getNext()&&j.clearForward(),j.stack.push({url:a,transition:b,title:c,pageUrl:d,role:e}),j.activeIndex=j.stack.length-1},clearForward:function(){j.stack=j.stack.slice(0,j.activeIndex+1)},directHashChange:function(b){var c,e,f,g=this.getActive();a.each(j.stack,function(a,d){decodeURIComponent(b.currentUrl)===decodeURIComponent(d.url)&&(c=a<j.activeIndex,e=!c,f=a)}),this.activeIndex=f!==d?f:this.activeIndex,c?(b.either||b.isBack)(!0):e&&(b.either||b.isForward)(!1)},ignoreNextHashChange:!1},k="[tabindex],a,button:visible,select:visible,input",l=[],m=!1,n="&ui-state=dialog",o=g.children("base"),p=h.parseLocation(),q=o.length?h.parseUrl(h.makeUrlAbsolute(o.attr("href"),p.href)):p,r=p.hrefNoHash!==q.hrefNoHash,s=a.mobile.getScreenHeight,t=a.support.dynamicBaseTag?{element:o.length?o:a("<base>",{href:q.hrefNoHash}).prependTo(g),set:function(a){t.element.attr("href",h.makeUrlAbsolute(a,q))},reset:function(){t.element.attr("href",q.hrefNoHash)}}:d;a.mobile.back=function(){var a=b.navigator;this.phonegapNavigationEnabled&&a&&a.app&&a.app.backHistory?a.app.backHistory():b.history.back()},a.mobile.focusPage=function(a){var b=a.find("[autofocus]"),c=a.find(".ui-title:eq(0)");if(b.length){b.focus();return}c.length?c.focus():a.focus()};var w=!0,x,y;x=function(){if(!w)return;var b=a.mobile.urlHistory.getActive();if(b){var c=e.scrollTop();b.lastScroll=c<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:c}},y=function(){setTimeout(x,100)},e.bind(a.support.pushState?"popstate":"hashchange",function(){w=!1}),e.one(a.support.pushState?"popstate":"hashchange",function(){w=!0}),e.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){w=!0,e.unbind("scrollstop",y),e.bind("scrollstop",y)})}),e.bind("scrollstop",y),a.mobile._maybeDegradeTransition=a.mobile._maybeDegradeTransition||function(a){return a},a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd animationend",b):(setTimeout(b,0),a(this))},a.mobile.path=h,a.mobile.base=t,a.mobile.urlHistory=j,a.mobile.dialogHashKey=n,a.mobile.allowCrossDomainPages=!1,a.mobile.getDocumentUrl=function(b){return b?a.extend({},p):p.href},a.mobile.getDocumentBase=function(b){return b?a.extend({},q):q.href},a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c),c.isDefaultPrevented()||b.removeWithDependents()})},a.mobile.loadPage=function(b,c){var e=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),g=null,i=null,j=function(){var b=a.mobile.activePage&&D(a.mobile.activePage);return b||q.hrefNoHash},k=h.makeUrlAbsolute(b,j());f.data&&f.type==="get"&&(k=h.addSearchParams(k,f.data),f.data=d),f.data&&f.type==="post"&&(f.reloadPage=!0);var l=h.getFilePath(k),m=h.convertUrlToDataUrl(k);f.pageContainer=f.pageContainer||a.mobile.pageContainer,g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']"),g.length===0&&m&&!h.isPath(m)&&(g=f.pageContainer.children("#"+m).attr("data-"+a.mobile.ns+"url",m).jqmData("url",m));if(g.length===0)if(a.mobile.firstPage&&h.isFirstPageUrl(l))a.mobile.firstPage.parent().length&&(g=a(a.mobile.firstPage));else if(h.isEmbeddedPage(l))return e.reject(k,c),e.promise();if(g.length){if(!f.reloadPage)return B(g,f.role),e.resolve(k,c,g),e.promise();i=g}var n=f.pageContainer,o=new a.Event("pagebeforeload"),r={url:b,absUrl:k,dataUrl:m,deferred:e,options:f};n.trigger(o,r);if(o.isDefaultPrevented())return e.promise();if(f.showLoadMsg)var s=setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay),u=function(){clearTimeout(s),a.mobile.hidePageLoadingMsg()};return t&&t.reset(),!a.mobile.allowCrossDomainPages&&!h.isSameDomain(p,k)?e.reject(k,c):a.ajax({url:l,type:f.type,data:f.data,dataType:"html",success:function(d,j,n){var o=a("<div></div>"),p=d.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,q=new RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)"),s=new RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");q.test(d)&&RegExp.$1&&s.test(RegExp.$1)&&RegExp.$1&&(b=l=h.getFilePath(a("<div>"+RegExp.$1+"</div>").text())),t&&t.set(l),o.get(0).innerHTML=d,g=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first(),g.length||(g=a("<div data-"+a.mobile.ns+"role='page'>"+d.split(/<\/?body[^>]*>/gmi)[1]+"</div>")),p&&!g.jqmData("title")&&(~p.indexOf("&")&&(p=a("<div>"+p+"</div>").text()),g.jqmData("title",p));if(!a.support.dynamicBaseTag){var v=h.get(l);g.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b);c=c.replace(location.protocol+"//"+location.host+location.pathname,""),/^(\w+:|#|\/)/.test(c)||a(this).attr(b,v+c)})}g.attr("data-"+a.mobile.ns+"url",h.convertUrlToDataUrl(l)).attr("data-"+a.mobile.ns+"external-page",!0).appendTo(f.pageContainer),g.one("pagecreate",a.mobile._bindPageRemove),B(g,f.role),k.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']")),f.showLoadMsg&&u(),r.xhr=n,r.textStatus=j,r.page=g,f.pageContainer.trigger("pageload",r),e.resolve(k,c,g,i)},error:function(b,d,g){t&&t.set(h.get()),r.xhr=b,r.textStatus=d,r.errorThrown=g;var i=new a.Event("pageloadfailed");f.pageContainer.trigger(i,r);if(i.isDefaultPrevented())return;f.showLoadMsg&&(u(),a.mobile.showPageLoadingMsg(a.mobile.pageLoadErrorMessageTheme,a.mobile.pageLoadErrorMessage,!0),setTimeout(a.mobile.hidePageLoadingMsg,1500)),e.reject(k,c)}}),e.promise()},a.mobile.loadPage.defaults={type:"get",data:d,reloadPage:!1,role:d,showLoadMsg:!1,pageContainer:d,loadMsgDelay:50},a.mobile.changePage=function(b,e){if(m){l.unshift(arguments);return}var f=a.extend({},a.mobile.changePage.defaults,e);f.pageContainer=f.pageContainer||a.mobile.pageContainer,f.fromPage=f.fromPage||a.mobile.activePage;var g=f.pageContainer,i=new a.Event("pagebeforechange"),k={toPage:b,options:f};g.trigger(i,k);if(i.isDefaultPrevented())return;b=k.toPage,m=!0;if(typeof b=="string"){a.mobile.loadPage(b,f).done(function(b,c,d,e){m=!1,c.duplicateCachedPage=e,a.mobile.changePage(d,c)}).fail(function(a,b){m=!1,u(!0),v(),f.pageContainer.trigger("pagechangefailed",k)});return}b[0]===a.mobile.firstPage[0]&&!f.dataUrl&&(f.dataUrl=p.hrefNoHash);var o=f.fromPage,q=f.dataUrl&&h.convertUrlToDataUrl(f.dataUrl)||b.jqmData("url"),r=q,s=h.getFilePath(q),t=j.getActive(),w=j.activeIndex===0,x=0,y=c.title,A=f.role==="dialog"||b.jqmData("role")==="dialog";if(o&&o[0]===b[0]&&!f.allowSamePageTransition){m=!1,g.trigger("pagechange",k),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){},isForward:function(){}});return}B(b,f.role),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){x=-1},isForward:function(){x=1}});try{c.activeElement&&c.activeElement.nodeName.toLowerCase()!=="body"?a(c.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(C){}var D=!1;A&&t&&(t.url.indexOf(n)>-1&&!a.mobile.activePage.is(".ui-dialog")&&(f.changeHash=!1,D=!0),q=(t.url||"")+(D?"":n),j.activeIndex===0&&q===j.initialDst&&(q+=n)),f.changeHash!==!1&&q&&(j.ignoreNextHashChange=!0,h.set(q));var E=t?b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText():y;!!E&&y===c.title&&(y=E),b.jqmData("title")||b.jqmData("title",y),f.transition=f.transition||(x&&!w?t.transition:d)||(A?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition),x||(D&&(j.activeIndex=Math.max(0,j.activeIndex-1)),j.addNew(q,f.transition,y,r,f.role)),c.title=j.getActive().title,a.mobile.activePage=b,f.reverse=f.reverse||x<0,z(b,o,f.transition,f.reverse).done(function(c,d,e,h,i){u(),f.duplicateCachedPage&&f.duplicateCachedPage.remove(),i||a.mobile.focusPage(b),v(),g.trigger("pagechange",k)})},a.mobile.changePage.defaults={transition:d,reverse:!1,changeHash:!0,fromHashChange:!1,role:d,duplicateCachedPage:d,pageContainer:d,showLoadMsg:!0,dataUrl:d,fromPage:d,allowSamePageTransition:!1},a.mobile.navreadyDeferred=a.Deferred(),a.mobile.navreadyDeferred.done(function(){a(c).delegate("form","submit",function(b){var c=a(this);if(!a.mobile.ajaxEnabled||c.is(":jqmData(ajax='false')")||!c.jqmHijackable().length)return;var d=c.attr("method"),e=c.attr("target"),f=c.attr("action");f||(f=D(c),f===q.hrefNoHash&&(f=p.hrefNoSearch)),f=h.makeUrlAbsolute(f,D(c));if(h.isExternal(f)&&!h.isPermittedCrossDomainRequest(p,f)||e)return;a.mobile.changePage(f,{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),reverse:c.jqmData("direction")==="reverse",reloadPage:!0}),b.preventDefault()}),a(c).bind("vclick",function(b){if(b.which>1||!a.mobile.linkBindingEnabled)return;var c=C(b.target);if(!a(c).jqmHijackable().length)return;c&&h.parseUrl(c.getAttribute("href")||"#").hash!=="#"&&(u(!0),i=a(c).closest(".ui-btn").not(".ui-disabled"),i.addClass(a.mobile.activeBtnClass))}),a(c).bind("click",function(c){if(!a.mobile.linkBindingEnabled)return;var e=C(c.target),f=a(e),g;if(!e||c.which>1||!f.jqmHijackable().length)return;g=function(){b.setTimeout(function(){u(!0)},200)};if(f.is(":jqmData(rel='back')"))return a.mobile.back(),!1;var i=D(f),j=h.makeUrlAbsolute(f.attr("href")||"#",i);if(!a.mobile.ajaxEnabled&&!h.isEmbeddedPage(j)){g();return}if(j.search("#")!==-1){j=j.replace(/[^#]*#/,"");if(!j){c.preventDefault();return}h.isPath(j)?j=h.makeUrlAbsolute(j,i):j=h.makeUrlAbsolute("#"+j,p.hrefNoHash)}var k=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),l=k||h.isExternal(j)&&!h.isPermittedCrossDomainRequest(p,j);if(l){g();return}var m=f.jqmData("transition"),n=f.jqmData("direction")==="reverse"||f.jqmData("back"),o=f.attr("data-"+a.mobile.ns+"rel")||d;a.mobile.changePage(j,{transition:m,reverse:n,role:o,link:f}),c.preventDefault()}),a(c).delegate(".ui-page","pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),d=c.attr("href");d&&a.inArray(d,b)===-1&&(b.push(d),a.mobile.loadPage(d,{role:c.attr("data-"+a.mobile.ns+"rel")}))})}),a.mobile._handleHashChange=function(c){var e=h.stripHash(c),f=a.mobile.urlHistory.stack.length===0?"none":d,g=new a.Event("navigate"),i={transition:f,changeHash:!1,fromHashChange:!0};0===j.stack.length&&(j.initialDst=e),a.mobile.pageContainer.trigger(g);if(g.isDefaultPrevented())return;if(!a.mobile.hashListeningEnabled||j.ignoreNextHashChange){j.ignoreNextHashChange=!1;return}if(j.stack.length>1&&e.indexOf(n)>-1&&j.initialDst!==e){if(!a.mobile.activePage.is(".ui-dialog")){j.directHashChange({currentUrl:e,isBack:function(){a.mobile.back()},isForward:function(){b.history.forward()}});return}j.directHashChange({currentUrl:e,either:function(b){var c=a.mobile.urlHistory.getActive();e=c.pageUrl,a.extend(i,{role:c.role,transition:c.transition,reverse:b})}})}e?(e=typeof e=="string"&&!h.isPath(e)?h.makeUrlAbsolute("#"+e,q):e,e===h.makeUrlAbsolute("#"+j.initialDst,q)&&j.stack.length&&j.stack[0].url!==j.initialDst.replace(n,"")&&(e=a.mobile.firstPage),a.mobile.changePage(e,i)):a.mobile.changePage(a.mobile.firstPage,i)},e.bind("hashchange",function(b,c){a.mobile._handleHashChange(h.parseLocation().hash)}),a(c).bind("pageshow",A),a(b).bind("throttledresize",A)})}(a),function(a,b){var e={},f=e,g=a(b),h=a.mobile.path.parseLocation(),i=a.Deferred(),j=a.Deferred();a(c).ready(a.proxy(j,"resolve")),a(c).one("mobileinit",a.proxy(i,"resolve")),a.extend(e,{initialFilePath:function(){return h.pathname+h.search}(),hashChangeTimeout:200,hashChangeEnableTimer:d,initialHref:h.hrefNoHash,state:function(){return{hash:a.mobile.path.parseLocation().hash||"#"+f.initialFilePath,title:c.title,initialHref:f.initialHref}},resetUIKeys:function(b){var c=a.mobile.dialogHashKey,d="&"+a.mobile.subPageUrlKey,e=b.indexOf(c);return e>-1?b=b.slice(0,e)+"#"+b.slice(e):b.indexOf(d)>-1&&(b=b.split(d).join("#"+d)),b},nextHashChangePrevented:function(b){a.mobile.urlHistory.ignoreNextHashChange=b,f.onHashChangeDisabled=b},onHashChange:function(b){if(f.onHashChangeDisabled)return;var d,e,g=a.mobile.path.parseLocation().hash,h=a.mobile.path.isPath(g),i=h?a.mobile.path.getLocation():a.mobile.getDocumentUrl();g=h?g.replace("#",""):g,e=f.state(),d=a.mobile.path.makeUrlAbsolute(g,i),h&&(d=f.resetUIKeys(d)),history.replaceState(e,c.title,d)},onPopState:function(b){var c=b.originalEvent.state,d,e,g;c&&(clearTimeout(f.hashChangeEnableTimer),f.nextHashChangePrevented(!1),a.mobile._handleHashChange(c.hash),f.nextHashChangePrevented(!0),f.hashChangeEnableTimer=setTimeout(function(){f.nextHashChangePrevented(!1)},f.hashChangeTimeout))},init:function(){g.bind("hashchange",f.onHashChange),g.bind("popstate",f.onPopState),location.hash===""&&history.replaceState(f.state(),c.title,a.mobile.path.getLocation())}}),a.when(j,i,a.mobile.navreadyDeferred).done(function(){a.mobile.pushStateEnabled&&a.support.pushState&&e.init()})}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flip="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flow="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.pop="fade"}(a,this),function(a,b,c){a.mobile.transitionHandlers.slide=a.mobile.transitionHandlers.simultaneous,a.mobile.transitionFallbacks.slide="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidedown="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidefade="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slideup="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.turn="fade"}(a,this),function(a,b){a.mobile.page.prototype.options.degradeInputs={color:!1,date:!1,datetime:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:"number",search:"text",tel:!1,time:!1,url:!1,week:!1},a(c).bind("pagecreate create",function(b){var c=a.mobile.closestPageData(a(b.target)),d;if(!c)return;d=c.options,a(b.target).find("input").not(c.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";if(d.degradeInputs[c]){var f=a("<div>").html(b.clone()).html(),g=f.indexOf(" type=")>-1,h=g?/\s+type=["']?\w+['"]?/:/\/?>/,i=' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(g?"":">");b.replaceWith(f.replace(h,i))}})})}(a),function(a,b,d){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,c=this.element,d=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),e=a("<div/>",{role:"dialog","class":"ui-dialog-contain ui-corner-all ui-overlay-shadow"});c.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme),c.wrapInner(e).children().find(":jqmData(role='header')").prepend(d).end().children(":first-child").addClass("ui-corner-top").end().children(":last-child").addClass("ui-corner-bottom"),d.bind("click",function(){b.close()}),c.bind("vclick submit",function(b){var c=a(b.target).closest(b.type==="vclick"?"a":"form"),d;c.length&&!c.jqmData("transition")&&(d=a.mobile.urlHistory.getActive()||{},c.attr("data-"+a.mobile.ns+"transition",d.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(b,c){a(this).find("."+a.mobile.activeBtnClass).not(".ui-slider-bg").removeClass(a.mobile.activeBtnClass)}).bind("pagebeforeshow",function(){b._isCloseable=!0,b.options.overlayTheme&&b.element.page("removeContainerBackground").page("setContainerBackground",b.options.overlayTheme)})},close:function(){var b;this._isCloseable&&(this._isCloseable=!1,a.mobile.hashListeningEnabled?a.mobile.back():(b=a.mobile.urlHistory.getPrev().url,a.mobile.path.isPath(b)||(b=a.mobile.path.makeUrlAbsolute("#"+b)),a.mobile.changePage(b,{changeHash:!1,fromHashChange:!0})))}}),a(c).delegate(a.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){a.mobile.dialog.prototype.enhance(this)})}(a,this),function(a,b){a.mobile.page.prototype.options.backBtnText="Back",a.mobile.page.prototype.options.addBackBtn=!1,a.mobile.page.prototype.options.backBtnTheme=null,a.mobile.page.prototype.options.headerTheme="a",a.mobile.page.prototype.options.footerTheme="a",a.mobile.page.prototype.options.contentTheme=null,a(c).bind("pagecreate",function(b){var c=a(b.target),d=c.data("page").options,e=c.jqmData("role"),f=d.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",c).jqmEnhanceable().each(function(){var b=a(this),g=b.jqmData("role"),h=b.jqmData("theme"),i=h||d.contentTheme||e==="dialog"&&f,j,k,l,m;b.addClass("ui-"+g);if(g==="header"||g==="footer"){var n=h||(g==="header"?d.headerTheme:d.footerTheme)||f;b.addClass("ui-bar-"+n).attr("role",g==="header"?"banner":"contentinfo"),g==="header"&&(j=b.children("a, button"),k=j.hasClass("ui-btn-left"),l=j.hasClass("ui-btn-right"),k=k||j.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,l=l||j.eq(1).addClass("ui-btn-right").length),d.addBackBtn&&g==="header"&&a(".ui-page").length>1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!k&&(m=a("<a href='javascript:void(0);' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+d.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",d.backBtnTheme||n).prependTo(b)),b.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading","aria-level":"1"})}else g==="content"&&(i&&b.addClass("ui-body-"+i),b.attr("role","main"))})})}(a),function(a,b){a.fn.fieldcontain=function(a){return this.addClass("ui-field-contain ui-body ui-br").contents().filter(function(){return this.nodeType===3&&!/\S/.test(this.nodeValue)}).remove()},a(c).bind("pagecreate create",function(b){a(":jqmData(role='fieldcontain')",b.target).jqmEnhanceable().fieldcontain()})}(a),function(a,b){a.fn.grid=function(b){return this.each(function(){var c=a(this),d=a.extend({grid:null},b),e=c.children(),f={solo:1,a:2,b:3,c:4,d:5},g=d.grid,h;if(!g)if(e.length<=5)for(var i in f)f[i]===e.length&&(g=i);else g="a",c.addClass("ui-grid-duo");h=f[g],c.addClass("ui-grid-"+g),e.filter(":nth-child("+h+"n+1)").addClass("ui-block-a"),h>1&&e.filter(":nth-child("+h+"n+2)").addClass("ui-block-b"),h>2&&e.filter(":nth-child("+h+"n+3)").addClass("ui-block-c"),h>3&&e.filter(":nth-child("+h+"n+4)").addClass("ui-block-d"),h>4&&e.filter(":nth-child("+h+"n+5)").addClass("ui-block-e")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(":jqmData(role='nojs')",b.target).addClass("ui-nojs")})}(a),function(a,b){function d(a){var b;while(a){b=typeof a.className=="string"&&a.className+" ";if(b&&b.indexOf("ui-btn ")>-1&&b.indexOf("ui-disabled ")<0)break;a=a.parentNode}return a}a.fn.buttonMarkup=function(d){var f=this,g=function(b,c){j.setAttribute("data-"+a.mobile.ns+b,c),i.jqmData(b,c)};d=d&&a.type(d)==="object"?d:{};for(var h=0;h<f.length;h++){var i=f.eq(h),j=i[0],k=a.extend({},a.fn.buttonMarkup.defaults,{icon:d.icon!==b?d.icon:i.jqmData("icon"),iconpos:d.iconpos!==b?d.iconpos:i.jqmData("iconpos"),theme:d.theme!==b?d.theme:i.jqmData("theme")||a.mobile.getInheritedTheme(i,"c"),inline:d.inline!==b?d.inline:i.jqmData("inline"),shadow:d.shadow!==b?d.shadow:i.jqmData("shadow"),corners:d.corners!==b?d.corners:i.jqmData("corners"),iconshadow:d.iconshadow!==b?d.iconshadow:i.jqmData("iconshadow"),mini:d.mini!==b?d.mini:i.jqmData("mini")},d),l="ui-btn-inner",m="ui-btn-text",n,o,p,q,r,s;a.each(k,g),i.jqmData("rel")==="popup"&&i.attr("href")&&(j.setAttribute("aria-haspopup",!0),j.setAttribute("aria-owns",j.getAttribute("href"))),s=a.data(j.tagName==="INPUT"||j.tagName==="BUTTON"?j.parentNode:j,"buttonElements"),s?(j=s.outer,i=a(j),p=s.inner,q=s.text,a(s.icon).remove(),s.icon=null):(p=c.createElement(k.wrapperEls),q=c.createElement(k.wrapperEls)),r=k.icon?c.createElement("span"):null,e&&!s&&e(),k.theme||(k.theme=a.mobile.getInheritedTheme(i,"c")),n="ui-btn ui-btn-up-"+k.theme,n+=k.shadow?" ui-shadow":"",n+=k.corners?" ui-btn-corner-all":"",k.mini!==b&&(n+=k.mini===!0?" ui-mini":" ui-fullsize"),k.inline!==b&&(n+=k.inline===!0?" ui-btn-inline":" ui-btn-block"),k.icon&&(k.icon="ui-icon-"+k.icon,k.iconpos=k.iconpos||"left",o="ui-icon "+k.icon,k.iconshadow&&(o+=" ui-icon-shadow")),k.iconpos&&(n+=" ui-btn-icon-"+k.iconpos,k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText())),l+=k.corners?" ui-btn-corner-all":"",k.iconpos&&k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText()),s&&i.removeClass(s.bcls||""),i.removeClass("ui-link").addClass(n),p.className=l,q.className=m,s||p.appendChild(q);if(r){r.className=o;if(!s||!s.icon)r.innerHTML="&#160;",p.appendChild(r)}while(j.firstChild&&!s)q.appendChild(j.firstChild);s||j.appendChild(p),s={bcls:n,outer:j,inner:p,text:q,icon:r},a.data(j,"buttonElements",s),a.data(p,"buttonElements",s),a.data(q,"buttonElements",s),r&&a.data(r,"buttonElements",s)}return this},a.fn.buttonMarkup.defaults={corners:!0,shadow:!0,iconshadow:!0,wrapperEls:"span"};var e=function(){var b=a.mobile.buttonMarkup.hoverDelay,f,g;a(c).bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(c){var e,h=a(d(c.target)),i=c.originalEvent&&/^touch/.test(c.originalEvent.type),j=c.type;if(h.length){e=h.attr("data-"+a.mobile.ns+"theme");if(j==="vmousedown")i?f=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e);else if(j==="vmousecancel"||j==="vmouseup")h.removeClass("ui-btn-down-"+e).addClass("ui-btn-up-"+e);else if(j==="vmouseover"||j==="focus")i?g=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e);else if(j==="vmouseout"||j==="blur"||j==="scrollstart")h.removeClass("ui-btn-hover-"+e+" ui-btn-down-"+e).addClass("ui-btn-up-"+e),f&&clearTimeout(f),g&&clearTimeout(g)}},"focusin focus":function(b){a(d(b.target)).addClass(a.mobile.focusClass)},"focusout blur":function(b){a(d(b.target)).removeClass(a.mobile.focusClass)}}),e=null};a(c).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",b.target).jqmEnhanceable().not("button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})}(a),function(a,b){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:!0,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,inset:!0,mini:!1,initSelector:":jqmData(role='collapsible')"},_create:function(){var c=this.element,d=this.options,e=c.addClass("ui-collapsible"),f=c.children(d.heading).first(),g=c.jqmData("collapsed-icon")||d.collapsedIcon,h=c.jqmData("expanded-icon")||d.expandedIcon,i=e.wrapInner("<div class='ui-collapsible-content'></div>").children(".ui-collapsible-content"),j=c.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove()),j.length?(d.theme||(d.theme=j.jqmData("theme")||a.mobile.getInheritedTheme(j,"c")),d.contentTheme||(d.contentTheme=j.jqmData("content-theme")),d.collapsedIcon||(d.collapsedIcon=j.jqmData("collapsed-icon")),d.expandedIcon||(d.expandedIcon=j.jqmData("expanded-icon")),d.iconPos||(d.iconPos=j.jqmData("iconpos")),j.jqmData("inset")!==b?d.inset=j.jqmData("inset"):d.inset=!0,d.mini||(d.mini=j.jqmData("mini"))):d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),!d.inset||e.addClass("ui-collapsible-inset"),i.addClass(d.contentTheme?"ui-body-"+d.contentTheme:""),g=c.jqmData("collapsed-icon")||d.collapsedIcon||"plus",h=c.jqmData("expanded-icon")||d.expandedIcon||"minus",f.insertBefore(i).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:!1,corners:!1,iconpos:c.jqmData("iconpos")||d.iconPos||"left",icon:g,mini:d.mini,theme:d.theme}),!d.inset||f.find("a").first().add(".ui-btn-inner",c).addClass("ui-corner-top ui-corner-bottom"),e.bind("expand collapse",function(b){if(!b.isDefaultPrevented()){var c=a(this),k=b.type==="collapse",l=d.contentTheme;b.preventDefault(),f.toggleClass("ui-collapsible-heading-collapsed",k).find(".ui-collapsible-heading-status").text(k?d.expandCueText:d.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-"+h,!k).toggleClass("ui-icon-"+g,k||h===g).end().find("a").first().removeClass(a.mobile.activeBtnClass),c.toggleClass("ui-collapsible-collapsed",k),i.toggleClass("ui-collapsible-content-collapsed",k).attr("aria-hidden",k),l&&!!d.inset&&(!j.length||e.jqmData("collapsible-last"))&&(f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",k),i.toggleClass("ui-corner-bottom",!k)),i.trigger("updatelayout")}}).trigger(d.collapsed?"collapse":"expand"),f.bind("tap",function(b){f.find("a").first().addClass(a.mobile.activeBtnClass)}).bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";e.trigger(b),a.preventDefault(),a.stopPropagation()})}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsible.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.collapsibleset",a.mobile.widget,{options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var c=this.element.addClass("ui-collapsible-set"),d=this.options;d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),d.contentTheme||(d.contentTheme=c.jqmData("content-theme")),c.jqmData("inset")!==b&&(d.inset=c.jqmData("inset")),d.inset=d.inset!==b?d.inset:!0,c.jqmData("collapsiblebound")||c.jqmData("collapsiblebound",!0).bind("expand collapse",function(b){var c=b.type==="collapse",e=a(b.target).closest(".ui-collapsible"),f=e.data("collapsible");e.jqmData("collapsible-last")&&!!d.inset&&(e.find(".ui-collapsible-heading").first().find("a").first().toggleClass("ui-corner-bottom",c).find(".ui-btn-inner").toggleClass("ui-corner-bottom",c),e.find(".ui-collapsible-content").toggleClass("ui-corner-bottom",!c))}).bind("expand",function(b){var c=a(b.target).closest(".ui-collapsible");c.parent().is(":jqmData(role='collapsible-set')")&&c.siblings(".ui-collapsible").trigger("collapse")})},_init:function(){var a=this.element,b=a.children(":jqmData(role='collapsible')"),c=b.filter(":jqmData(collapsed='false')");this.refresh(),c.trigger("expand")},refresh:function(){var b=this.element,c=this.options,d=b.children(":jqmData(role='collapsible')");a.mobile.collapsible.prototype.enhance(d.not(".ui-collapsible")),!c.inset||(d.each(function(){a(this).jqmRemoveData("collapsible-last").find(".ui-collapsible-heading").find("a").first().removeClass("ui-corner-top ui-corner-bottom").find(".ui-btn-inner").removeClass("ui-corner-top ui-corner-bottom")}),d.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),d.last().jqmData("collapsible-last",!0).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"))}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsibleset.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var c=this.element,d=c.find("a"),e=d.filter(":jqmData(icon)").length?this.options.iconpos:b;c.addClass("ui-navbar ui-mini").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid}),d.buttonMarkup({corners:!1,shadow:!1,inline:!0,iconpos:e}),c.delegate("a","vclick",function(b){a(b.target).hasClass("ui-disabled")||(d.removeClass(a.mobile.activeBtnClass),a(this).addClass(a.mobile.activeBtnClass))}),c.closest(".ui-page").bind("pagebeforeshow",function(){d.filter(".ui-state-persist").addClass(a.mobile.activeBtnClass)})}}),a(c).bind("pagecreate create",function(b){a.mobile.navbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){var d={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:!1,initSelector:":jqmData(role='listview')"},_create:function(){var a=this,b="";b+=a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"",a.element.addClass(function(a,c){return c+" ui-listview "+b}),a.refresh(!0)},_removeCorners:function(a,b){var c="ui-corner-top ui-corner-tr ui-corner-tl",d="ui-corner-bottom ui-corner-br ui-corner-bl";a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb")),b==="top"?a.removeClass(c):b==="bottom"?a.removeClass(d):a.removeClass(c+" "+d)},_refreshCorners:function(a){var b,c,d,e;b=this.element.children("li"),c=a||b.filter(":visible").length===0?b.not(".ui-screen-hidden"):b.filter(":visible"),b.filter(".ui-li-last").removeClass("ui-li-last"),this.options.inset?(this._removeCorners(b),d=c.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),e=c.last().addClass("ui-corner-bottom ui-li-last"),e.add(e.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl")):c.last().addClass("ui-li-last"),a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,b,c,d){var e={};e[c]=e[d]=!0;while(a){if(e[a.nodeName])return a;a=a[b]}return null},_getChildrenByTagName:function(b,c,d){var e=[],f={};f[c]=f[d]=!0,b=b.firstChild;while(b)f[b.nodeName]&&e.push(b),b=b.nextSibling;return a(e)},_addThumbClasses:function(b){var c,d,e=b.length;for(c=0;c<e;c++)d=a(this._findFirstElementByTagName(b[c].firstChild,"nextSibling","img","IMG")),d.length&&(d.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(d[0].parentNode,"parentNode","li","LI")).addClass(d.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page"),this._createSubPages();var d=this.options,e=this.element,f=this,g=e.jqmData("dividertheme")||d.dividerTheme,h=e.jqmData("splittheme"),i=e.jqmData("spliticon"),j=this._getChildrenByTagName(e[0],"li","LI"),k=!!a.nodeName(e[0],"ol"),l=!a.support.cssPseudoElement,m=e.attr("start"),n={},o,p,q,r,s,t,u,v,w,x,y,z,A,B;k&&l&&e.find(".ui-li-dec").remove(),k&&(m||m===0?l?u=parseFloat(m):(v=parseFloat(m)-1,e.css("counter-reset","listnumbering "+v)):l&&(u=1)),d.theme||(d.theme=a.mobile.getInheritedTheme(this.element,"c"));for(var C=0,D=j.length;C<D;C++){o=j.eq(C),p="ui-li";if(b||!o.hasClass("ui-li")){q=o.jqmData("theme")||d.theme,r=this._getChildrenByTagName(o[0],"a","A");var E=o.jqmData("role")==="list-divider";r.length&&!E?(y=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:!1,corners:!1,iconpos:"right",icon:r.length>1||y===!1?!1:y||"arrow-r",theme:q}),y!==!1&&r.length===1&&o.addClass("ui-li-has-arrow"),r.first().removeClass("ui-link").addClass("ui-link-inherit"),r.length>1&&(p+=" ui-li-has-alt",s=r.last(),t=h||s.jqmData("theme")||d.splitTheme,B=s.jqmData("icon"),s.appendTo(o).attr("title",s.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:!1,corners:!1,theme:q,icon:!1,iconpos:"notext"}).find(".ui-btn-inner").append(a(c.createElement("span")).buttonMarkup({shadow:!0,corners:!0,theme:t,iconpos:"notext",icon:B||y||i||d.splitIcon})))):E?(p+=" ui-li-divider ui-bar-"+g,o.attr("role","heading"),k&&(m||m===0?l?u=parseFloat(m):(w=parseFloat(m)-1,o.css("counter-reset","listnumbering "+w)):l&&(u=1))):p+=" ui-li-static ui-btn-up-"+q}k&&l&&p.indexOf("ui-li-divider")<0&&(x=p.indexOf("ui-li-static")>0?o:o.find(".ui-link-inherit"),x.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+u++ +". </span>")),n[p]||(n[p]=[]),n[p].push(o[0])}for(p in n)a(n[p]).addClass(p).children(".ui-btn-inner").addClass(p);e.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(e.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all"),this._addThumbClasses(j),this._addThumbClasses(e.find(".ui-link-inherit")),this._refreshCorners(b),this._trigger("afterrefresh")},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,c=b.closest(".ui-page"),e=c.jqmData("url"),f=e||c[0][a.expando],g=b.attr("id"),h=this.options,i="data-"+a.mobile.ns,j=this,k=c.find(":jqmData(role='footer')").jqmData("id"),l;typeof d[f]=="undefined"&&(d[f]=-1),g=g||++d[f],a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=this,f=a(this),j=f.attr("id")||g+"-"+c,m=f.parent(),n=a(f.prevAll().toArray().reverse()),p=n.length?n:a("<span>"+a.trim(m.contents()[0].nodeValue)+"</span>"),q=p.first().getEncodedText(),r=(e||"")+"&"+a.mobile.subPageUrlKey+"="+j,s=f.jqmData("theme")||h.theme,t=f.jqmData("counttheme")||b.jqmData("counttheme")||h.countTheme,u,v;l=!0,u=f.detach().wrap("<div "+i+"role='page' "+i+"url='"+r+"' "+i+"theme='"+s+"' "+i+"count-theme='"+t+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+h.headerTheme+"'><div class='ui-title'>"+q+"</div></div>").after(k?a("<div "+i+"role='footer' "+i+"id='"+k+"'>"):"").parent().appendTo(a.mobile.pageContainer),u.page(),v=m.find("a:first"),v.length||(v=a("<a/>").html(p||q).prependTo(m.empty())),v.attr("href","#"+r)}).listview();if(l&&c.is(":jqmData(external-page='true')")&&c.data("page").options.domCache===!1){var m=function(b,d){var f=d.nextPage,g,h=new a.Event("pageremove");d.nextPage&&(g=f.jqmData("url"),g.indexOf(e+"&"+a.mobile.subPageUrlKey)!==0&&(j.childPages().remove(),c.trigger(h),h.isDefaultPrevented()||c.removeWithDependents()))};c.unbind("pagehide.remove").bind("pagehide.remove",m)}},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}}),a(c).bind("pagecreate create",function(b){a.mobile.listview.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.mobile.listview.prototype.options.autodividers=!1,a.mobile.listview.prototype.options.autodividersSelector=function(a){var b=a.text()||null;return b?(b=b.slice(0,1).toUpperCase(),b):null},a(c).delegate("ul,ol","listviewcreate",function(){var b=a(this),d=b.data("listview");if(!d||!d.options.autodividers)return;var e=function(){b.find("li:jqmData(role='list-divider')").remove();var e=b.find("li"),f=null,g,h;for(var i=0;i<e.length;i++){g=e[i],h=d.options.autodividersSelector(a(g));if(h&&f!==h){var j=c.createElement("li");j.appendChild(c.createTextNode(h)),j.setAttribute("data-"+a.mobile.ns+"role","list-divider"),g.parentNode.insertBefore(j,g)}f=h}},f=function(){b.unbind("listviewafterrefresh",f),e(),d.refresh(),b.bind("listviewafterrefresh",f)};f()})}(a),function(a,b){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var d=this,e=this.element,f=function(a,b){return a.jqmData(b)||a.closest("form, fieldset").jqmData(b)},g=a(e).closest("label"),h=g.length?g:a(e).closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("label").filter("[for='"+e[0].id+"']").first(),i=e[0].type,j=f(e,"mini"),k=i+"-on",l=i+"-off",m=e.parents(":jqmData(type='horizontal')").length?b:l,n=f(e,"iconpos"),o=m?"":" "+a.mobile.activeBtnClass,p="ui-"+k+o,q="ui-"+l,r="ui-icon-"+k,s="ui-icon-"+l;if(i!=="checkbox"&&i!=="radio")return;a.extend(this,{label:h,inputtype:i,checkedClass:p,uncheckedClass:q,checkedicon:r,uncheckedicon:s}),this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),h.buttonMarkup({theme:this.options.theme,icon:m,shadow:!1,mini:j,iconpos:n});var t=c.createElement("div");t.className="ui-"+i,e.add(h).wrapAll(t),h.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(e.is(":disabled")){a.preventDefault();return}return d._cacheVals(),e.prop("checked",i==="radio"&&!0||!e.prop("checked")),e.triggerHandler("click"),d._getInputSet().not(e).prop("checked",!1),d._updateAll(),!1}}),e.bind({vmousedown:function(){d._cacheVals()},vclick:function(){var b=a(this);b.is(":checked")?(b.prop("checked",!0),d._getInputSet().not(b).prop("checked",!1)):b.prop("checked",!1),d._updateAll()},focus:function(){h.addClass(a.mobile.focusClass)},blur:function(){h.removeClass(a.mobile.focusClass)}}),this.refresh()},_cacheVals:function(){this._getInputSet().each(function(){a(this).jqmData("cacheVal",this.checked)})},_getInputSet:function(){return this.inputtype==="checkbox"?this.element:this.element.closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var c=a(this);(this.checked||b.inputtype==="checkbox")&&c.trigger("change")}).checkboxradio("refresh")},refresh:function(){var a=this.element[0],b=this.label,c=b.find(".ui-icon");a.checked?(b.addClass(this.checkedClass).removeClass(this.uncheckedClass),c.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(b.removeClass(this.checkedClass).addClass(this.uncheckedClass),c.removeClass(this.checkedicon).addClass(this.uncheckedicon)),a.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",!0).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",!1).parent().removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,corners:!0,shadow:!0,iconshadow:!0,initSelector:"button, [type='button'], [type='submit'], [type='reset']"},_create:function(){var d=this.element,e,f=this.options,g,h,i=f.inline||d.jqmData("inline"),j=f.mini||d.jqmData("mini"),k="",l;if(d[0].tagName==="A"){d.hasClass("ui-btn")||d.buttonMarkup();return}this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),!~d[0].className.indexOf("ui-btn-left")||(k="ui-btn-left"),!~d[0].className.indexOf("ui-btn-right")||(k="ui-btn-right");if(d.attr("type")==="submit"||d.attr("type")==="reset")k?k+=" ui-submit":k="ui-submit";a("label[for='"+d.attr("id")+"']").addClass("ui-submit"),this.button=a("<div></div>")[d.html()?"html":"text"](d.html()||d.val()).insertBefore(d).buttonMarkup({theme:f.theme,icon:f.icon,iconpos:f.iconpos,inline:i,corners:f.corners,shadow:f.shadow,iconshadow:f.iconshadow,mini:j}).addClass(k).append(d.addClass("ui-btn-hidden")),e=this.button,g=d.attr("type"),h=d.attr("name"),g!=="button"&&g!=="reset"&&h&&d.bind("vclick",function(){l===b&&(l=a("<input>",{type:"hidden",name:d.attr("name"),value:d.attr("value")}).insertBefore(d),a(c).one("submit",function(){l.remove(),l=b}))}),d.bind({focus:function(){e.addClass(a.mobile.focusClass)},blur:function(){e.removeClass(a.mobile.focusClass)}}),this.refresh()},enable:function(){return this.element.attr("disabled",!1),this.button.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.button.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)},refresh:function(){var b=this.element;b.prop("disabled")?this.disable():this.enable(),a(this.button.data("buttonElements").text)[b.html()?"html":"text"](b.html()||b.val())}}),a(c).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.fn.controlgroup=function(b){function c(a,b){a.removeClass("ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow").eq(0).addClass(b[0]).end().last().addClass(b[1]).addClass("ui-controlgroup-last")}return this.each(function(){var d=a(this),e=a.extend({direction:d.jqmData("type")||"vertical",shadow:!1,excludeInvisible:!0,mini:d.jqmData("mini")},b),f=d.children("legend"),g=d.children(".ui-controlgroup-label"),h=d.children(".ui-controlgroup-controls"),i=e.direction==="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"],j=d.find("input").first().attr("type");h.length&&h.contents().unwrap(),d.wrapInner("<div class='ui-controlgroup-controls'></div>"),f.length?(a("<div role='heading' class='ui-controlgroup-label'>"+f.html()+"</div>").insertBefore(d.children(0)),f.remove()):g.length&&d.prepend(g),d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+e.direction),c(d.find(".ui-btn"+(e.excludeInvisible?":visible":"")).not(".ui-slider-handle"),i),c(d.find(".ui-btn-inner"),i),e.shadow&&d.addClass("ui-shadow"),e.mini&&d.addClass("ui-mini")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(b.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})}(a),function(a,d){function e(a,b,c,d){var e=d;return a<b?e=c+(a-b)/2:e=Math.min(Math.max(c,d-b/2),c+a-b),e}function f(){var c=a(b);return{x:c.scrollLeft(),y:c.scrollTop(),cx:b.innerWidth||c.width(),cy:b.innerHeight||c.height()}}a.widget("mobile.popup",a.mobile.widget,{options:{theme:null,overlayTheme:null,shadow:!0,corners:!0,transition:"none",positionTo:"origin",tolerance:null,initSelector:":jqmData(role='popup')",closeLinkSelector:"a:jqmData(rel='back')",closeLinkEvents:"click.popup",navigateEvents:"navigate.popup",closeEvents:"navigate.popup pagebeforechange.popup",history:!a.mobile.browser.ie},_eatEventAndClose:function(a){return a.preventDefault(),a.stopImmediatePropagation(),this.close(),!1},_resizeScreen:function(){var a=this._ui.container.outerHeight(!0);this._ui.screen.removeAttr("style"),a>this._ui.screen.height()&&this._ui.screen.height(a)},_handleWindowKeyUp:function(b){if(this._isOpen&&b.keyCode===a.mobile.keyCode.ESCAPE)return this._eatEventAndClose(b)},_maybeRefreshTimeout:function(){var b=f();if(this._resizeData){if(b.x===this._resizeData.winCoords.x&&b.y===this._resizeData.winCoords.y&&b.cx===this._resizeData.winCoords.cx&&b.cy===this._resizeData.winCoords.cy)return!1;clearTimeout(this._resizeData.timeoutId)}return this._resizeData={timeoutId:setTimeout(a.proxy(this,"_resizeTimeout"),200),winCoords:b},!0},_resizeTimeout:function(){this._maybeRefreshTimeout()||(this._trigger("beforeposition"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(this._placementCoords(this._desiredCoords(d,d,"window"))),this._resizeScreen(),this._resizeData=null,this._orientationchangeInProgress=!1)},_handleWindowResize:function(a){this._isOpen&&this._maybeRefreshTimeout()},_handleWindowOrientationchange:function(a){this._orientationchangeInProgress||(this._ui.container.addClass("ui-selectmenu-hidden").removeAttr("style"),this._orientationchangeInProgress=!0)},_create:function(){var c={screen:a("<div class='ui-screen-hidden ui-popup-screen'></div>"),placeholder:a("<div style='display: none;'><!-- placeholder --></div>"),container:a("<div class='ui-popup-container ui-selectmenu-hidden'></div>")},e=this.element.closest(".ui-page"),f=this.element.attr("id"),g=this;this.options.history=this.options.history&&a.mobile.ajaxEnabled&&a.mobile.hashListeningEnabled,e.length===0&&(e=a("body")),this.options.container=this.options.container||a.mobile.pageContainer,e.append(c.screen),c.container.insertAfter(c.screen),c.placeholder.insertAfter(this.element),f&&(c.screen.attr("id",f+"-screen"),c.container.attr("id",f+"-popup"),c.placeholder.html("<!-- placeholder for "+f+" -->")),c.container.append(this.element),this.element.addClass("ui-popup"),a.extend(this,{_page:e,_ui:c,_fallbackTransition:"",_currentTransition:!1,_prereqs:null,_isOpen:!1,_tolerance:null,_resizeData:null,_orientationchangeInProgress:!1,_globalHandlers:[{src:a(b),handler:{orientationchange:a.proxy(this,"_handleWindowOrientationchange"),resize:a.proxy(this,"_handleWindowResize"),keyup:a.proxy(this,"_handleWindowKeyUp")}}]}),a.each(this.options,function(a,b){g.options[a]=d,g._setOption(a,b,!0)}),c.screen.bind("vclick",a.proxy(this,"_eatEventAndClose")),a.each(this._globalHandlers,function(a,b){b.src.bind(b.handler)})},_applyTheme:function(a,b,c){var d=(a.attr("class")||"").split(" "),e=!0,f=null,g,h=String(b);while(d.length>0){f=d.pop(),g=(new RegExp("^ui-"+c+"-([a-z])$")).exec(f);if(g&&g.length>1){f=g[1];break}f=null}b!==f&&(a.removeClass("ui-"+c+"-"+f),b!==null&&b!=="none"&&a.addClass("ui-"+c+"-"+h))},_setTheme:function(a){this._applyTheme(this.element,a,"body")},_setOverlayTheme:function(a){this._applyTheme(this._ui.screen,a,"overlay"),this._isOpen&&this._ui.screen.addClass("in")},_setShadow:function(a){this.element.toggleClass("ui-overlay-shadow",a)},_setCorners:function(a){this.element.toggleClass("ui-corner-all",a)},_applyTransition:function(b){this._ui.container.removeClass(this._fallbackTransition),b&&b!=="none"&&(this._fallbackTransition=a.mobile._maybeDegradeTransition(b),this._ui.container.addClass(this._fallbackTransition))},_setTransition:function(a){this._currentTransition||this._applyTransition(a)},_setTolerance:function(b){var c={t:30,r:15,b:30,l:15};if(b){var d=String(b).split(",");a.each(d,function(a,b){d[a]=parseInt(b,10)});switch(d.length){case 1:isNaN(d[0])||(c.t=c.r=c.b=c.l=d[0]);break;case 2:isNaN(d[0])||(c.t=c.b=d[0]),isNaN(d[1])||(c.l=c.r=d[1]);break;case 4:isNaN(d[0])||(c.t=d[0]),isNaN(d[1])||(c.r=d[1]),isNaN(d[2])||(c.b=d[2]),isNaN(d[3])||(c.l=d[3]);break;default:}}this._tolerance=c},_setOption:function(b,c){var e,f="_set"+b.charAt(0).toUpperCase()+b.slice(1);this[f]!==d&&this[f](c),e=["initSelector","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","history","container"],a.mobile.widget.prototype._setOption.apply(this,arguments),a.inArray(b,e)===-1&&this.element.attr("data-"+(a.mobile.ns||"")+b.replace(/([A-Z])/,"-$1").toLowerCase(),c)},_placementCoords:function(a){var b=f(),d={x:this._tolerance.l,y:b.y+this._tolerance.t,cx:b.cx-this._tolerance.l-this._tolerance.r,cy:b.cy-this._tolerance.t-this._tolerance.b},g,h;this._ui.container.css("max-width",d.cx),g={cx:this._ui.container.outerWidth(!0),cy:this._ui.container.outerHeight(!0)},h={x:e(d.cx,g.cx,d.x,a.x),y:e(d.cy,g.cy,d.y,a.y)},h.y=Math.max(0,h.y);var i=c.documentElement,j=c.body,k=Math.max(i.clientHeight,j.scrollHeight,j.offsetHeight,i.scrollHeight,i.offsetHeight);return h.y-=Math.min(h.y,Math.max(0,h.y+g.cy-k)),{left:h.x,top:h.y}},_createPrereqs:function(b,c,d){var e=this,f;f={screen:a.Deferred(),container:a.Deferred()},f.screen.then(function(){f===e._prereqs&&b()}),f.container.then(function(){f===e._prereqs&&c()}),a.when(f.screen,f.container).done(function(){f===e._prereqs&&(e._prereqs=null,d())}),e._prereqs=f},_animate:function(b){this._ui.screen.removeClass(b.classToRemove).addClass(b.screenClassToAdd),b.prereqs.screen.resolve(),b.transition&&b.transition!=="none"?(b.applyTransition&&this._applyTransition(b.transition),this._ui.container.animationComplete(a.proxy(b.prereqs.container,"resolve")).addClass(b.containerClassToAdd).removeClass(b.classToRemove)):b.prereqs.container.resolve()},_desiredCoords:function(b,c,d){var e=null,g,h=f();if(d&&d!=="origin")if(d==="window")b=h.cx/2+h.x,c=h.cy/2+h.y;else{try{e=a(d)}catch(i){e=null}e&&(e.filter(":visible"),e.length===0&&(e=null))}e&&(g=e.offset(),b=g.left+e.outerWidth()/2,c=g.top+e.outerHeight()/2);if(a.type(b)!=="number"||isNaN(b))b=h.cx/2+h.x;if(a.type(c)!=="number"||isNaN(c))c=h.cy/2+h.y;return{x:b,y:c}},_openPrereqsComplete:function(){var a=this;a._ui.container.addClass("ui-popup-active"),a._isOpen=!0,a._resizeScreen(),setTimeout(function(){a._ui.container.attr("tabindex","0").focus(),a._trigger("afteropen")})},_open:function(c){var d,e,f=function(){var a=b,c=navigator.userAgent,d=c.match(/AppleWebKit\/([0-9\.]+)/),e=!!d&&d[1],f=c.match(/Android (\d+(?:\.\d+))/),g=!!f&&f[1],h=c.indexOf("Chrome")>-1;return f!==null&&g==="4.0"&&e&&e>534.13&&!h?!0:!1}();c=c||{},e=c.transition||this.options.transition,this._trigger("beforeposition"),d=this._placementCoords(this._desiredCoords(c.x,c.y,c.positionTo||this.options.positionTo||"origin")),this._createPrereqs(a.noop,a.noop,a.proxy(this,"_openPrereqsComplete")),e?(this._currentTransition=e,this._applyTransition(e)):e=this.options.transition,this.options.theme||this._setTheme(this._page.jqmData("theme")||a.mobile.getInheritedTheme(this._page,"c")),this._ui.screen.removeClass("ui-screen-hidden"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(d),this.options.overlayTheme&&f&&this.element.closest(".ui-page").addClass("ui-popup-open"),this._animate({additionalCondition:!0,transition:e,classToRemove:"",screenClassToAdd:"in",containerClassToAdd:"in",applyTransition:!1,prereqs:this._prereqs})},_closePrereqScreen:function(){this._ui.screen.removeClass("out").addClass("ui-screen-hidden")},_closePrereqContainer:function(){this._ui.container.removeClass("reverse out").addClass("ui-selectmenu-hidden").removeAttr("style")},_closePrereqsDone:function(){var b=this,c=b.options;b._ui.container.removeAttr("tabindex"),c.container.unbind(c.closeEvents),b.element.undelegate(c.closeLinkSelector,c.closeLinkEvents),a.mobile.popup.active=d,b._trigger("afterclose")},_close:function(){this._ui.container.removeClass("ui-popup-active"),this._page.removeClass("ui-popup-open"),this._isOpen=!1,this._createPrereqs(a.proxy(this,"_closePrereqScreen"),a.proxy(this,"_closePrereqContainer"),a.proxy(this,"_closePrereqsDone")),this._animate({additionalCondition:this._ui.screen.hasClass("in"),transition:this._currentTransition||this.options.transition,classToRemove:"in",screenClassToAdd:"out",containerClassToAdd:"reverse out",applyTransition:!0,prereqs:this._prereqs})},_destroy:function(){var b=this;b._close(),b._setTheme("none"),b.element.insertAfter(b._ui.placeholder).removeClass("ui-popup ui-overlay-shadow ui-corner-all"),b._ui.screen.remove(),b._ui.container.remove(),b._ui.placeholder.remove(),a.each(b._globalHandlers,function(b,c){a.each(c.handler,function(a,b){c.src.unbind(a,b)})})},_bindContainerClose:function(){var b=this;b.options.container.one(b.options.closeEvents,a.proxy(b._close,b))},open:function(b){var c=this,e=this.options,f,g,h,i,j,k;if(a.mobile.popup.active)return;a.mobile.popup.active=this;if(!e.history){c._open(b),c._bindContainerClose(),c.element.delegate(e.closeLinkSelector,e.closeLinkEvents,function(a){return c._close(),!1});return}g=a.mobile.dialogHashKey,h=a.mobile.activePage,i=h.is(".ui-dialog"),f=a.mobile.urlHistory.getActive().url,j=f.indexOf(g)>-1&&!i,k=a.mobile.urlHistory;if(j){c._open(b),c._bindContainerClose();return}f.indexOf(g)===-1&&!i?f=f+g:f=a.mobile.path.parseLocation().hash+g,k.activeIndex===0&&f===k.initialDst&&(f+=g),e.container.one(e.navigateEvents,function(a){a.preventDefault(),c._open(b),c._bindContainerClose()}),k.ignoreNextHashChange=i,k.addNew(f,d,d,d,"dialog"),a.mobile.path.set(f)},close:function(){if(!a.mobile.popup.active)return;this.options.history?a.mobile.back():this._close()}}),a.mobile.popup.handleLink=function(b){var c=b.closest(":jqmData(role='page')"),d=c.length===0?a("body"):c,e=a(a.mobile.path.parseUrl(b.attr("href")).hash,d[0]),f;e.data("popup")&&(f=b.offset(),e.popup("open",{x:f.left+b.outerWidth()/2,y:f.top+b.outerHeight()/2,transition:b.jqmData("transition"),positionTo:b.jqmData("position-to"),link:b})),setTimeout(function(){b.removeClass(a.mobile.activeBtnClass)},300)},a(c).bind("pagebeforechange",function(b,c){c.options.role==="popup"&&(a.mobile.popup.handleLink(c.options.link),b.preventDefault())}),a(c).bind("pagecreate create",function(b){a.mobile.popup.prototype.enhanceWithin(b.target,!0)})}(a),function(a){var b=a("meta[name=viewport]"),c=b.attr("content"),d=c+",maximum-scale=1, user-scalable=no",e=c+",maximum-scale=10, user-scalable=yes",f=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(c);a.mobile.zoom=a.extend({},{enabled:!f,locked:!1,disable:function(c){!f&&!a.mobile.zoom.locked&&(b.attr("content",d),a.mobile.zoom.enabled=!1,a.mobile.zoom.locked=c||!1)},enable:function(c){!f&&(!a.mobile.zoom.locked||c===!0)&&(b.attr("content",e),a.mobile.zoom.enabled=!0,a.mobile.zoom.locked=!1)},restore:function(){f||(b.attr("content",c),a.mobile.zoom.enabled=!0)}})}(a),function(a,d){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",clearSearchButtonText:"clear text",disabled:!1},_create:function(){function m(){setTimeout(function(){l.toggleClass("ui-input-clear-hidden",!e.val())},0)}var d=this,e=this.element,f=this.options,g=f.theme||a.mobile.getInheritedTheme(this.element,"c"),h=" ui-body-"+g,i=e.jqmData("mini")===!0,j=i?" ui-mini":"",k,l;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text"),k=e.addClass("ui-input-text ui-body-"+g),typeof e[0].autocorrect!="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off")),e.is("[type='search'],:jqmData(type='search')")?(k=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+h+j+"'></div>").parent(),l=a("<a href='#' class='ui-input-clear' title='"+f.clearSearchButtonText+"'>"+f.clearSearchButtonText+"</a>").bind("click",function(a){e.val("").focus().trigger("change"),l.addClass("ui-input-clear-hidden"),a.preventDefault()}).appendTo(k).buttonMarkup({icon:"delete",iconpos:"notext",corners:!0,shadow:!0,mini:i}),m(),e.bind("paste cut keyup focus change blur",m)):e.addClass("ui-corner-all ui-shadow-inset"+h+j),e.focus(function(){k.addClass(a.mobile.focusClass)}).blur(function(){k.removeClass(a.mobile.focusClass)}).bind("focus",function(){f.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("blur",function(){f.preventFocusZoom&&a.mobile.zoom.enable(!0)});if(e.is("textarea")){var n=15,o=100,p;this._keyup=function(){var a=e[0].scrollHeight,b=e[0].clientHeight;b<a&&e.height(a+n)},e.keyup(function(){clearTimeout(p),p=setTimeout(d._keyup,o)}),this._on(a(c),{pagechange:"_keyup"}),a.trim(e.val())&&this._on(a(b),{load:"_keyup"})}e.attr("disabled")&&this.disable()},disable:function(){var a;return this.element.attr("disabled",!0).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.addClass("ui-disabled"),this._setOption("disabled",!0)},enable:function(){var a;return this.element.attr("disabled",!1).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.removeClass("ui-disabled"),this._setOption("disabled",!1)}}),a(c).bind("pagecreate create",function(b){a.mobile.textinput.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.mobile.listview.prototype.options.filter=!1,a.mobile.listview.prototype.options.filterPlaceholder="Filter items...",a.mobile.listview.prototype.options.filterTheme="c";var d=function(a,b,c){return a.toString().toLowerCase().indexOf(b)===-1};a.mobile.listview.prototype.options.filterCallback=d,a(c).delegate(":jqmData(role='listview')","listviewcreate",function(){var b=a(this),c=b.data("listview");if(!c.options.filter)return;var e=a("<form>",{"class":"ui-listview-filter ui-bar-"+c.options.filterTheme,role:"search"}),f=a("<input>",{placeholder:c.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var e=a(this),f=this.value.toLowerCase(),g=null,h=e.jqmData("lastval")+"",i=!1,j="",k,l=c.options.filterCallback!==d;c._trigger("beforefilter","beforefilter",{input:this}),e.jqmData("lastval",f),l||f.length<h.length||f.indexOf(h)!==0?g=b.children():g=b.children(":not(.ui-screen-hidden)");if(f){for(var m=g.length-1;m>=0;m--)k=a(g[m]),j=k.jqmData("filtertext")||k.text(),k.is("li:jqmData(role=list-divider)")?(k.toggleClass("ui-filter-hidequeue",!i),i=!1):c.options.filterCallback(j,f,k)?k.toggleClass("ui-filter-hidequeue",!0):i=!0;g.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",!1),g.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",!0).toggleClass("ui-filter-hidequeue",!1)}else g.toggleClass("ui-screen-hidden",!1);c._refreshCorners()}).appendTo(e).textinput();c.options.inset&&e.addClass("ui-listview-filter-inset"),e.bind("submit",function(){return!1}).insertBefore(b)})}(a),function(a,d){a.widget("mobile.slider",a.mobile.widget,{widgetEventPrefix:"slide",options:{theme:null,trackTheme:null,disabled:!1,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:!1},_create:function(){var e=this,f=this.element,g=a.mobile.getInheritedTheme(f,"c"),h=this.options.theme||g,i=this.options.trackTheme||g,j=f[0].nodeName.toLowerCase(),k=j==="select"?"ui-slider-switch":"",l=f.attr("id"),m=a("[for='"+l+"']"),n=m.attr("id")||l+"-label",o=m.attr("id",n),p=function(){return j==="input"?parseFloat(f.val()):f[0].selectedIndex},q=j==="input"?parseFloat(f.attr("min")):0,r=j==="input"?parseFloat(f.attr("max")):f.find("option").length-1,s=b.parseFloat(f.attr("step")||1),t=this.options.inline||f.jqmData("inline")===!0?" ui-slider-inline":"",u=this.options.mini||f.jqmData("mini")?" ui-slider-mini":"",v=c.createElement("a"),w=a(v),x=c.createElement("div"),y=a(x),z=f.jqmData("highlight")&&j!=="select"?function(){var b=c.createElement("div");return b.className="ui-slider-bg "+a.mobile.activeBtnClass+" ui-btn-corner-all",a(b).prependTo(y)}():!1,A;this._type=j,v.setAttribute("href","#"),x.setAttribute("role","application"),x.className=["ui-slider ",k," ui-btn-down-",i," ui-btn-corner-all",t,u].join(""),v.className="ui-slider-handle",x.appendChild(v),w.buttonMarkup({corners:!0,theme:h,shadow:!0}).attr({role:"slider","aria-valuemin":q,"aria-valuemax":r,"aria-valuenow":p(),"aria-valuetext":p(),title:p(),"aria-labelledby":n}),a.extend(this,{slider:y,handle:w,valuebg:z,dragging:!1,beforeStart:null,userModified:!1,mouseMoved:!1});if(j==="select"){var B=c.createElement("div");B.className="ui-slider-inneroffset";for(var C=0,D=x.childNodes.length;C<D;C++)B.appendChild(x.childNodes[C]);x.appendChild(B),w.addClass("ui-slider-handle-snapping"),A=f.find("option");for(var E=0,F=A.length;E<F;E++){var G=E?"a":"b",H=E?" "+a.mobile.activeBtnClass:" ui-btn-down-"+i,I=c.createElement("div"),J=c.createElement("span");J.className=["ui-slider-label ui-slider-label-",G,H," ui-btn-corner-all"].join(""),J.setAttribute("role","img"),J.appendChild(c.createTextNode(A[E].innerHTML)),a(J).prependTo(y)}e._labels=a(".ui-slider-label",y)}o.addClass("ui-slider"),f.addClass(j==="input"?"ui-slider-input":"ui-slider-switch").change(function(){e.mouseMoved||e.refresh(p(),!0)}).keyup(function(){e.refresh(p(),!0,!0)}).blur(function(){e.refresh(p(),!0)}),this._preventDocumentDrag=function(a){if(e.dragging&&!e.options.disabled)return e.mouseMoved=!0,j==="select"&&w.removeClass("ui-slider-handle-snapping"),e.refresh(a),e.userModified=e.beforeStart!==f[0].selectedIndex,!1},this._on(a(c),{vmousemove:this._preventDocumentDrag}),f.bind("vmouseup",a.proxy(e._checkedRefresh,e)),y.bind("vmousedown",function(a){return e.options.disabled?!1:(e.dragging=!0,e.userModified=!1,e.mouseMoved=!1,j==="select"&&(e.beforeStart=f[0].selectedIndex),e.refresh(a),e._trigger("start"),!1)}).bind("vclick",!1),this._sliderMouseUp=function(){if(e.dragging)return e.dragging=!1,j==="select"&&(w.addClass("ui-slider-handle-snapping"),e.mouseMoved?e.userModified?e.refresh(e.beforeStart===0?1:0):e.refresh(e.beforeStart):e.refresh(e.beforeStart===0?1:0)),e.mouseMoved=!1,e._trigger("stop"),!1},this._on(y.add(c),{vmouseup:this._sliderMouseUp}),y.insertAfter(f),j==="select"&&this.handle.bind({focus:function(){y.addClass(a.mobile.focusClass)},blur:function(){y.removeClass(a.mobile.focusClass)}}),this.handle.bind({vmousedown:function(){a(this).focus()},vclick:!1,keydown:function(b){var c=p();if(e.options.disabled)return;switch(b.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.preventDefault(),e._keySliding||(e._keySliding=!0,a(this).addClass("ui-state-active"))}switch(b.keyCode){case a.mobile.keyCode.HOME:e.refresh(q);break;case a.mobile.keyCode.END:e.refresh(r);break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:e.refresh(c+s);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:e.refresh(c-s)}},keyup:function(b){e._keySliding&&(e._keySliding=!1,a(this).removeClass("ui-state-active"))}}),this.refresh(d,d,!0)},_checkedRefresh:function(){this.value!=this._value()&&this.refresh(this._value())},_value:function(){return this._type==="input"?parseFloat(this.element.val()):this.element[0].selectedIndex},refresh:function(b,c,d){(this.options.disabled||this.element.attr("disabled"))&&this.disable(),this.value=this._value();var e=this.element,f,g=e[0].nodeName.toLowerCase(),h=g==="input"?parseFloat(e.attr("min")):0,i=g==="input"?parseFloat(e.attr("max")):e.find("option").length-1,j=g==="input"&&parseFloat(e.attr("step"))>0?parseFloat(e.attr("step")):1;if(typeof b=="object"){var k=b,l=8;if(!this.dragging||k.pageX<this.slider.offset().left-l||k.pageX>this.slider.offset().left+this.slider.width()+l)return;f=Math.round((k.pageX-this.slider.offset().left)/this.slider.width()*100)}else b==null&&(b=g==="input"?parseFloat(e.val()||0):e[0].selectedIndex),f=(parseFloat(b)-h)/(i-h)*100;if(isNaN(f))return;f<0&&(f=0),f>100&&(f=100);var m=f/100*(i-h)+h,n=(m-h)%j,o=m-n;Math.abs(n)*2>=j&&(o+=n>0?j:-j),m=parseFloat(o.toFixed(5)),m<h&&(m=h),m>i&&(m=i),this.handle.css("left",f+"%"),this.handle.attr({"aria-valuenow":g==="input"?m:e.find("option").eq(m).attr("value"),"aria-valuetext":g==="input"?m:e.find("option").eq(m).getEncodedText(),title:g==="input"?m:e.find("option").eq(m).getEncodedText()}),this.valuebg&&this.valuebg.css("width",f+"%");if(this._labels){var p=this.handle.width()/this.slider.width()*100,q=f&&p+(100-p)*f/100,r=f===100?0:Math.min(p+100-q,100);this._labels.each(function(){var b=a(this).is(".ui-slider-label-a");a(this).width((b?q:r)+"%")})}if(!d){var s=!1;g==="input"?(s=e.val()!==m,e.val(m)):(s=e[0].selectedIndex!==m,e[0].selectedIndex=m),!c&&s&&e.trigger("change")}},enable:function(){return this.element.attr("disabled",!1),this.slider.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.slider.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)}}),a(c).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:!1,icon:"arrow-d",iconpos:"right",inline:!1,corners:!0,shadow:!0,iconshadow:!0,overlayTheme:"a",hidePlaceholderMenuItems:!0,closeText:"Close",nativeMenu:!0,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"select:not( :jqmData(role='slider') )",mini:!1},_button:function(){return a("<div/>")},_setDisabled:function(a){return this.element.attr("disabled",a),this.button.attr("aria-disabled",a),this._setOption("disabled",a)},_focusButton:function(){var a=this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var b="";!~this.element[0].className.indexOf("ui-btn-left")||(b=" ui-btn-left"),!~this.element[0].className.indexOf("ui-btn-right")||(b=" ui-btn-right"),this.select=this.element.wrap("<div class='ui-select"+b+"'>"),this.selectID=this.select.attr("id"),this.label=a("label[for='"+this.selectID+"']").addClass("ui-select"),this.isMultiple=this.select[0].multiple,this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.select,"c"))},_create:function(){this._preExtension(),this._trigger("beforeCreate"),this.button=this._button();var c=this,d=this.options,e=d.inline||this.select.jqmData("inline"),f=d.mini||this.select.jqmData("mini"),g=d.icon?d.iconpos||this.select.jqmData("iconpos"):!1,h=this.select[0].selectedIndex===-1?0:this.select[0].selectedIndex,i=this.button.insertBefore(this.select).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:g,inline:e,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow,mini:f});this.setButtonText(),d.nativeMenu&&b.opera&&b.opera.version&&i.addClass("ui-select-nativeonly"),this.isMultiple&&(this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(i.addClass("ui-li-has-count"))),(d.disabled||this.element.attr("disabled"))&&this.disable(),this.select.change(function(){c.refresh()}),this.build()},build:function(){var b=this;this.select.appendTo(b.button).bind("vmousedown",function(){b.button.addClass(a.mobile.activeBtnClass)}).bind("focus",function(){b.button.addClass(a.mobile.focusClass)}).bind("blur",function(){b.button.removeClass(a.mobile.focusClass)}).bind("focus vmouseover",function(){b.button.trigger("vmouseover")}).bind("vmousemove",function(){b.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){b.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",function(){b.button.removeClass("ui-btn-down-"+b.options.theme)}),b.button.bind("vmousedown",function(){b.options.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("mouseup",function(){b.options.preventFocusZoom&&setTimeout(function(){a.mobile.zoom.enable(!0)},0)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var b=this,d=this.selected(),e=this.placeholder,f=a(c.createElement("span"));this.button.find(".ui-btn-text").html(function(){return d.length?e=d.map(function(){return a(this).text()}).get().join(", "):e=b.placeholder,f.text(e).addClass(b.select.attr("class")).addClass(d.attr("class"))})},setButtonCount:function(){var a=this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText(),this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(!0),this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(!1),this.button.removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.selectmenu.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){var e=function(d){var e=d.select,f=d.selectID,g=d.label,h=d.select.closest(".ui-page"),i=d._selectOptions(),j=d.isMultiple=d.select[0].multiple,k=f+"-button",l=f+"-menu",m=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+d.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+d.options.overlayTheme+"'>"+"<div data-"+a.mobile.ns+"role='header'>"+"<div class='ui-title'>"+g.getEncodedText()+"</div>"+"</div>"+"<div data-"+a.mobile.ns+"role='content'></div>"+"</div>"),n=a("<div>",{"class":"ui-selectmenu"}).insertAfter(d.select).popup({theme:"a"}),o=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",d.options.theme).appendTo(n),p=a("<div>",{"class":"ui-header ui-bar-"+d.options.theme}).prependTo(n),q=a("<h1>",{"class":"ui-title"}).appendTo(p),r,s,t;d.isMultiple&&(t=a("<a>",{text:d.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(p).buttonMarkup()),a.extend(d,{select:d.select,selectID:f,buttonId:k,menuId:l,thisPage:h,menuPage:m,label:g,selectOptions:i,isMultiple:j,theme:d.options.theme,listbox:n,list:o,header:p,headerTitle:q,headerClose:t,menuPageContent:r,menuPageClose:s,placeholder:"",build:function(){var b=this;b.refresh(),b.select.attr("tabindex","-1").focus(function(){a(this).blur(),b.button.focus()}),b.button.bind("vclick keydown",function(c){if(c.type==="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()}),b.list.attr("role","listbox").bind("focusin",function(b){a(b.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(b){a(b.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)","click",function(c){var e=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),g=b._selectOptions().eq(f)[0];g.selected=b.isMultiple?!g.selected:!0,b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",g.selected).toggleClass("ui-icon-checkbox-off",!g.selected),(b.isMultiple||e!==f)&&b.select.trigger("change"),b.isMultiple?b.list.find("li:not(.ui-li-divider)").eq(f).addClass("ui-btn-down-"+d.options.theme).find("a").first().focus():b.close(),c.preventDefault()}).keydown(function(b){var c=a(b.target),e=c.closest("li"),f,g;switch(b.keyCode){case 38:return f=e.prev().not(".ui-selectmenu-placeholder"),f.is(".ui-li-divider")&&(f=f.prev()),f.length&&(c.blur().attr("tabindex","-1"),f.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 40:return g=e.next(),g.is(".ui-li-divider")&&(g=g.next()),g.length&&(c.blur().attr("tabindex","-1"),g.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 13:case 32:return c.trigger("click"),!1}}),b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox),b._focusButton(),a.mobile._bindPageRemove.call(b.thisPage)}),b.listbox.bind("popupafterclose",function(a){b.close()}),b.isMultiple&&b.headerClose.click(function(){if(b.menuType==="overlay")return b.close(),!1}),b.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var a=this.list.find("li"),b=this._selectOptions();return b.text()!==a.text()},selected:function(){return this._selectOptions().filter(":selected:not( :jqmData(placeholder='true') )")},refresh:function(b,c){var d=this,e=this.element,f=this.isMultiple,g;(b||this._isRebuildRequired())&&d._buildList(),g=this.selectedIndices(),d.setButtonText(),d.setButtonCount(),d.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",!1).each(function(b){if(a.inArray(b,g)>-1){var c=a(this);c.attr("aria-selected",!0),d.isMultiple?c.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):c.is(".ui-selectmenu-placeholder")?c.next().addClass(a.mobile.activeBtnClass):c.addClass(a.mobile.activeBtnClass)}})},close:function(){if(this.options.disabled||!this.isOpen)return;var b=this;b.menuType==="page"?a.mobile.back():(b.listbox.popup("close"),b.list.appendTo(b.listbox),b._focusButton()),b.isOpen=!1},open:function(){function o(){var b=c.list.find("."+a.mobile.activeBtnClass+" a");b.length===0&&(b=c.list.find("li.ui-btn:not( :jqmData(placeholder='true') ) a")),b.first().focus().closest("li").addClass("ui-btn-down-"+d.options.theme)}if(this.options.disabled)return;var c=this,e=a(b),f=c.list.parent(),g=f.outerHeight(),h=f.outerWidth(),i=a("."+a.mobile.activePageClass),j=e.scrollTop(),k=c.button.offset().top,l=e.height(),n=e.width();c.button.addClass(a.mobile.activeBtnClass),setTimeout(function(){c.button.removeClass(a.mobile.activeBtnClass)},300),g>l-80||!a.support.scrollTop?(c.menuPage.appendTo(a.mobile.pageContainer).page(),c.menuPageContent=m.find(".ui-content"),c.menuPageClose=m.find(".ui-header a"),c.thisPage.unbind("pagehide.remove"),j===0&&k>l&&c.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",k)}),c.menuPage.one("pageshow",function(){o(),c.isOpen=!0}),c.menuType="page",c.menuPageContent.append(c.list),c.menuPage.find("div .ui-title").text(c.label.text()),a.mobile.changePage(c.menuPage,{transition:a.mobile.defaultDialogTransition})):(c.menuType="overlay",c.listbox.one("popupafteropen",o).popup("open",{x:c.button.offset().left+c.button.outerWidth()/2,y:c.button.offset().top+c.button.outerHeight()/2}),c.isOpen=!0)},_buildList:function(){var b=this,d=this.options,e=this.placeholder,f=!0,g=[],h=[],i=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");var j=b.select.find("option"),k=j.length,l=this.select[0],m="data-"+a.mobile.ns,n=m+"option-index",o=m+"icon",p=m+"role",q=m+"placeholder",r=c.createDocumentFragment(),s=!1,t;for(var u=0;u<k;u++,s=!1){var v=j[u],w=a(v),x=v.parentNode,y=w.text(),z=c.createElement("a"),A=[];z.setAttribute("href","#"),z.appendChild(c.createTextNode(y));if(x!==l&&x.nodeName.toLowerCase()==="optgroup"){var B=x.getAttribute("label");if(B!==t){var C=c.createElement("li");C.setAttribute(p,"list-divider"),C.setAttribute("role","option"),C.setAttribute("tabindex","-1"),C.appendChild(c.createTextNode(B)),r.appendChild(C),t=B}}f&&(!v.getAttribute("value")||y.length===0||w.jqmData("placeholder"))&&(f=!1,s=!0,v.setAttribute(q,!0),d.hidePlaceholderMenuItems&&A.push("ui-selectmenu-placeholder"),e||(e=b.placeholder=y));var D=c.createElement("li");v.disabled&&(A.push("ui-disabled"),D.setAttribute("aria-disabled",!0)),D.setAttribute(n,u),D.setAttribute(o,i),s&&D.setAttribute(q,!0),D.className=A.join(" "),D.setAttribute("role","option"),z.setAttribute("tabindex","-1"),D.appendChild(z),r.appendChild(D)}b.list[0].appendChild(r),!this.isMultiple&&!e.length?this.header.hide():this.headerTitle.text(this.placeholder),b.list.listview()},_button:function(){return a("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a(c).bind("selectmenubeforecreate",function(b){var c=a(b.target).data("selectmenu");!c.options.nativeMenu&&c.element.parents(":jqmData(role='popup')").length===0&&e(c)})}(a),function(a,d){a.widget("mobile.fixedtoolbar",a.mobile.widget,{options:{visibleOnPageShow:!0,disablePageZoom:!0,transition:"slide",fullscreen:!1,tapToggle:!0,tapToggleBlacklist:"a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup",hideDuringFocus:"input, textarea, select",updatePagePadding:!0,trackPersistentToolbars:!0,supportBlacklist:function(){var a=b,c=navigator.userAgent,d=navigator.platform,e=c.match(/AppleWebKit\/([0-9]+)/),f=!!e&&e[1],g=c.match(/Fennec\/([0-9]+)/),h=!!g&&g[1],i=c.match(/Opera Mobi\/([0-9]+)/),j=!!i&&i[1];return(d.indexOf("iPhone")>-1||d.indexOf("iPad")>-1||d.indexOf("iPod")>-1)&&f&&f<534||a.operamini&&{}.toString.call(a.operamini)==="[object OperaMini]"||i&&j<7458||c.indexOf("Android")>-1&&f&&f<533||h&&h<6||"palmGetResource"in b&&f&&f<534||c.indexOf("MeeGo")>-1&&c.indexOf("NokiaBrowser/8.5.0")>-1?!0:!1},initSelector:":jqmData(position='fixed')"},_create:function(){var a=this,b=a.options,c=a.element,d=c.is(":jqmData(role='header')")?"header":"footer",e=c.closest(".ui-page");if(b.supportBlacklist()){a.destroy();return}c.addClass("ui-"+d+"-fixed"),b.fullscreen?(c.addClass("ui-"+d+"-fullscreen"),e.addClass("ui-page-"+d+"-fullscreen")):e.addClass("ui-page-"+d+"-fixed"),a._addTransitionClass(),a._bindPageEvents(),a._bindToggleHandlers()},_addTransitionClass:function(){var a=this.options.transition;a&&a!=="none"&&(a==="slide"&&(a=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(a))},_bindPageEvents:function(){var c=this,d=c.options,e=c.element;e.closest(".ui-page").bind("pagebeforeshow",function(){d.disablePageZoom&&a.mobile.zoom.disable(!0),d.visibleOnPageShow||c.hide(!0)}).bind("webkitAnimationStart animationstart updatelayout",function(){var a=this;d.updatePagePadding&&c.updatePagePadding(a)}).bind("pageshow",function(){var e=this;c.updatePagePadding(e),d.updatePagePadding&&a(b).bind("throttledresize."+c.widgetName,function(){c.updatePagePadding(e)})}).bind("pagebeforehide",function(e,f){d.disablePageZoom&&a.mobile.zoom.enable(!0),d.updatePagePadding&&a(b).unbind("throttledresize."+c.widgetName);if(d.trackPersistentToolbars){var g=a(".ui-footer-fixed:jqmData(id)",this),h=a(".ui-header-fixed:jqmData(id)",this),i=g.length&&f.nextPage&&a(".ui-footer-fixed:jqmData(id='"+g.jqmData("id")+"')",f.nextPage)||a(),j=h.length&&f.nextPage&&a(".ui-header-fixed:jqmData(id='"+h.jqmData("id")+"')",f.nextPage)||a();if(i.length||j.length)i.add(j).appendTo(a.mobile.pageContainer),f.nextPage.one("pageshow",function(){i.add(j).appendTo(this)})}})},_visible:!0,updatePagePadding:function(b){var c=this.element,d=c.is(".ui-header");if(this.options.fullscreen)return;b=b||c.closest(".ui-page"),a(b).css("padding-"+(d?"top":"bottom"),c.outerHeight())},_useTransition:function(c){var d=a(b),e=this.element,f=d.scrollTop(),g=e.height(),h=e.closest(".ui-page").height(),i=a.mobile.getScreenHeight(),j=e.is(":jqmData(role='header')")?"header":"footer";return!c&&(this.options.transition&&this.options.transition!=="none"&&(j==="header"&&!this.options.fullscreen&&f>g||j==="footer"&&!this.options.fullscreen&&f+i<h-g)||this.options.fullscreen)},show:function(a){var b="ui-fixed-hidden",c=this.element;this._useTransition(a)?c.removeClass("out "+b).addClass("in"):c.removeClass(b),this._visible=!0},hide:function(a){var b="ui-fixed-hidden",c=this.element,d="out"+(this.options.transition==="slide"?" reverse":"");this._useTransition(a)?c.addClass(d).removeClass("in").animationComplete(function(){c.addClass(b).removeClass(d)}):c.addClass(b).removeClass(d),this._visible=!1},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var b=this,c=b.options,d=b.element;d.closest(".ui-page").bind("vclick",function(d){c.tapToggle&&!a(d.target).closest(c.tapToggleBlacklist).length&&b.toggle()}).bind("focusin focusout",function(d){screen.width<500&&a(d.target).is(c.hideDuringFocus)&&!a(d.target).closest(".ui-header-fixed, .ui-footer-fixed").length&&b[d.type==="focusin"&&b._visible?"hide":"show"]()})},destroy:function(){this.element.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden"),this.element.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}}),a(c).bind("pagecreate create",function(b){a(b.target).jqmData("fullscreen")&&a(a.mobile.fixedtoolbar.prototype.options.initSelector,b.target).not(":jqmData(fullscreen)").jqmData("fullscreen",!0),a.mobile.fixedtoolbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){function i(a){d=a.originalEvent,h=d.accelerationIncludingGravity,e=Math.abs(h.x),f=Math.abs(h.y),g=Math.abs(h.z),!b.orientation&&(e>7||(g>6&&f<8||g<8&&f>6)&&e>5)?c.enabled&&c.disable():c.enabled||c.enable()}if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1))return;var c=a.mobile.zoom,d,e,f,g,h;a(b).bind("orientationchange.iosorientationfix",c.enable).bind("devicemotion.iosorientationfix",i)}(a,this),function(a,b,d){function h(){e.removeClass("ui-mobile-rendering")}var e=a("html"),f=a("head"),g=a(b);a(b.document).trigger("mobileinit");if(!a.mobile.gradeA())return;a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),e.addClass("ui-mobile ui-mobile-rendering"),setTimeout(h,5e3),a.extend(a.mobile,{initializePage:function(){var b=a(":jqmData(role='page'), :jqmData(role='dialog')"),d=a.mobile.path.parseLocation().hash.replace("#",""),e=c.getElementById(d);b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0)),b.each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)}),a.mobile.firstPage=b.first(),a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport"),g.trigger("pagecontainercreate"),a.mobile.showPageLoadingMsg(),h(),!a.mobile.hashListeningEnabled||!a.mobile.path.isHashValid(location.hash)||!a(e).is(':jqmData(role="page")')&&!a.mobile.path.isPath(d)&&d!==a.mobile.dialogHashKey?(a.mobile.path.isHashValid(location.hash)&&(a.mobile.urlHistory.initialDst=d.replace("#","")),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0})):g.trigger("hashchange",[!0])}}),a.mobile.navreadyDeferred.resolve(),a(function(){b.scrollTo(0,1),a.mobile.defaultHomeScroll=!a.support.scrollTop||a(b).scrollTop()===1?0:1,a.fn.controlgroup&&a(c).bind("pagecreate create",function(b){a(":jqmData(role='controlgroup')",b.target).jqmEnhanceable().controlgroup({excludeInvisible:!1})}),a.mobile.autoInitializePage&&a.mobile.initializePage(),g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a(c).delegate(".ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})})}(a,this)});
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/manifest.json b/tv/tct-behavior-tests/manifest.json
new file mode 100755 (executable)
index 0000000..4996ae2
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "version": "3.0",
+    "name": "tct-behavior-tests",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "tct-behavior-tests",
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    },
+    "icons": {
+        "128": "icon.png"
+    }
+}
diff --git a/tv/tct-behavior-tests/pack.py b/tv/tct-behavior-tests/pack.py
new file mode 100755 (executable)
index 0000000..e67cd36
--- /dev/null
@@ -0,0 +1,1104 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Fan, Yugang <yugang.fan@intel.com>
+
+import os
+import shutil
+import glob
+import time
+import sys
+import stat
+import random
+import json
+import logging
+import zipfile
+import signal
+import subprocess
+from optparse import OptionParser
+
+reload(sys)
+sys.setdefaultencoding('utf8')
+
+TOOL_VERSION = "v0.1"
+VERSION_FILE = "VERSION"
+DEFAULT_CMD_TIMEOUT = 600
+PKG_TYPES = ["apk", "xpk", "wgt", "apk-aio", "cordova-aio", "cordova", "embeddingapi"]
+PKG_MODES = ["shared", "embedded"]
+PKG_ARCHS = ["x86", "arm"]
+PKG_BLACK_LIST = []
+PKG_NAME = None
+BUILD_PARAMETERS = None
+BUILD_ROOT = None
+BUILD_ROOT_SRC = None
+BUILD_ROOT_SRC_PKG = None
+BUILD_ROOT_SRC_PKG_APP = None
+BUILD_ROOT_SRC_SUB_APP = None
+BUILD_ROOT_PKG = None
+BUILD_ROOT_PKG_APP = None
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def pidExists(pid):
+    if pid < 0:
+        return False
+    try:
+        os.kill(pid, 0)
+    except OSError:
+        return False
+    else:
+        return True
+
+
+def isWindows():
+    return sys.platform == "cygwin" or sys.platform.startswith("win")
+
+
+def killProcesses(ppid=None):
+    if isWindows():
+        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
+    else:
+        ppid = str(ppid)
+        pidgrp = []
+
+        def GetChildPids(ppid):
+            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
+            pids = os.popen(command).read()
+            pids = pids.split()
+            return pids
+
+        pidgrp.extend(GetChildPids(ppid))
+        for pid in pidgrp:
+            pidgrp.extend(GetChildPids(pid))
+
+        pidgrp.insert(0, ppid)
+        while len(pidgrp) > 0:
+            pid = pidgrp.pop()
+            try:
+                os.kill(int(pid), signal.SIGKILL)
+                return True
+            except OSError:
+                try:
+                    os.popen("kill -9 %d" % int(pid))
+                    return True
+                except Exception:
+                    return False
+
+
+def safelyGetValue(origin_json=None, key=None):
+    if origin_json and key and key in origin_json:
+        return origin_json[key]
+    return None
+
+
+def checkContains(origin_str=None, key_str=None):
+    if origin_str.upper().find(key_str.upper()) >= 0:
+        return True
+    return False
+
+
+def getRandomStr():
+    str_pool = list("abcdefghijklmnopqrstuvwxyz1234567890")
+    random_str = ""
+    for i in range(15):
+        index = random.randint(0, len(str_pool) - 1)
+        random_str = random_str + str_pool[index]
+
+    return random_str
+
+
+def zipDir(dir_path, zip_file):
+    try:
+        if os.path.exists(zip_file):
+            if not doRemove([zip_file]):
+                return False
+        if not os.path.exists(os.path.dirname(zip_file)):
+            os.makedirs(os.path.dirname(zip_file))
+        z_file = zipfile.ZipFile(zip_file, "w")
+        orig_dir = os.getcwd()
+        os.chdir(dir_path)
+        for root, dirs, files in os.walk("."):
+            for i_file in files:
+                LOG.info("zip %s" % os.path.join(root, i_file))
+                z_file.write(os.path.join(root, i_file))
+        z_file.close()
+        os.chdir(orig_dir)
+    except Exception as e:
+        LOG.error("Fail to pack %s to %s: %s" % (dir_path, zip_file, e))
+        return False
+    LOG.info("Done to zip %s to %s" % (dir_path, zip_file))
+    return True
+
+
+def overwriteCopy(src, dest, symlinks=False, ignore=None):
+    if not os.path.exists(dest):
+        os.makedirs(dest)
+        shutil.copystat(src, dest)
+    sub_list = os.listdir(src)
+    if ignore:
+        excl = ignore(src, sub_list)
+        sub_list = [x for x in sub_list if x not in excl]
+    for i_sub in sub_list:
+        s_path = os.path.join(src, i_sub)
+        d_path = os.path.join(dest, i_sub)
+        if symlinks and os.path.islink(s_path):
+            if os.path.lexists(d_path):
+                os.remove(d_path)
+            os.symlink(os.readlink(s_path), d_path)
+            try:
+                s_path_s = os.lstat(s_path)
+                s_path_mode = stat.S_IMODE(s_path_s.st_mode)
+                os.lchmod(d_path, s_path_mode)
+            except Exception:
+                pass
+        elif os.path.isdir(s_path):
+            overwriteCopy(s_path, d_path, symlinks, ignore)
+        else:
+            shutil.copy2(s_path, d_path)
+
+
+def doCopy(src_item=None, dest_item=None):
+    LOG.info("Copying %s to %s" % (src_item, dest_item))
+    try:
+        if os.path.isdir(src_item):
+            overwriteCopy(src_item, dest_item, symlinks=True)
+        else:
+            if not os.path.exists(os.path.dirname(dest_item)):
+                LOG.info("Create non-existent dir: %s" %
+                         os.path.dirname(dest_item))
+                os.makedirs(os.path.dirname(dest_item))
+            shutil.copy2(src_item, dest_item)
+    except Exception as e:
+        LOG.error("Fail to copy file %s: %s" % (src_item, e))
+        return False
+
+    return True
+
+
+def doRemove(target_file_list=None):
+    for i_file in target_file_list:
+        LOG.info("Removing %s" % i_file)
+        try:
+            if os.path.isdir(i_file):
+                shutil.rmtree(i_file)
+            else:
+                os.remove(i_file)
+        except Exception as e:
+            LOG.error("Fail to remove file %s: %s" % (i_file, e))
+            return False
+    return True
+
+
+def updateCopylistPrefix(src_default, dest_default, src_sub, dest_sub):
+    src_new = ""
+    dest_new = ""
+    PACK_TOOL_TAG = "PACK-TOOL-ROOT"
+
+    if src_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        src_new = src_sub.replace(PACK_TOOL_TAG, BUILD_PARAMETERS.pkgpacktools)
+    else:
+        src_new = os.path.join(src_default, src_sub)
+
+    if dest_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        dest_new = dest_sub.replace(PACK_TOOL_TAG, BUILD_ROOT)
+    else:
+        dest_new = os.path.join(dest_default, dest_sub)
+
+    return (src_new, dest_new)
+
+
+def buildSRC(src=None, dest=None, build_json=None):
+    if not os.path.exists(src):
+        LOG.info("+Src dir does not exist, skip build src process ...")
+        return True
+    if not doCopy(src, dest):
+        return False
+    if "blacklist" in build_json:
+        if build_json["blacklist"].count("") > 0:
+            build_json["blacklist"].remove("")
+        black_file_list = []
+        for i_black in build_json["blacklist"]:
+            black_file_list = black_file_list + \
+                glob.glob(os.path.join(dest, i_black))
+
+        black_file_list = list(set(black_file_list))
+        if not doRemove(black_file_list):
+            return False
+
+    if "copylist" in build_json:
+        for i_s_key in build_json["copylist"].keys():
+            if i_s_key and build_json["copylist"][i_s_key]:
+                (src_updated, dest_updated) = updateCopylistPrefix(
+                    src, dest, i_s_key, build_json["copylist"][i_s_key])
+                if not doCopy(src_updated, dest_updated):
+                    return False
+
+    return True
+
+
+def exitHandler(return_code=1):
+    LOG.info("+Cleaning build root folder ...")
+    if not BUILD_PARAMETERS.bnotclean and os.path.exists(BUILD_ROOT):
+        if not doRemove([BUILD_ROOT]):
+            LOG.error("Fail to clean build root, exit ...")
+            sys.exit(1)
+
+    if return_code == 0:
+        LOG.info("================ DONE ================")
+    else:
+        LOG.error(
+            "================ Found Something Wrong !!! ================")
+    sys.exit(return_code)
+
+
+def prepareBuildRoot():
+    LOG.info("+Preparing build root folder ...")
+    global BUILD_ROOT
+    global BUILD_ROOT_SRC
+    global BUILD_ROOT_SRC_PKG
+    global BUILD_ROOT_SRC_PKG_APP
+    global BUILD_ROOT_SRC_SUB_APP
+    global BUILD_ROOT_PKG
+    global BUILD_ROOT_PKG_APP
+
+    while True:
+        BUILD_ROOT = os.path.join("/tmp", getRandomStr())
+        if os.path.exists(BUILD_ROOT):
+            continue
+        else:
+            break
+
+    BUILD_ROOT_SRC = os.path.join(BUILD_ROOT, PKG_NAME)
+    BUILD_ROOT_SRC_PKG = os.path.join(BUILD_ROOT, "pkg")
+    BUILD_ROOT_SRC_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app")
+    BUILD_ROOT_SRC_SUB_APP = os.path.join(BUILD_ROOT, "sub-app")
+    BUILD_ROOT_PKG = os.path.join(BUILD_ROOT, "pkg", "opt", PKG_NAME)
+    BUILD_ROOT_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app", "opt", PKG_NAME)
+
+    if not doCopy(BUILD_PARAMETERS.srcdir, BUILD_ROOT_SRC):
+        return False
+    if not doRemove(
+            glob.glob(os.path.join(BUILD_ROOT_SRC, "%s*.zip" % PKG_NAME))):
+        return False
+
+    return True
+
+
+def doCMD(cmd, time_out=DEFAULT_CMD_TIMEOUT, no_check_return=False):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    cmd_proc = subprocess.Popen(args=cmd, shell=True)
+    while True:
+        cmd_exit_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_exit_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        else:
+            if not no_check_return and cmd_exit_code != 0:
+                LOG.error("Fail to exe CMD")
+                return False
+            break
+        time.sleep(2)
+    return True
+
+
+def doCMDWithOutput(cmd, time_out=DEFAULT_CMD_TIMEOUT):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    output = []
+    cmd_return_code = 1
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+
+    while True:
+        output_line = cmd_proc.stdout.readline().strip("\r\n")
+        cmd_return_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_return_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        elif output_line == '' and cmd_return_code is not None:
+            break
+
+        sys.stdout.write("%s\n" % output_line)
+        sys.stdout.flush()
+        output.append(output_line)
+    if cmd_return_code != 0:
+        LOG.error("Fail to exe CMD")
+
+    return (cmd_return_code, output)
+
+
+def packXPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "make_xpk.py")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "make_xpk.py"),
+                pack_tool):
+            return False
+    orig_dir = os.getcwd()
+    os.chdir(BUILD_ROOT)
+    if os.path.exists("key.file"):
+        if not doRemove(["key.file"]):
+            os.chdir(orig_dir)
+            return False
+
+    key_file = safelyGetValue(build_json, "key-file")
+    if key_file == "key.file":
+        LOG.error(
+            "\"key.file\" is reserved name for default key file, "
+            "pls change the key file name ...")
+        os.chdir(orig_dir)
+        return False
+    if key_file:
+        pack_cmd = "python make_xpk.py %s %s -o %s" % (
+            app_src, key_file, os.path.join(app_dest, "%s.xpk" % app_name))
+    else:
+        pack_cmd = "python make_xpk.py %s key.file -o %s" % (
+            app_src, os.path.join(app_dest, "%s.xpk" % app_name))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packWGT(build_json=None, app_src=None, app_dest=None, app_name=None):
+    if not zipDir(app_src, os.path.join(app_dest, "%s.wgt" % app_name)):
+        return False
+
+    if BUILD_PARAMETERS.signature == True:
+        if safelyGetValue(build_json, "sign-flag") == "true":
+            if not os.path.exists(os.path.join(BUILD_ROOT, "signing")):
+                if not doCopy(
+                        os.path.join(BUILD_PARAMETERS.pkgpacktools, "signing"),
+                        os.path.join(BUILD_ROOT, "signing")):
+                    return False
+            signing_cmd = "%s --dist platform %s" % (
+                os.path.join(BUILD_ROOT, "signing", "sign-widget.sh"),
+                os.path.join(app_dest, "%s.wgt" % app_name))
+            if not doCMD(signing_cmd, DEFAULT_CMD_TIMEOUT):
+                return False
+
+    return True
+
+
+def packAPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    if not os.path.exists(os.path.join(BUILD_ROOT, "crosswalk")):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "crosswalk"),
+                os.path.join(BUILD_ROOT, "crosswalk")):
+            return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doRemove(files):
+            return False
+
+    ext_opt = ""
+    cmd_opt = ""
+    url_opt = ""
+    mode_opt = ""
+    arch_opt = ""
+    icon_opt = ""
+
+    common_opts = safelyGetValue(build_json, "apk-common-opts")
+    if common_opts is None:
+        common_opts = ""
+
+    tmp_opt = safelyGetValue(build_json, "apk-ext-opt")
+    if tmp_opt:
+        ext_opt = "--extensions='%s'" % os.path.join(BUILD_ROOT_SRC, tmp_opt)
+
+    tmp_opt = safelyGetValue(build_json, "apk-cmd-opt")
+    if tmp_opt:
+        cmd_opt = "--xwalk-command-line='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-url-opt")
+    if tmp_opt:
+        url_opt = "--app-url='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-mode-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_MODES:
+            mode_opt = "--mode=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app mode: %s" % tmp_opt)
+            return False
+    else:
+        mode_opt = "--mode=%s" % BUILD_PARAMETERS.pkgmode
+
+    tmp_opt = safelyGetValue(build_json, "apk-arch-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_ARCHS:
+            arch_opt = "--arch=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app arch: %s" % tmp_opt)
+            return False
+    else:
+        arch_opt = "--arch=%s" % BUILD_PARAMETERS.pkgarch
+
+    tmp_opt = safelyGetValue(build_json, "apk-icon-opt")
+    if tmp_opt:
+        icon_opt = "--icon=%s" % tmp_opt
+    elif tmp_opt == "":
+        icon_opt = ""
+    else:
+        icon_opt = "--icon=%s/icon.png" % app_src
+
+    if safelyGetValue(build_json, "apk-type") == "MANIFEST":
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s " \
+            "--manifest=%s/manifest.json  %s %s %s %s %s" % (
+                app_name, app_src, mode_opt, arch_opt,
+                ext_opt, cmd_opt, common_opts)
+    elif safelyGetValue(build_json, "apk-type") == "HOSTEDAPP":
+        if not url_opt:
+            LOG.error(
+                "Fail to find the key \"apk-url-opt\" for hosted APP packing")
+            return False
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s %s " \
+                   "%s %s %s %s %s" % (
+                       app_name, app_name, mode_opt, arch_opt, ext_opt,
+                       cmd_opt, url_opt, common_opts)
+    else:
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s " \
+                   "--app-root=%s --app-local-path=index.html %s %s " \
+                   "%s %s %s %s" % (
+                       app_name, app_name, app_src, icon_opt, mode_opt,
+                       arch_opt, ext_opt, cmd_opt, common_opts)
+
+    orig_dir = os.getcwd()
+    os.chdir(os.path.join(BUILD_ROOT, "crosswalk"))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doCopy(files[0], os.path.join(app_dest, "%s.apk" % app_name)):
+            os.chdir(orig_dir)
+            return False
+    else:
+        LOG.error("Fail to find the apk file")
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packCordova(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "cordova")
+    app_name = app_name.replace("-", "_")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova"),
+                pack_tool):
+            return False
+
+    plugin_tool = os.path.join(BUILD_ROOT, "cordova_plugins")
+    if not os.path.exists(plugin_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova_plugins"),
+                plugin_tool):
+            return False
+
+    orig_dir = os.getcwd()
+    os.chdir(pack_tool)
+    pack_cmd = "bin/create %s org.xwalk.%s %s" % (
+        app_name, app_name, app_name)
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(os.path.join(pack_tool, app_name))
+    plugin_dirs = os.listdir(plugin_tool)
+    for i_dir in plugin_dirs:
+        i_plugin_dir = os.path.join(plugin_tool, i_dir)
+        plugin_install_cmd = "plugman install --platform android --project " \
+                             "./ --plugin %s" % i_plugin_dir
+        if not doCMD(plugin_install_cmd, DEFAULT_CMD_TIMEOUT):
+            os.chdir(orig_dir)
+            return False
+    os.chdir(pack_tool)
+
+    if not doCopy(app_src, os.path.join(pack_tool, app_name, "assets", "www")):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(os.path.join(BUILD_ROOT, "cordova", app_name))
+    pack_cmd = "./cordova/build"
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(
+            BUILD_ROOT, "cordova", app_name, "bin", "%s-debug.apk" %
+            app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packEmbeddingAPI(
+        build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    library_dir_name = safelyGetValue(build_json, "embeddingapi-library-name")
+    if not library_dir_name:
+        LOG.error("Fail to get embeddingapi-library-name ...")
+        return False
+
+    new_library_dir_name = "core_library"
+    pack_tool = os.path.join(app_src, "..", new_library_dir_name)
+
+    if os.path.exists(pack_tool):
+        if not doRemove([pack_tool]):
+            return False
+
+    if not doCopy(
+            os.path.join(BUILD_PARAMETERS.pkgpacktools, library_dir_name),
+            pack_tool):
+        return False
+
+    if os.path.exists(os.path.join(pack_tool, "bin", "res", "crunch")):
+        if not doRemove([os.path.join(pack_tool, "bin", "res", "crunch")]):
+            return False
+
+    orig_dir = os.getcwd()
+    android_project_path = os.path.join(app_src, "android-project")
+    try:
+        os.makedirs(android_project_path)
+    except Exception as e:
+        LOG.error("Fail to create tmp project dir: %s" % e)
+        return False
+
+    (return_code, output) = doCMDWithOutput("android list target")
+    api_level = ""
+    for line in output:
+        if "API level" in line:
+            api_level = line.split(":")[1].strip()
+            break
+    if not api_level:
+        LOG.error("Fail to get Android API Level")
+        os.chdir(orig_dir)
+        return False
+
+    android_project_cmd = "android create project --name %s --target " \
+                          "android-%s --path %s --package com.%s " \
+                          "--activity MainActivity" % (
+                              app_name, api_level, android_project_path, app_name)
+    if not doCMD(android_project_cmd):
+        os.chdir(orig_dir)
+        return False
+
+    try:
+        update_file = open(
+            os.path.join(android_project_path, "project.properties"), "a+")
+        update_file.writelines(
+            "{0}\n".format(
+                "android.library.reference.1=../%s" %
+                new_library_dir_name))
+        update_file.close()
+    except Exception as e:
+        LOG.error(
+            "Fail to update %s: %s" %
+            (os.path.join(
+                android_project_path,
+                "project.properties"),
+                e))
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(android_project_path, "build.xml"),
+                  os.path.join(app_src, "build.xml")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "project.properties"),
+            os.path.join(app_src, "project.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(app_src, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(pack_tool, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(app_src)
+    if not doCMD("ant debug"):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(app_src, "bin", "%s-debug.apk" % app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packAPP(build_json=None, app_src=None, app_dest=None, app_name=None):
+    LOG.info("Packing %s(%s)" % (app_name, app_src))
+    if not os.path.exists(app_dest):
+        try:
+            os.makedirs(app_dest)
+        except Exception as e:
+            LOG.error("Fail to init package install dest dir: %s" % e)
+            return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not packXPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not packWGT(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "APK"):
+        if not packAPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "CORDOVA"):
+        if not packCordova(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "EMBEDDINGAPI"):
+        if not packEmbeddingAPI(build_json, app_src, app_dest, app_name):
+            return False
+    else:
+        LOG.error("Got wrong pkg type: %s" % BUILD_PARAMETERS.pkgtype)
+        return False
+
+    LOG.info("Success to pack APP: %s" % app_name)
+    return True
+
+
+def createIndexFile(index_file_path=None, hosted_app=None):
+    try:
+        if hosted_app:
+            index_url = "http://127.0.0.1/opt/%s/webrunner/index.html?" \
+                "testsuite=../tests.xml&testprefix=../../.." % PKG_NAME
+        else:
+            index_url = "opt/%s/webrunner/index.html?testsuite=../tests.xml" \
+                        "&testprefix=../../.." % PKG_NAME
+        html_content = "<!doctype html><head><meta http-equiv='Refresh' " \
+                       "content='1; url=%s'></head>" % index_url
+        index_file = open(index_file_path, "w")
+        index_file.write(html_content)
+        index_file.close()
+    except Exception as e:
+        LOG.error("Fail to create index.html for top-app: %s" % e)
+        return False
+    LOG.info("Success to create index file %s" % index_file_path)
+    return True
+
+
+def buildSubAPP(app_dir=None, build_json=None, app_dest_default=None):
+    app_dir_inside = safelyGetValue(build_json, "app-dir")
+    if app_dir_inside:
+        app_dir = app_dir_inside
+    LOG.info("+Building sub APP(s) from %s ..." % app_dir)
+    app_dir = os.path.join(BUILD_ROOT_SRC, app_dir)
+    app_name = safelyGetValue(build_json, "app-name")
+    if not app_name:
+        app_name = os.path.basename(app_dir)
+
+    app_src = os.path.join(BUILD_ROOT_SRC_SUB_APP, app_name)
+    if buildSRC(app_dir, app_src, build_json):
+        app_dest = safelyGetValue(build_json, "install-path")
+        if app_dest:
+            app_dest = os.path.join(app_dest_default, app_dest)
+        else:
+            app_dest = app_dest_default
+
+        if safelyGetValue(build_json, "all-apps") == "true":
+            app_dirs = os.listdir(app_src)
+            apps_num = 0
+            for i_app_dir in app_dirs:
+                if os.path.isdir(os.path.join(app_src, i_app_dir)):
+                    i_app_name = os.path.basename(i_app_dir)
+                    if not packAPP(
+                            build_json, os.path.join(app_src, i_app_name),
+                            app_dest, i_app_name):
+                        return False
+                    else:
+                        apps_num = apps_num + 1
+            if apps_num > 0:
+                LOG.info("Totally packed %d apps in %s" % (apps_num, app_dir))
+                return True
+        else:
+            return packAPP(build_json, app_src, app_dest, app_name)
+    return False
+
+
+def buildPKGAPP(build_json=None):
+    LOG.info("+Building package APP ...")
+    if not doCopy(os.path.join(BUILD_ROOT_SRC, "icon.png"),
+                  os.path.join(BUILD_ROOT_SRC_PKG_APP, "icon.png")):
+        return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not doCopy(
+                os.path.join(BUILD_ROOT_SRC, "manifest.json"),
+                os.path.join(BUILD_ROOT_SRC_PKG_APP, "manifest.json")):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not doCopy(os.path.join(BUILD_ROOT_SRC, "config.xml"),
+                      os.path.join(BUILD_ROOT_SRC_PKG_APP, "config.xml")):
+            return False
+
+    hosted_app = False
+    if safelyGetValue(build_json, "hosted-app") == "true":
+        hosted_app = True
+    if not createIndexFile(
+            os.path.join(BUILD_ROOT_SRC_PKG_APP, "index.html"), hosted_app):
+        return False
+
+    if not hosted_app:
+        if "blacklist" not in build_json:
+            build_json.update({"blacklist": []})
+        build_json["blacklist"].extend(PKG_BLACK_LIST)
+        if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG_APP, build_json):
+            return False
+
+        if "subapp-list" in build_json:
+            for i_sub_app in build_json["subapp-list"].keys():
+                if not buildSubAPP(
+                        i_sub_app, build_json["subapp-list"][i_sub_app],
+                        BUILD_ROOT_PKG_APP):
+                    return False
+
+    if not packAPP(
+            build_json, BUILD_ROOT_SRC_PKG_APP, BUILD_ROOT_PKG, PKG_NAME):
+        return False
+
+    return True
+
+
+def buildPKG(build_json=None):
+    if "blacklist" not in build_json:
+        build_json.update({"blacklist": []})
+    build_json["blacklist"].extend(PKG_BLACK_LIST)
+    if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG, build_json):
+        return False
+
+    if "subapp-list" in build_json:
+        for i_sub_app in build_json["subapp-list"].keys():
+            if not buildSubAPP(
+                    i_sub_app, build_json["subapp-list"][i_sub_app],
+                    BUILD_ROOT_PKG):
+                return False
+
+    if "pkg-app" in build_json:
+        if not buildPKGAPP(build_json["pkg-app"]):
+            return False
+
+    return True
+
+
+def main():
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    try:
+        usage = "Usage: ./pack.py -t apk -m shared -a x86"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-c",
+            "--cfg",
+            dest="pkgcfg",
+            help="specify the path of config json file")
+        opts_parser.add_option(
+            "-t",
+            "--type",
+            dest="pkgtype",
+            help="specify the pkg type, e.g. apk, xpk, wgt ...")
+        opts_parser.add_option(
+            "-m",
+            "--mode",
+            dest="pkgmode",
+            help="specify the apk mode, e.g. shared, embedded")
+        opts_parser.add_option(
+            "-a",
+            "--arch",
+            dest="pkgarch",
+            help="specify the apk arch, e.g. x86, arm")
+        opts_parser.add_option(
+            "-d",
+            "--dest",
+            dest="destdir",
+            help="specify the installation folder for packed package")
+        opts_parser.add_option(
+            "-s",
+            "--src",
+            dest="srcdir",
+            help="specify the path of pkg resource for packing")
+        opts_parser.add_option(
+            "--tools",
+            dest="pkgpacktools",
+            help="specify the parent folder of pack tools")
+        opts_parser.add_option(
+            "--notclean",
+            dest="bnotclean",
+            action="store_true",
+            help="disable the build root clean after the packing")
+        opts_parser.add_option(
+            "--sign",
+            dest="signature",
+            action="store_true",
+            help="signature operation will be done when packing wgt")
+        opts_parser.add_option(
+            "-v",
+            "--version",
+            dest="bversion",
+            action="store_true",
+            help="show this tool's version")
+        opts_parser.add_option(
+            "--pkg-version",
+            dest="pkgversion",
+            help="specify the pkg version, e.g. 0.0.0.1")
+
+        if len(sys.argv) == 1:
+            sys.argv.append("-h")
+
+        global BUILD_PARAMETERS
+        (BUILD_PARAMETERS, args) = opts_parser.parse_args()
+    except Exception as e:
+        LOG.error("Got wrong options: %s, exit ..." % e)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.bversion:
+        print "Version: %s" % TOOL_VERSION
+        sys.exit(0)
+
+    if not BUILD_PARAMETERS.srcdir:
+        BUILD_PARAMETERS.srcdir = os.getcwd()
+    BUILD_PARAMETERS.srcdir = os.path.expanduser(BUILD_PARAMETERS.srcdir)
+
+    if not os.path.exists(
+            os.path.join(BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)):
+        if not os.path.exists(
+                os.path.join(BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)):
+            if not os.path.exists(
+                    os.path.join(BUILD_PARAMETERS.srcdir, VERSION_FILE)):
+                LOG.info(
+                    "Not found pkg version file, try to use option --pkg-version")
+                pkg_version_file_path = None
+            else:
+                pkg_version_file_path = os.path.join(
+                    BUILD_PARAMETERS.srcdir, VERSION_FILE)
+        else:
+            pkg_version_file_path = os.path.join(
+                BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)
+    else:
+        pkg_version_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)
+
+    try:
+        pkg_main_version = 0
+        pkg_release_version = 0
+        if BUILD_PARAMETERS.pkgversion:
+            LOG.info("Using %s as pkg version " % BUILD_PARAMETERS.pkgversion)
+            pkg_main_version = BUILD_PARAMETERS.pkgversion
+        else:
+            if pkg_version_file_path is not None:
+                LOG.info("Using pkg version file: %s" % pkg_version_file_path)
+                with open(pkg_version_file_path, "rt") as pkg_version_file:
+                    pkg_version_raw = pkg_version_file.read()
+                    pkg_version_file.close()
+                    pkg_version_json = json.loads(pkg_version_raw)
+                    pkg_main_version = pkg_version_json["main-version"]
+                    pkg_release_version = pkg_version_json["release-version"]
+    except Exception as e:
+        LOG.error("Fail to read pkg version file: %s, exit ..." % e)
+        sys.exit(1)
+
+    if not BUILD_PARAMETERS.pkgtype:
+        LOG.error("No pkg type provided, exit ...")
+        sys.exit(1)
+    elif not BUILD_PARAMETERS.pkgtype in PKG_TYPES:
+        LOG.error("Wrong pkg type, only support: %s, exit ..." %
+                  PKG_TYPES)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk" or \
+       BUILD_PARAMETERS.pkgtype == "apk-aio":
+        if not BUILD_PARAMETERS.pkgmode:
+            LOG.error("No pkg mode option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgmode in PKG_MODES:
+            LOG.error(
+                "Wrong pkg mode option provided, only support:%s, exit ..." %
+                PKG_MODES)
+            sys.exit(1)
+
+        if not BUILD_PARAMETERS.pkgarch:
+            LOG.error("No pkg arch option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgarch in PKG_ARCHS:
+            LOG.error(
+                "Wrong pkg arch option provided, only support:%s, exit ..." %
+                PKG_ARCHS)
+            sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        if not BUILD_PARAMETERS.destdir or not os.path.exists(
+                BUILD_PARAMETERS.destdir):
+            LOG.error("No all-in-one installation dest dir found, exit ...")
+            sys.exit(1)
+
+    elif not BUILD_PARAMETERS.destdir:
+        BUILD_PARAMETERS.destdir = BUILD_PARAMETERS.srcdir
+    BUILD_PARAMETERS.destdir = os.path.expanduser(BUILD_PARAMETERS.destdir)
+
+    if not BUILD_PARAMETERS.pkgpacktools:
+        BUILD_PARAMETERS.pkgpacktools = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", "tools")
+    BUILD_PARAMETERS.pkgpacktools = os.path.expanduser(
+        BUILD_PARAMETERS.pkgpacktools)
+
+    config_json = None
+    if BUILD_PARAMETERS.pkgcfg:
+        config_json_file_path = BUILD_PARAMETERS.pkgcfg
+    else:
+        config_json_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "suite.json")
+    try:
+        LOG.info("Using config json file: %s" % config_json_file_path)
+        with open(config_json_file_path, "rt") as config_json_file:
+            config_raw = config_json_file.read()
+            config_json_file.close()
+            config_json = json.loads(config_raw)
+    except Exception as e:
+        LOG.error("Fail to read config json file: %s, exit ..." % e)
+        sys.exit(1)
+
+    global PKG_NAME
+    PKG_NAME = safelyGetValue(config_json, "pkg-name")
+    if not PKG_NAME:
+        PKG_NAME = os.path.basename(BUILD_PARAMETERS.srcdir)
+        LOG.warning(
+            "Fail to read pkg name from json, "
+            "using src dir name as pkg name ...")
+
+    LOG.info("================= %s (%s-%s) ================" %
+             (PKG_NAME, pkg_main_version, pkg_release_version))
+
+    if not safelyGetValue(config_json, "pkg-list"):
+        LOG.error("Fail to read pkg-list, exit ...")
+        sys.exit(1)
+
+    pkg_json = None
+    for i_pkg in config_json["pkg-list"].keys():
+        i_pkg_list = i_pkg.replace(" ", "").split(",")
+        if BUILD_PARAMETERS.pkgtype in i_pkg_list:
+            pkg_json = config_json["pkg-list"][i_pkg]
+
+    if not pkg_json:
+        LOG.error("Fail to read pkg json, exit ...")
+        sys.exit(1)
+
+    if not prepareBuildRoot():
+        exitHandler(1)
+
+    if "pkg-blacklist" in config_json:
+        PKG_BLACK_LIST.extend(config_json["pkg-blacklist"])
+
+    if not buildPKG(pkg_json):
+        exitHandler(1)
+
+    LOG.info("+Building package ...")
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        pkg_file_list = os.listdir(os.path.join(BUILD_ROOT, "pkg"))
+        for i_file in pkg_file_list:
+            if not doCopy(
+                    os.path.join(BUILD_ROOT, "pkg", i_file),
+                    os.path.join(BUILD_PARAMETERS.destdir, i_file)):
+                exitHandler(1)
+    else:
+        pkg_file = os.path.join(
+            BUILD_PARAMETERS.destdir,
+            "%s-%s.%s.zip" %
+            (PKG_NAME,
+             pkg_main_version,
+             pkg_release_version))
+             
+
+        if not zipDir(os.path.join(BUILD_ROOT, "pkg"), pkg_file):
+            exitHandler(1)
+
+if __name__ == "__main__":
+    main()
+    exitHandler(0)
diff --git a/tv/tct-behavior-tests/pack.sh b/tv/tct-behavior-tests/pack.sh
new file mode 100755 (executable)
index 0000000..69c38c2
--- /dev/null
@@ -0,0 +1,205 @@
+#!/bin/bash
+source $(dirname $0)/tct-behavior-tests.spec
+
+#parse params
+usage="Usage: ./pack.sh [-t <package type: wgt | apk | crx | xpk>]
+[-t wgt] option was set as default."
+
+if [[ $1 == "-h" || $1 == "--help" ]]; then
+    echo $usage
+    exit 1
+fi
+
+type="wgt"
+while getopts t: o
+do
+    case "$o" in
+    t) type=$OPTARG;;
+    *) echo $usage
+       exit 1;;
+    esac
+done
+
+if [[ $type == "wgt" || $type == "apk" || $type == "crx" || $type == "xpk" ]];then
+    echo "Create package with $type and raw source"
+else 
+    echo "Sorry,$type is not support... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+    echo "$usage"
+    exit 1
+fi
+
+if [[ -z $name || -z $version || -z $appname ]];then
+    echo "Package name or version not specified in setting file"
+    exit 1
+fi
+
+SRC_ROOT=$PWD
+BUILD_ROOT=/tmp/${name}_pack
+BUILD_DEST=/tmp/${name}
+
+# clean
+function clean_workspace(){
+echo "cleaning workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+rm -rf $BUILD_ROOT $BUILD_DEST
+}
+
+clean_workspace
+mkdir -p $BUILD_ROOT $BUILD_DEST
+
+# copy source code
+rm -rf *.rpm *.tar.bz2 *.tar.gz *.zip
+cp -arf $SRC_ROOT/* $BUILD_ROOT/
+
+## function for create wgt apk xpk ##
+
+function create_wgt(){
+# create wgt
+cd $BUILD_DEST
+cp -af $BUILD_ROOT/index.html $BUILD_DEST/
+cp -af $BUILD_ROOT/config.xml $BUILD_DEST/
+cp -af $BUILD_ROOT/icon.png $BUILD_DEST/
+cp -af $BUILD_ROOT/tests.xml $BUILD_DEST/
+cp -af $BUILD_ROOT/tests.full.xml $BUILD_DEST/
+cp -af $BUILD_ROOT/subtestresult.xml $BUILD_DEST/
+cp -af $BUILD_ROOT/js $BUILD_DEST/
+cp -af $BUILD_ROOT/css $BUILD_DEST/
+cp -af $BUILD_ROOT/tests $BUILD_DEST/
+cp -af $BUILD_ROOT/res $BUILD_DEST/
+mkdir -p $BUILD_DEST/opt/$name/res/media
+zip -rq $BUILD_DEST/opt/$name/$name.wgt *
+if [ $? -ne 0 ];then
+    echo "Create $name.wgt fail.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+
+# sign wgt
+if [ $sign -eq 1 ];then
+    # copy signing tool
+    echo "copy signing tool... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+    cp -arf $SRC_ROOT/../../tools/signing $BUILD_ROOT/signing
+    if [ $? -ne 0 ];then
+        echo "No signing tool found in $SRC_ROOT/tools.... >>>>>>>>>>>>>>>>>>>>>>>>>"
+        clean_workspace
+        exit 1
+    fi
+    wgt=$(find $BUILD_DEST/opt/$name/ -name *.wgt)
+    for wgt in $(find $BUILD_DEST/opt/$name/ -name *.wgt);do
+        $BUILD_ROOT/signing/sign-widget.sh --dist platform $wgt
+        if [ $? -ne 0 ];then
+            echo "Please check your signature files... >>>>>>>>>>>>>>>>>>>>>>>>>"
+            clean_workspace
+            exit 1
+        fi
+    done
+fi
+}
+
+function create_apk(){
+echo "Sorry,apk is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+function create_xpk(){
+echo "Sorry,xpk is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+function create_crx(){
+echo "crx is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+## zip function ##
+function zip_for_wgt(){
+cd $BUILD_DEST
+# cp inst.sh script and tests.xml #
+cp -af $BUILD_ROOT/inst.sh.wgt $BUILD_DEST/opt/$name/inst.sh
+cp -af $BUILD_ROOT/tests.xml $BUILD_DEST/opt/$name/tests.xml
+cp -af $BUILD_ROOT/tests.full.xml $BUILD_DEST/opt/$name/tests.full.xml
+
+# cp license files #
+cp -af $BUILD_ROOT/LICENSE.Apache-2.0 $BUILD_DEST/opt/$name/LICENSE.Apache-2.0
+cp -af $BUILD_ROOT/LICENSE.BSD-3 $BUILD_DEST/opt/$name/LICENSE.BSD-3
+cp -af $BUILD_ROOT/LICENSE.CC-BY-3.0 $BUILD_DEST/opt/$name/LICENSE.CC-BY-3.0
+
+# cp res folder #
+cp -a $BUILD_ROOT/res/font $BUILD_DEST/opt/$name/res/font
+cp -a $BUILD_ROOT/res/images $BUILD_DEST/opt/$name/res/images
+cp -a $BUILD_ROOT/res/js $BUILD_DEST/opt/$name/res/js
+cp -a $BUILD_ROOT/js/thirdparty/jquery.js $BUILD_DEST/opt/$name/res/js/
+cp -a $BUILD_ROOT/res/css $BUILD_DEST/opt/$name/res/css
+cp -a $BUILD_ROOT/res/html $BUILD_DEST/opt/$name/res/html
+cp -a $BUILD_ROOT/testresult.xsl $BUILD_DEST/opt/$name/res/css/
+cp -a $BUILD_ROOT/res/media/red-green.theora.ogv $BUILD_DEST/opt/$name/res/media/
+cp -a $BUILD_ROOT/res/media/movie_5.mp4 $BUILD_DEST/opt/$name/res/media/
+
+if [ $src_file -eq 0 ];then
+    for file in $(ls opt/$name |grep -v wgt);do
+        if [[ "${whitelist[@]}" =~ $file ]];then
+            echo "$file in whitelist,keep it..."
+        else
+            echo "Remove unnessary file:$file..."
+            rm -rf opt/$name/$file
+        fi
+    done
+fi
+zip -Drq $BUILD_DEST/$name-$version.zip opt/
+if [ $? -ne 0 ];then
+    echo "Create zip package fail... >>>>>>>>>>>>>>>>>>>>>>>>>"
+    clean_workspace
+    exit 1
+fi
+}
+
+function zip_for_apk(){
+echo "Sorry,apk is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+function zip_for_xpk(){
+echo "Sorry,xpk is not support yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+function zip_for_crx(){
+echo "zip_for_crx not ready yet... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+clean_workspace
+exit 1
+}
+
+## create wgt crx apk xpk and zip package ##
+case $type in
+    wgt) create_wgt
+         zip_for_wgt;;
+    apk) create_apk
+         zip_for_apk;;
+    xpk) create_xpk
+         zip_for_xpk;;
+    crx) create_crx
+         zip_for_crx;;
+esac
+
+
+# copy zip file
+echo "copy package from workspace... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+cp -f $BUILD_DEST/$name-$version.zip $SRC_ROOT/$name-$version.zip
+
+# clean workspace
+clean_workspace
+
+# validate
+echo "checking result... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+if [ -z "`ls $SRC_ROOT | grep "\.zip"`" ];then
+    echo "------------------------------ FAILED to build $name packages --------------------------"
+    exit 1
+fi
+
+echo "------------------------------ Done to build $name packages --------------------------"
+cd $SRC_ROOT
+ls *.zip 2>/dev/null
diff --git a/tv/tct-behavior-tests/packaging/behavior.changes b/tv/tct-behavior-tests/packaging/behavior.changes
new file mode 100755 (executable)
index 0000000..5f161ab
--- /dev/null
@@ -0,0 +1,471 @@
+* Wed Sep 18 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130913.023311@993b24f
+- Update version numbers for ww39.0 release
+- Fix TTS-2007 by handling unable to re-install widget issues in behavior
+- Fix TTS-2015 by improvement function and description in behavior
+- Fix TTS-2009 by enable the Pass button
+- Update packaging/behavior.changes
+
+* Fri Sep 13 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@d1074ff
+- Update version numbers for ww37.5 release
+- Merge "Fix TTS-1998 by update DBV to latest on RC8" into tizen_2.2
+- Fix TTS-1854 by adding code to save the children TCs result
+- Fix TTS-2006 by lack slash character in PackageManagement
+- Fix TTS-1998 by update DBV to latest on RC8
+- Merge "Fix TTS-1964 to improve unreadable descripition" into tizen_2.2
+- Update packaging/behavior.changes
+- Fix TTS-1964 to improve unreadable descripition
+
+* Fri Sep 06 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@8c4196f
+- Update version numbers for ww36.5 release
+- Merge "Fix TTS-1960 by add component name of UserAgentString in tests.xml" into tizen_2.2
+- Merge "Fix TDIS-6958 by modify directories as file URI path" into tizen_2.2
+- Fix TTS-1960 by add component name of UserAgentString in tests.xml
+- Fix TTS-1959 by removing unsupport feature test in webkit
+- Fix TDIS-6958 by modify directories as file URI path
+- Fix TTS-1951 by optimize case styles in behavior
+- update packaging/behavior.changes
+
+* Thu Aug 29 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130823.034631@2b6acf1
+- Updated version numbers for ww35.5 release
+- Fixed TTS-1943 by adding user agent string test to behavior
+- Fixed TTS-1927 by checking the install location by manual in setting-install-location-prefer-external-with-card
+- Fixed bug TTS-1931 for Page Visibility status check
+- Updated COPYING files
+
+* Thu Aug 22 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130815.093033@bef70bc
+- Updated version numbers for ww34.5 release
+- Simplify tests.xml
+- Merge "Fixed TTS-1910 by updating system directory path in Security" into tizen_2.2
+- Merge "Behavior TC NFC Receive message added" into tizen_2.2
+- Fixed TTS-1910 by updating system directory path in Security
+- Fixed TTS-1909 by updating incorrect path
+- Merge "Fixed TTS-1880 by splitting upstream resource to single file due to license issue" into tizen_2.2
+- Merge "Update all icon for sub widgets in behavior tool" into tizen_2.2
+- Fixed TTS-1880 by splitting upstream resource to single file due to license issue
+- Merge "Fixed TTS-1898 by updating the media and image resources with license" into tizen_2.2
+- Fixed TTS-1898 by updating the media and image resources with license
+- Update all icon for sub widgets in behavior tool
+- Behavior TC NFC Receive message added
+- Behavior TC Push clientApp modify
+- Behavior TC Application icon image changed
+- update packaging/behavior.changes
+
+* Thu Aug 15 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130808.063316@ed40b71
+- Updated version numbers for ww33.5 release
+- Added 2 npruntime cases to behavior tool
+- Merge "Code review: Updated report-uri-single-violated in behavior tool" into tizen_2.2
+- Merge "Updated icon and config.xml for sub widget in behavior tool" into tizen_2.2
+- Merge "update usage test in behavior" into tizen_2.2
+- Merge "Behavior TC Notification update api modify" into tizen_2.2
+- update usage test in behavior
+- Behavior TC Notification update api modify
+- Code review: Updated report-uri-single-violated in behavior tool
+- Fixed bug TTS-1854 to add confirm infos.
+- Merge "Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt" into tizen_2.2
+- Merge "Fixed bug TTS-1831 to update the case descriptions." into tizen_2.2
+- add 2 usage tcs of canvas and CSS
+- Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt
+- Updated icon and config.xml for sub widget in behavior tool
+- Fixed bug TTS-1831 to update the case descriptions.
+- Update icons due to license issue.
+- Merge "Fixed bug TTS-1851 update config.xml." into tizen_2.2
+- Merge "improve accelerometer in behavior" into tizen_2.2
+- Updated the files in css/images/
+- improve accelerometer in behavior
+- Fixed bug TTS-1851 update config.xml.
+
+* Thu Aug 08 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130801.152701@1c522e3
+- Updated version numbers for ww32.5 release
+- Merge "Updated main index.html to add blank in title menu for behavior tools" into tizen_2.2
+- Merge "Updated the description for CSP moudle in behavior tools" into tizen_2.2
+- Merge "Fixed bug TTS-1850 to add the case resourse." into tizen_2.2
+- Merge "Behavior TC Application whitespace remove" into tizen_2.2
+- Updated the description for CSP moudle in behavior tools
+- Updated main index.html to add blank in title menu for behavior tools
+- Fixed bug TTS-1850 to add the case resourse.
+- Merge "Fixed bug TTS-1848 to update the case description." into tizen_2.2
+- Merge "Add PackageManagement cases to the behavior tool." into tizen_2.2
+- Merge "Add ConfigurationExtension cases to the behavior tool." into tizen_2.2
+- Merge "Add WRTSupport cases to the behavior tool." into tizen_2.2
+- Fixed bug TTS-1848 to update the case description.
+- Merge "Add Stability module to the behavior tool." into tizen_2.2
+- Behavior TC Application whitespace remove
+- Add Stability module to the behavior tool.
+- Add WRTSupport cases to the behavior tool.
+- Add ConfigurationExtension cases to the behavior tool.
+- Add PackageManagement cases to the behavior tool.
+- Add DynamicBox cases to the behavior tool.
+- Merge "Add license file for external media files and behavior tests." into tizen_2.2
+- Merge "Fix listview style issue in some tests and bypass the tizen object in normal browser." into tizen_2.2
+- Add license file for external media files and behavior tests.
+- Fix bug TTS-1832 TC displayed style does not match expected result
+- Fix listview style issue in some tests and bypass the tizen object in normal browser.
+- Behavior TC Notification Image(thumbnail) changed
+
+* Thu Aug 01 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.082203@b07dd79
+- Merge "Add PackageManagement module to behavior tool" into tizen_2.2
+- Add PackageManagement module to behavior tool
+- Merge "Add capability info to result xml file." into tizen_2.2
+- Merge "Add ConfigurationExtension module to behavior tool" into tizen_2.2
+- Merge "Added cases to DynamicBox moudle in behavior tool" into tizen_2.2
+- Add ConfigurationExtension module to behavior tool
+- Add WRTSupport module to behavior tool
+- Merge "Add WRTUI module to behavior tool" into tizen_2.2
+- Merge "Updated CSP module in behavior tool" into tizen_2.2
+- Merge "Updated the tct-behavior-tests.spec file to reduce the size of package" into tizen_2.2
+- Add WRTUI module to behavior tool
+- Added cases to DynamicBox moudle in behavior tool
+- Updated CSP module in behavior tool
+- Updated the tct-behavior-tests.spec file to reduce the size of package
+- Add corssplatform support in HybridApplication
+- Add capability info to result xml file.
+
+* Thu Jul 25 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.063839@55105a9
+- Update app icon and tests icons to fix license issue.
+- Merge "Updated behavior.spec" into tizen_2.2
+- Updated behavior.spec
+
+* Thu Jul 25 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130718.115214@0ced6ef
+- Updated version numbers for ww30.5 release
+- Added CSP moudle to behavior tools
+- update Developer Guide to v0.6
+- Behavior TC Package Button disabled modify
+- Disable unsupported test access and add unsupported label.
+- Behavior TC Bluetooth Update(Tizen_2.2) Change-Id: Ic9552491da016b9795b4f4d23c4efac64ecdfaa9
+- Behavior TC SystemInfo Update(Tizen_2.2)
+- Behavior TC Download progressbar modify
+
+* Thu Jul 18 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130711.082532@41217f3
+- Updated version numbers for ww29.5 release
+- Merge "Behavior TC Bluetooth TTS-1711 update" into tizen_2.2
+- Merge "Migrate touchcancel event in Touch" into tizen_2.2
+- Merge "Fixed TTS-1362 by adding voice preview in Microphone" into tizen_2.2
+- Migrate touchcancel event in Touch
+- Fixed TTS-1362 by adding voice preview in Microphone
+- Merge changes Icdf3d5af,I29303eb5 into tizen_2.2
+- Behavior TC Bluetooth TTS-1711 update
+- Behavior TC Power info update
+- Behavior TC Notification Image(Tizen Logo) changed
+
+* Thu Jul 11 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130704.080051@38487b9
+- Updated version numbers for ww28.5 release
+- Update tests purpose to short version.
+- Added DynamicBox module into behavior tools
+- Behavior TC Bluetooth alert modified
+- Behavior TC Power info modified
+- Hide test ID in home page and using purpose for test name.
+
+* Thu Jul 04 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130627.082103@b239235
+- Updated version numbers for ww27.5 release
+- Merge "Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9" into tizen_2.2
+- Merge "Behavior TC Package Double Install block" into tizen_2.2
+- Merge "Behavior TC Bluetooth Disconnect Alert Add" into tizen_2.2
+- Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9
+- Merge "Behavior TC NFC WriteTag Modify" into tizen_2.2
+- Behavior TC Package Double Install block
+- Behavior TC Bluetooth Disconnect Alert Add
+- Behavior TC NFC WriteTag Modify
+- Merge "Behavior TC SystemSettingNotificationEmail index.html footer modify" into tizen_2.2
+- Merge "Behavior TC Notification led attribute add" into tizen_2.2
+- Behavior TC SystemSettingNotificationEmail index.html footer modify
+- Behavior TC Notification led attribute add
+- Modify the AppControlExtending appearance.
+- Update guide doc for open source release.
+- Merge "Fixed wgt cannot installed issue" into tizen_2.2
+- Update dev guide for capability support.
+- Fixed wgt cannot installed issue
+- Merge "Integrate 17 TCs into CSSStyle" into tizen_2.2
+- Merge "Removed the description of performance checking in Expect Results of Media and Animation TCs" into tizen_2.2
+- Merge "add move event to Touch in behavior" into tizen_2.2
+- Merge "Add history back test to Viewport in behavior" into tizen_2.2
+- Integrate 17 TCs into CSSStyle
+- Removed the description of performance checking in Expect Results of Media and Animation TCs
+- Behavior TC Download File delete issue
+- add move event to Touch in behavior
+- Add history back test to Viewport in behavior
+
+* Thu Jun 27 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130621.054814@2795437
+- Updated version numbers for ww26.5 release
+- Behavior TC Bluetooth Message(Encode/Decode) add
+- Behavior TC PushClient Modify
+- Behavior TC SystemSettingScreen Image size modify
+- Behavior TC Application Filename display modify
+- Behavior TC Package errorCB add
+- Merge "Behavior TC Package comment remove" into tizen_2.2
+- Behavior TC Package comment remove
+- Behavior TC Installation message when installing wgt
+- Behavior TC Package disable button when the button ineffective Change-Id: I77f5a96c2cf1c8adccd7ca50152d8396c5ca7be3
+- Behavior TC 'info' update Change-Id: Ia0c09d0d7b82544b73779163641f758a427b843b
+- Update button icons and list font/size.
+- Behavior TC Pass/Fail button remove(disable/enable)
+- Behavior TC Bluetooth scenario changed
+- Update dev guide for tests.xml verification and coding style.
+- Merge "Update the description of PageVisibility" into tizen_2.2
+- Merge "Modify Security function" into tizen_2.2
+- Merge "Update the splitters of buttons" into tizen_2.2
+- Merge "Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126" into tizen_2.2
+- Merge "Fixed the footer botton position issue in 2D3DAnimation" into tizen_2.2
+- Merge "Modifying Vibration style in behavior" into tizen_2.2
+- Merge "Modify LocationNetwork style in behavior" into tizen_2.2
+- Merge "modify style of CSSStyle behavior" into tizen_2.2
+- Update the description of PageVisibility
+- Modify Security function
+- Update the splitters of buttons
+- Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126
+- Fixed the footer botton position issue in 2D3DAnimation
+- Modifying Vibration style in behavior
+- Modify LocationNetwork style in behavior
+- modify style of CSSStyle behavior
+- Disable the multi tests in behavior list view.
+- Behavior TC Naming Changed(special letters)
+- Updated tests.xml to create Web Runtime set and format PageVisibility style
+- Behavior TC Power Screen_Bright API removed
+- Merge "Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b" into tizen_2.2
+- Merge "Remove Test Note in tests.xml" into tizen_2.2
+- Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b
+- Remove Test Note in tests.xml
+- Fixed scale issue of Viewport
+- Merge "modify Accelerometer module style" into tizen_2.2
+- Merge "Fixed Camera by modifying style css in behavior" into tizen_2.2
+- Merge "Improve LocationGPS by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve LocationNetwork by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Microphone by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Vibration by modifying button style in behavior" into tizen_2.2
+- Merge "Update CSSAnimation,SVGTransformation,Viewport style" into tizen_2.2
+- modify Accelerometer module style
+- Fixed Camera by modifying style css in behavior
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Improve LocationGPS by adding observation eare in behavior
+- Improve LocationNetwork by adding observation eare in behavior
+- Improve Microphone by adding observation eare in behavior
+- Improve Vibration by modifying button style in behavior
+- Update CSSAnimation,SVGTransformation,Viewport style
+- modify mediaPlayback and CSSStyle style
+- Merge "Adjust CSS in FileReader" into tizen_2.2
+- Merge "Adjust CSS in 2D3DAnimation" into tizen_2.2
+- Merge "Add touch info in Touch" into tizen_2.2
+- Merge "Improve case style in FullScreen" into tizen_2.2
+- Merge "Added ApplicationInvisible moudle to TCT behavior tools" into tizen_2.2
+- Merge "Improve case style in DragandDrop" into tizen_2.2
+- Merge "Improve case style in Clipboard" into tizen_2.2
+- Merge "Improve Camera by adding observation eare in behavior" into tizen_2.2
+- Adjust CSS in FileReader
+- Adjust CSS in 2D3DAnimation
+- Add touch info in Touch
+- Improve case style in FullScreen
+- Added ApplicationInvisible moudle to TCT behavior tools
+- Improve case style in DragandDrop
+- Improve case style in Clipboard
+- Improve Camera by adding observation eare in behavior
+
+* Fri Jun 21 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.1/20130527.073412@3af9e30
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Add hash-signer in spec
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Merge "Add timestamp for exported file" into tizen_2.2
+- Merge "Improve case style in HybridApplication" into tizen_2.2
+- Merge "Added test points for css animation in behavior" into tizen_2.2
+- Add timestamp for exported file
+- Improve case style in HybridApplication
+- Add disable and enable Pass Button in be havior about Camera Touch UserMedia Vibration
+- Added test points for css animation in behavior
+- Improve description in Behavior
+- Handle disable and enable Pass Button in behavior
+- Merge "Improve LocationGPS by adding speed in behavior" into tizen_2.2
+- Improve LocationGPS by adding speed in behavior
+- Integrate backgrounds TCs to CSSStyle
+- Handle disable and enable Pass Button in behavior
+- Update version for ww25.4 release.
+- Add two theme for pass/fail result highlight.
+- Not popup test information window by default, and comments out re-enter code
+- Fixed TTS-1554 on behavior by repaired the spelling mistake
+- Update tests xml scheme.
+- Handle disable and enable "Pass" Button in behavior
+- Add Enable/DisablePassButton method in HybridApplication
+- Merge "Add privilege of location and mediacapture in behavior" into tizen_2.1
+- Merge "Added AppControlExtending moudle to TCT behavior tools" into tizen_2.1
+- Add privilege of location and mediacapture in behavior
+- BehaviorTC SystemSetting rintones rw -> r
+- Added AppControlExtending moudle to TCT behavior tools
+- BehaviorTC Launch API success log, PassButton(Disable/Enable) Change-Id: Icfd48ee1e92417d2cb461d9feb156bafbac697d0
+- Behavior TC Messaging(SMS/MMS) scenario modify Change-Id: I03944a73cd08f49048bcd0bf0a34caa254e85aa3
+- Behavior TC SystemInfo Scenario Modify
+- Update saving result popup info.
+- Update version for tct web ww24.5 release.
+- Fix multiple capability issue
+- Behavior TC TTS-1509
+- update sample application
+- Fix capability missing when merge happen
+- Improve test description in 2d3danimation and filereader
+- Update popup info and delete unuseful console log.
+- Merge "Make tmpfile always there as a import option, plus some small cleanup" into tizen_2.1
+- Make tmpfile always there as a import option, plus some small cleanup
+- Repaired viewport style on behavior
+- Cleanup tmp file logic
+- Clean some unuseful vars and space consistent.
+- add logic to read tests.xml then murge tmp result if any
+- Merge "set the capability case result as fail in the _resetresult" into tizen_2.1
+- set the capability case result as fail in the _resetresult
+- Merge "Improve HybridApplication style" into tizen_2.1
+- Merge "Reduce svg height in SVGTransform" into tizen_2.1
+- Merge "Repaired clipboard style on behavior" into tizen_2.1
+- Merge "Repaired dragdrop style on behavior" into tizen_2.1
+- Merge "modify CSSStyle TCs" into tizen_2.1
+- Improve HybridApplication style
+- Reduce svg height in SVGTransform
+- Repaired clipboard style on behavior
+- Repaired dragdrop style on behavior
+- modify CSSStyle TCs
+- Fix LocationNetwork
+- Merge "Move Clipboard to Gesture category" into tizen_2.1
+- Simplify TC framework
+- Merge "Only first entry into testapp will auto-popup information window" into tizen_2.1
+- Move Clipboard to Gesture category
+- Only first entry into testapp will auto-popup information window
+- Update version for ww23.5 release.
+- Merge "Add capability for camera and microphone" into tizen_2.1
+- Update dev guide for latest test fw.
+- Add capability for camera and microphone
+- Update test FW to import tests from tests XML.
+- Modify pagevisibility component in TCT behavior
+- Provide a method to get current test app name
+- Merge "modify test step in MediaPlayback" into tizen_2.1
+- Merge "Enable/Disable only PASS button" into tizen_2.1
+- Merge "Update Security style" into tizen_2.1
+- Merge "Improve media content to res file" into tizen_2.1
+- Merge "Repaired ad2danimation style on behavior" into tizen_2.1
+- Merge "behavior vibration improve by modifying slider style" into tizen_2.1
+- modify test step in MediaPlayback
+- Enable/Disable only PASS button
+- Update Security style
+- Improve media content to res file
+- Repaired ad2danimation style on behavior
+- behavior vibration improve by modifying slider style
+- Rename Hybrid as HybridApplication
+- Merge "Submit wanglin's patch to fix 1504,1450,1347" into tizen_2.1
+- Submit wanglin's patch to fix 1504,1450,1347
+- Merge "behavior touch improve by modifying test step description" into tizen_2.1
+- behavior touch improve by modifying test step description
+- Modify the display status of 2D3DAnimation
+- Merge "Add Security TC to behavior" into tizen_2.1
+- Merge "Improve Accelerometer test information" into tizen_2.1
+- Merge "Repaired clipboard case for behavior" into tizen_2.1
+- Merge "Repaired dragdrop case for behavior" into tizen_2.1
+- Merge "Add test area for SVGTransform" into tizen_2.1
+- Merge "Modify 2D3DAnimation UI" into tizen_2.1
+- Merge "Improve CSSAnimation test UI and info description" into tizen_2.1
+- Merge "behavior Vibration improve" into tizen_2.1
+- Merge "behavior Touch improve" into tizen_2.1
+- Merge "Modify opacity controller and descripition in CSSStyle" into tizen_2.1
+- Merge "Improve Hybrid in behavior" into tizen_2.1
+- Improve Accelerometer test information
+- Add Security TC to behavior
+- Repaired clipboard case for behavior
+- Repaired dragdrop case for behavior
+- Add test area for SVGTransform
+- Modify 2D3DAnimation UI
+- Improve CSSAnimation test UI and info description
+- behavior Vibration improve
+- behavior Touch improve
+- Modify opacity controller and descripition in CSSStyle
+- Improve Hybrid in behavior
+- behavior Microphone improve
+- Merge "behavior LocationGps and LocationNetwork imporve" into tizen_2.1
+- Add volume controller in MediaPlayback
+- behavior LocationGps and LocationNetwork imporve
+- Repaired fullscreen case in behavior
+- Merge "Improve Camera into two TCs in behavior" into tizen_2.1
+- Improve Camera into two TCs in behavior
+- update the button name and info description in FileReader
+- [DataSync] add what intel QA wants
+- Add note for ringtone test
+- Update local build minor release version.
+- Fix not found wgt issue in Drag and Drop
+- Update tests category to algin with feedbacks.
+- Add viewport case for behavior
+- Merge "Fix incorrect description in Clipboard" into tizen_2.1
+- Merge "Add Hybrid TC into behavior" into tizen_2.1
+- Fix incorrect description in Clipboard
+- Add Hybrid TC into behavior
+- update Chatter sample
+- Behavior Test Update
+- Update release version for ww22.5 relase.
+- Add pagevisibility component in TCT behavior
+- Add clipboard and dragdrop cases for behavior
+- Merge "Add FileReader to TCT behavior" into tizen_2.1
+- Merge "add getusermedia to CameraBack in behavior" into tizen_2.1
+- Add FileReader to TCT behavior
+- add getusermedia to CameraBack in behavior
+- Merge "Add CSSAnimation test to TCT behavior" into tizen_2.1
+- Behavior Test Download : Delete All update Change-Id: Ia8e6c3105b8fef0f75a172e5fe85f1453442026e
+- Add CSSAnimation test to TCT behavior
+- Update icons
+- Add CSSStyle TC to behavior
+- Add SVG Transform TC to behavior
+- Merge "Add PositionError to LocationGps and improve style" into tizen_2.1
+- Merge "add browerstate and netinfo test point to LocationNetwork" into tizen_2.1
+- Merge "Make 2D3DAnimation element align center" into tizen_2.1
+- Add PositionError to LocationGps and improve style
+- add browerstate and netinfo test point to LocationNetwork
+- Make 2D3DAnimation element align center
+- Add FullScreen TC to behavior
+- Update tests ui version to 0.2.4.
+
+* Fri May 10 2013 Yugang Fan <yugang.fan@intel.com> submit/tizen_2.1/20130508.080845@104acf0
+- Merge "Update Camera Microphone Accelerometer 2D3DAnimation test  case"
+- Update Camera Microphone Accelerometer 2D3DAnimation test  case
+- Update footer button align to center.
+- Behavior Test Messaging : AppName modify
+- Behavior Test LongAppName modify Change-Id: Ifc65870a93fc561fff04fe734c87c0ca90939c36
+- Update wgt id and require version due to spec change.
+- Improve 2D3DAnimation Accelerometer and LocationNetwork case
+- Behavior Test WebAPI : header, footer fixed
+- res folder delete & file move. TTS-1381
+- Behavior Test NFC : Add Contact Button
+- Process rewriting
+- Update Device WebAPI(purpose, bugs)
+- TTS-1340
+- Update version for ww19.3 release.
+- Update jquery libs to SDK build-in version and fix some UI issues.
+- Push update
+- Improve TC testing method and update style
+- Behavior TC Update(Device WebAPI)
+- Merge "Move test steps to info in CameraBack and Microphone"
+- Merge "Update Device WebAPI Module"
+- Move test steps to info in CameraBack and Microphone
+- Improve icons of Application and Bluetooth
+- Update Device WebAPI Module
+- Update WebAPI 16, Remove Content 1, Add res 1
+- Improve test description
+- Update behavior tests Device Web API 16
+- Updater behavior tests release version for ww17.5.
+- Update icons from LaunchBox
+- Update main css file to fix result popup overflow and button size.
+- Update footer button size and move version to popup.
+- Update behavior ui style, show version in homepage and add dev guide doc.
+- Behavior_Test_SystemSetting(Screen)
+- Behavior_Test_SystemSetting(NotificationEmail)
+- Behavior_Test_SystemSetting(IncomingCall)
+- Behavior_Test_SystemInfo
+- Behavior_Test_Push
+- Behavior_Test_Packag
+- Behavior_Test_Package
+- Behavior_Test_Notification
+- Behavior_Test_NFC
+- Behavior_Test_Messaging(S.MMS)
+- Behavior_Test_Messaging(Email)
+- Behavior_Test_Download
+- Behavior_Test_DataSync
+- Behavior_Test_Content
+- Behavior_Test_Bluetooth
+- Behavior_Test_Alarm
+- Update behavior ww17.3 release info.
+- Merge "Add one TC; Add reset button; Improve description of TCs"
+- Add one TC; Add reset button; Improve description of TCs
+- Add one TC; Add reset button; Improve description of TCs
+- Delete template test and update release version.
+- Add 7 new TCs into behavior
+- Init Tizen TCT behavior tests repo.
+- Initial empty repository
+
diff --git a/tv/tct-behavior-tests/packaging/behavior.spec b/tv/tct-behavior-tests/packaging/behavior.spec
new file mode 100755 (executable)
index 0000000..bc66cbc
--- /dev/null
@@ -0,0 +1,84 @@
+%define _unpackaged_files_terminate_build 0 
+
+Summary: TCT Behavior Tests
+Name: tct-behavior-tests
+Version: 2.4
+Release: 1
+License: BSD
+Group: test/tct/behavior
+Source: %name-%version.tar.gz
+BuildRequires: zip
+BuildRequires: hash-signer
+
+%description
+This is TCT behavior tests
+
+%prep
+%setup -q
+
+%build
+unset LD_AS_NEEDED  
+./autogen
+./configure --prefix=/usr
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+make install DESTDIR=$RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/index.html $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/config.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/icon.png $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.full.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/subtestresult.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/js $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/css $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/res $RPM_BUILD_DIR/%name
+cd $RPM_BUILD_DIR/%name
+mkdir -p $RPM_BUILD_ROOT/opt/%name/res/media
+cp -a $RPM_BUILD_DIR/%name-%version/res/font $RPM_BUILD_ROOT/opt/%name/res/font
+cp -a $RPM_BUILD_DIR/%name-%version/res/images $RPM_BUILD_ROOT/opt/%name/res/images
+cp -a $RPM_BUILD_DIR/%name-%version/res/js $RPM_BUILD_ROOT/opt/%name/res/js
+cp -a $RPM_BUILD_DIR/%name-%version/res/css $RPM_BUILD_ROOT/opt/%name/res/css
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/red-green.theora.ogv $RPM_BUILD_ROOT/opt/%name/res/media/
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/movie_5.mp4 $RPM_BUILD_ROOT/opt/%name/res/media/
+zip -rq $RPM_BUILD_ROOT/opt/%name/%name.wgt *
+hash-signer.sh -ad -p platform $RPM_BUILD_ROOT/opt/%name/%name.wgt
+cd -
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+rm -rf $RPM_BUILD_DIR/%name-%version
+
+%changelog
+
+%files
+/opt/%name
+
+%post
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Start install package /opt/%name.wgt"
+    [ -e /opt/%name/%name.wgt ] && $wgt_installer -i /opt/%name/%name.wgt
+else
+    echo "Fail to find wgt_installer"
+fi
+
+%preun
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Uninstall package %name"
+    i_pkg_nns=`wrt-launcher -l | grep %name | awk '{ print $5 }'`
+    for i_pkg_nn in $i_pkg_nns; do
+      echo "Package Name is $i_pkg_nn"
+      $wgt_installer -un $i_pkg_nn
+    done
+else
+    echo "Fail to find wgt_installer"
+fi
diff --git a/tv/tct-behavior-tests/res/css/COPYING b/tv/tct-behavior-tests/res/css/COPYING
new file mode 100755 (executable)
index 0000000..e24d498
--- /dev/null
@@ -0,0 +1,21 @@
+canvas-index.css comes from
+http://w3c-test.org/html/tests/approved/common/canvas-index.css
+without any modification.
+
+a-green.css comes from
+http://test.csswg.org/source/approved/css-masking/src/support/a-green.css
+without any modification.
+
+These tests are copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
+
+tests.css comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
diff --git a/tv/tct-behavior-tests/res/css/a-green.css b/tv/tct-behavior-tests/res/css/a-green.css
new file mode 100755 (executable)
index 0000000..636c1bc
--- /dev/null
@@ -0,0 +1 @@
+.a { color: green; }
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/css/blue-100x100.css b/tv/tct-behavior-tests/res/css/blue-100x100.css
new file mode 100755 (executable)
index 0000000..84aded5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+#test-blue {
+    background-color: blue;
+    height: 100px;
+    width: 100px;
+}
diff --git a/tv/tct-behavior-tests/res/css/canvas-index.css b/tv/tct-behavior-tests/res/css/canvas-index.css
new file mode 100755 (executable)
index 0000000..3e09ffb
--- /dev/null
@@ -0,0 +1,31 @@
+body {
+    font-size: small;
+    font-family: sans-serif;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+h3 {
+    display: inline;
+    font-size: medium;
+}
+
+h3 + p {
+    display: inline;
+    margin-left: 0.5em;
+}
+
+li {
+    list-style-type: none;
+}
+
+ul {
+    padding-left: 2em;
+    margin-left: 0;
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/css/test.css b/tv/tct-behavior-tests/res/css/test.css
new file mode 100755 (executable)
index 0000000..fc87d3a
--- /dev/null
@@ -0,0 +1 @@
+pre.prettyprint{padding:5px;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;margin-bottom:10px;background-color:#eee;overflow:auto;width:auto;width:650px !ie7;padding-bottom:20px !ie7;max-height:600px;}pre.prettyprint{max-height:none\9;}code.prettyprint{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;background-color:#eee;}p code.prettyprint{padding:1px 5px 1px 5px;}.str{color:maroon;}.kwd{color:#00008b;}.com{color:gray;}.typ{color:#2b91af;}.lit{color:maroon;}.pun{color:#000;}.pln{color:#000;}.tag{color:maroon;}.atn{color:red;}.atv{color:blue;}.dec{color:purple;}@media print{.str{color:#060;}.kwd{color:#006;font-weight:bold;}.com{color:#600;font-style:italic;}.typ{color:#404;font-weight:bold;}.lit{color:#044;}.pun{color:#440;}.pln{color:#000;}.tag{color:#006;font-weight:bold;}.atn{color:#404;}.atv{color:#060;}}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/css/tests.css b/tv/tct-behavior-tests/res/css/tests.css
new file mode 100755 (executable)
index 0000000..45d0432
--- /dev/null
@@ -0,0 +1,123 @@
+@charset "UTF-8";
+/* CSS Document */
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
+       {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       font-weight: inherit;
+       font-style: inherit;
+       font-size: 0.96em;
+       font-family: arial;
+       vertical-align: baseline;
+}
+
+#testcasepage p {
+       text-align: left;
+}
+
+#suite_title {
+       text-align: left;
+}
+
+#btc {
+       text-align: right;
+}
+
+#testcasepage table {
+       border-collapse: separate;
+       border-spacing: 0;
+       margin-bottom: 1.4em;
+       vertical-align: middle;
+}
+
+#testcasepage th,#testcasepage td {
+       text-align: left;
+       font-weight: normal;
+       padding: 4px 10px 4px 5px;
+       vertical-align: middle;
+}
+
+#cases table {
+       width: 101%;
+}
+
+#fail_cases table {
+       width: 101%;
+}
+
+#title table {
+       width: 101%;
+}
+
+#device table {
+       width: 50%;
+}
+
+#summary table {
+       width: 50%;
+}
+
+#testcasepage th {
+       border-bottom: 1px solid #000;
+       background-color: #AAAAAA;
+       border-left: 1px solid #000;
+       border-top: 1px solid #000;
+       color: #000;
+       font-weight: bold;
+       vertical-align: bottom;
+}
+
+#testcasepage th:last-child,#testcasepage td:last-child {
+       border-right: 1px solid #000;
+}
+
+#testcasepage td {
+       border-left: 1px solid;
+       font-weight: normal;
+       border-bottom: 1px solid;
+}
+
+#testcasepage td.yellow_rate {
+       background-color: #ffcc00;
+}
+
+#testcasepage td.green_rate {
+       background-color: #33cc33;
+}
+
+#testcasepage td.dgreen_rate {
+       background-color: #339933;
+}
+
+#testcasepage td.red_rate {
+       background-color: #FF3333;
+}
+
+#title table,#title tr,#title td {
+       border-left: none;
+       border-bottom: none;
+       text-align: center;
+}
+
+#title td:last-child {
+       border-right: none;
+}
+
+#testcasepage h1 {
+       font-size: 2em;
+       font-family: Arial, sans-serif;
+       font-weight: bold;
+       line-height: 1;
+       color: #000;
+       margin-bottom: 0.75em;
+       padding-top: 0.25em;
+       font-weight: bold;
+}
+
+#goTopBtn {
+       right: 0px;
+       bottom: 0px;
+       position: fixed; +position: absolute;
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/font/COPYING b/tv/tct-behavior-tests/res/font/COPYING
new file mode 100755 (executable)
index 0000000..a926b6b
--- /dev/null
@@ -0,0 +1,15 @@
+CanvasTest.ttf comes from
+http://w3c-test.org/html/tests/approved/fonts/CanvasTest.ttf
+without any modification.
+
+csstest-basic-bold.ttf comes from
+http://test.csswg.org/source/approved/fonts/CSSTest/csstest-basic-bold.ttf
+without any modification.
+
+The font copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
diff --git a/tv/tct-behavior-tests/res/font/CanvasTest.ttf b/tv/tct-behavior-tests/res/font/CanvasTest.ttf
new file mode 100755 (executable)
index 0000000..9023592
Binary files /dev/null and b/tv/tct-behavior-tests/res/font/CanvasTest.ttf differ
diff --git a/tv/tct-behavior-tests/res/font/csstest-basic-bold.ttf b/tv/tct-behavior-tests/res/font/csstest-basic-bold.ttf
new file mode 100755 (executable)
index 0000000..8c53e6f
Binary files /dev/null and b/tv/tct-behavior-tests/res/font/csstest-basic-bold.ttf differ
diff --git a/tv/tct-behavior-tests/res/html/application.html b/tv/tct-behavior-tests/res/html/application.html
new file mode 100755 (executable)
index 0000000..a1849e5
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Application Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-application</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("application" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access application api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/html/bluetooth.html b/tv/tct-behavior-tests/res/html/bluetooth.html
new file mode 100755 (executable)
index 0000000..d8e3d8f
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Bluetooth Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-bluetooth</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("bluetooth" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access bluetooth api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/html/download.html b/tv/tct-behavior-tests/res/html/download.html
new file mode 100755 (executable)
index 0000000..d2b1bbc
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Download Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-download</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("download" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access download api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/html/systeminfo.html b/tv/tct-behavior-tests/res/html/systeminfo.html
new file mode 100755 (executable)
index 0000000..b17893a
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Systeminfo Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-systeminfo</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("systeminfo" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access systeminfo api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/html/wrtgeolocation.html b/tv/tct-behavior-tests/res/html/wrtgeolocation.html
new file mode 100755 (executable)
index 0000000..4f2ee43
--- /dev/null
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<p id="demo">Please Wait While Your Location Loads....</p>
+<script>
+var x = document.getElementById("demo");
+
+function getLocation() {
+    if (navigator.geolocation) {
+        navigator.geolocation.getCurrentPosition(showPosition);
+    } else {
+        x.innerHTML = "Geolocation is not supported by this browser.";
+    }
+}
+
+function showPosition(position) {
+    x.innerHTML="Latitude: " + position.coords.latitude +
+    "<br>Longitude: " + position.coords.longitude;
+}
+
+</script>
+<body>
+<Input type="button" onclick="getLocation()" value="get location">
+</body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/html/wrtwebnotify.html b/tv/tct-behavior-tests/res/html/wrtwebnotify.html
new file mode 100755 (executable)
index 0000000..811b508
--- /dev/null
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html>
+   <head>
+      <meta charset="UTF-8">
+      <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+      <meta name="author" content="Aurelio De Rosa">
+      <title>Web Notifications API Demo by Aurelio De Rosa</title>
+      <style>
+       #div1{
+       position:absolute;
+       left:0px;
+       top:0px;
+        }
+        *
+         {
+            -webkit-box-sizing: border-box;
+            -moz-box-sizing: border-box;
+            box-sizing: border-box;
+         }
+
+         body
+         {
+            max-width: 500px;
+            margin: 2em auto;
+            padding: 0 0.5em;
+            font-size: 20px;
+         }
+
+         h1
+         {
+            text-align: center;
+         }
+
+         .api-support
+         {
+            display: block;
+         }
+
+         .hidden
+         {
+            display: none;
+         }
+
+         #custom-notification
+         {
+            margin-top: 1em;
+         }
+
+         label
+         {
+            display: block;
+         }
+
+         input[name="title"],
+         textarea
+         {
+            width: 100%;
+         }
+
+         input[name="title"]
+         {
+            height: 2em;
+         }
+
+         textarea
+         {
+            height: 5em;
+         }
+
+         .buttons-wrapper
+         {
+            text-align: center;
+         }
+
+         .button-demo
+         {
+            padding: 0.5em;
+            margin: 1em;
+         }
+
+         #log
+         {
+            height: 200px;
+            width: 100%;
+            overflow-y: scroll;
+            border: 1px solid #333333;
+            line-height: 1.3em;
+         }
+
+         .author
+         {
+            display: block;
+            margin-top: 1em;
+         }
+      </style>
+   </head>
+   <body>
+    <!--  <a href="http://www.sitepoint.com/introduction-web-notifications-api/">Go back to the article</a>
+
+      <h1>Web Notifications API</h1>
+
+      <span id="wn-unsupported" class="api-support hidden">API not supported</span>
+
+      <form id="custom-notification" action="">
+         <label for="title">Title:</label>
+         <input type="text" id="title" name="title" />
+
+         <label for="body">Body:</label>
+         <textarea id="body" name="body"></textarea>-->
+        <div id="div1">
+         <div class="buttons-wrapper">
+            <button id="button-wn-show-preset" class="button-demo">Show Notification</button>
+           <!-- <input type="submit" id="button-wn-show-custom" class="button-demo" value="Show Custom Notification" />-->
+         </div>
+       </div>
+      </form>
+
+      <!--<h3>Log</h3>
+      <div id="log"></div>
+      <button id="clear-log" class="button-demo">Clear log</button>
+
+      <small class="author">
+         Demo created by <a href="http://www.audero.it">Aurelio De Rosa</a>
+         (<a href="https://twitter.com/AurelioDeRosa">@AurelioDeRosa</a>).<br />
+         This demo is part of the <a href="https://github.com/AurelioDeRosa/HTML5-API-demos">HTML5 API demos repository</a>.
+      </small>-->
+
+      <script>
+         if (!('Notification' in window)) {
+            document.getElementById('wn-unsupported').classList.remove('hidden');
+            document.getElementById('button-wn-show-preset').setAttribute('disabled', 'disabled');
+            document.getElementById('button-wn-show-custom').setAttribute('disabled', 'disabled');
+         } else {
+            var log = document.getElementById('log');
+            var notificationEvents = ['onclick', 'onshow', 'onerror', 'onclose'];
+
+            function notifyUser(event) {
+               var title;
+               var options;
+
+               event.preventDefault();
+
+               if (event.target.id === 'button-wn-show-preset') {
+                  title = 'Email received';
+                  options = {
+                     body: 'You have a total of 3 unread emails',
+                     tag: 'preset',
+                     icon: 'http://www.audero.it/favicon.ico'
+                  };
+               } else {
+                  title = document.getElementById('title').value;
+                  options = {
+                     body: document.getElementById('body').value,
+                     tag: "custom"
+                  };
+               }
+
+               Notification.requestPermission(function() {
+                  var notification = new Notification(title, options);
+
+                  notificationEvents.forEach(function(eventName) {
+                     notification[eventName] = function(event) {
+                        log.innerHTML = 'Event "' + event.type + '" triggered for notification "' + notification.tag +
+                                '"<br />' + log.innerHTML;
+                     };
+                  });
+               });
+            }
+
+            document.getElementById('button-wn-show-preset').addEventListener('click', notifyUser);
+            document.getElementById('button-wn-show-custom').addEventListener('click', notifyUser);
+
+            document.getElementById('clear-log').addEventListener('click', function() {
+               log.innerHTML = '';
+            });
+         }
+      </script>
+   </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/images/1x1-white.png b/tv/tct-behavior-tests/res/images/1x1-white.png
new file mode 100755 (executable)
index 0000000..dd43fae
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/1x1-white.png differ
diff --git a/tv/tct-behavior-tests/res/images/COPYING b/tv/tct-behavior-tests/res/images/COPYING
new file mode 100755 (executable)
index 0000000..5a13abf
--- /dev/null
@@ -0,0 +1,58 @@
+PNG_512x512_318Kb_BBB.png comes from
+http://testdata.meego.com
+without any modification.
+
+The file is under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+The ring.png comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/fast/backgrounds/resources/
+
+The file is under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
+
+
+-------------------------------
+back_top.png comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
+
+-------------------------------
+blue-100x100.png
+red-100x100.png
+green-100x100.png
+
+
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+        Hao, Yunfei <yunfeix.hao@intel.com>
diff --git a/tv/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png b/tv/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png
new file mode 100755 (executable)
index 0000000..2aa08a3
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png differ
diff --git a/tv/tct-behavior-tests/res/images/back_top.png b/tv/tct-behavior-tests/res/images/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/back_top.png differ
diff --git a/tv/tct-behavior-tests/res/images/blue-100x100.png b/tv/tct-behavior-tests/res/images/blue-100x100.png
new file mode 100755 (executable)
index 0000000..584f9c3
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/blue-100x100.png differ
diff --git a/tv/tct-behavior-tests/res/images/green-100x100.png b/tv/tct-behavior-tests/res/images/green-100x100.png
new file mode 100755 (executable)
index 0000000..d3aea5d
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/green-100x100.png differ
diff --git a/tv/tct-behavior-tests/res/images/red-100x100.png b/tv/tct-behavior-tests/res/images/red-100x100.png
new file mode 100755 (executable)
index 0000000..d13fc80
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/red-100x100.png differ
diff --git a/tv/tct-behavior-tests/res/images/ring.png b/tv/tct-behavior-tests/res/images/ring.png
new file mode 100755 (executable)
index 0000000..061bb94
Binary files /dev/null and b/tv/tct-behavior-tests/res/images/ring.png differ
diff --git a/tv/tct-behavior-tests/res/js/COPYING b/tv/tct-behavior-tests/res/js/COPYING
new file mode 100755 (executable)
index 0000000..94a77ec
--- /dev/null
@@ -0,0 +1,6 @@
+application.js comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
diff --git a/tv/tct-behavior-tests/res/js/application.js b/tv/tct-behavior-tests/res/js/application.js
new file mode 100755 (executable)
index 0000000..72e2a78
--- /dev/null
@@ -0,0 +1,44 @@
+function getScrollTop(){
+    return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults (
+               $(window) ? $(window).scrollTop() : 0,
+               document.documentElement ? document.documentElement.scrollTop : 0,
+               document.body ? document.body.scrollTop : 0
+       );
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop(){
+    $(window) ? $(window).scrollTop(0): 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 :0;
+       document.body ? document.body.scrollTop = 0 : 0;
+} 
+
+function goTopEx(){
+    $node = $('#goTopBtn');
+       if(getScrollTop() > 0){
+                   $node.show();
+       }else{
+                   $node.hide();
+       }
+       
+    $(window).scroll(function(){
+           if(getScrollTop() > 0){
+                   $node.show();
+           }else{
+                   $node.hide();
+           }
+    });
+       
+    $node.click(function(){
+               setScrollTop();
+    });
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/js/csp.js b/tv/tct-behavior-tests/res/js/csp.js
new file mode 100755 (executable)
index 0000000..de46ff6
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+
+var X = 10;
+var Y = eval(X + 17);
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/res/js/reportcspviolation.cgi b/tv/tct-behavior-tests/res/js/reportcspviolation.cgi
new file mode 100755 (executable)
index 0000000..15d8cf4
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+import time
+import os
+print 'Content-Type: text/html\n\n'
+while True:
+    i = raw_input()
+    if i is None:
+        break
+    if str(i).strip()=='':
+        break
+    n = 1
+    if os.path.isfile('/tmp/csp-report.log'):
+        file_object_num = open('/tmp/csp-report.log','r')
+        for line in file_object_num:
+            if str(line).find("Time:") >= 0:
+                n = n+1
+        file_object_num.close( )
+    file_object = open('/tmp/csp-report.log', 'a')
+    file_object.write('\n %d   Time:' %n)
+    file_object.write( time.strftime(' %Y-%m-%d %H:%M:%S',time.localtime(time.time())))
+    file_object.write('\n')
+    file_object.write('     Data:')
+    file_object.write(i)
+    file_object.write('\n')
+    file_object.close( )
+    print i
diff --git a/tv/tct-behavior-tests/res/js/test.js b/tv/tct-behavior-tests/res/js/test.js
new file mode 100755 (executable)
index 0000000..8b868e4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
+function getVideoURI (){
+
+}
diff --git a/tv/tct-behavior-tests/res/js/test81.js b/tv/tct-behavior-tests/res/js/test81.js
new file mode 100755 (executable)
index 0000000..e582567
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+function getVideoURI (){
+
+}
diff --git a/tv/tct-behavior-tests/res/js/test83.js b/tv/tct-behavior-tests/res/js/test83.js
new file mode 100755 (executable)
index 0000000..d260698
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
diff --git a/tv/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp b/tv/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
new file mode 100755 (executable)
index 0000000..ee410d3
Binary files /dev/null and b/tv/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp differ
diff --git a/tv/tct-behavior-tests/res/media/COPYING b/tv/tct-behavior-tests/res/media/COPYING
new file mode 100755 (executable)
index 0000000..2127517
--- /dev/null
@@ -0,0 +1,37 @@
+3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
+MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
+MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
+come from http://testdata.meego.com
+without any modification.
+
+These files are under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+red-green.theora.ogv comes from
+https://www.khronos.org/registry/webgl/sdk/tests/conformance/resources/red-green.theora.ogv
+without any modification.
+
+Khronos Group License (MIT):
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/tv/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 b/tv/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..a7e8564
Binary files /dev/null and b/tv/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 differ
diff --git a/tv/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 b/tv/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..65b4781
Binary files /dev/null and b/tv/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 differ
diff --git a/tv/tct-behavior-tests/res/media/movie_5.mp4 b/tv/tct-behavior-tests/res/media/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/tv/tct-behavior-tests/res/media/movie_5.mp4 differ
diff --git a/tv/tct-behavior-tests/res/media/red-green.theora.ogv b/tv/tct-behavior-tests/res/media/red-green.theora.ogv
new file mode 100755 (executable)
index 0000000..1543915
Binary files /dev/null and b/tv/tct-behavior-tests/res/media/red-green.theora.ogv differ
diff --git a/tv/tct-behavior-tests/subtestresult.xml b/tv/tct-behavior-tests/subtestresult.xml
new file mode 100755 (executable)
index 0000000..bee19c0
--- /dev/null
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testresult.xsl"?>
+<test_definition>
+<suite name="tct-behavior-tests">
+  <set name="CSP">
+      <testcase id="csp-none" result="N/A"></testcase>
+      <testcase id="csp-self" result="N/A"></testcase>
+      <testcase id="csp-asterisk" result="N/A"></testcase>
+      <testcase id="csp-cross-origin" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-csp" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-report-only" result="N/A"></testcase>
+      <testcase id="default-src_none" result="N/A"></testcase>
+      <testcase id="default-src_self" result="N/A"></testcase>
+      <testcase id="default-src_asterisk" result="N/A"></testcase>
+      <testcase id="default-src_cross_origin" result="N/A"></testcase>
+      <testcase id="sandbox-empty-ext" result="N/A"></testcase>
+      <testcase id="sandbox-empty-int" result="N/A"></testcase>
+      <testcase id="sandbox-empty-inline" result="N/A"></testcase>
+      <testcase id="sandbox-same-origin-allow-scripts" result="N/A"></testcase>
+      <testcase id="script-src_none" result="N/A"></testcase>
+      <testcase id="script-src_inline_eval" result="N/A"></testcase>
+      <testcase id="style-src_self" result="N/A"></testcase>
+  </set>
+  <set name="PackageManagement">
+      <testcase id="Sample-widget1" result="N/A"></testcase>
+      <testcase id="Sample-widget2" result="N/A"></testcase>
+      <testcase id="Sample-widget3" result="N/A"></testcase>
+      <testcase id="Sample-widget4" result="N/A"></testcase>
+      <testcase id="widget-version-1" result="N/A"></testcase>
+      <testcase id="npruntime-all-on-arm" result="N/A"></testcase>
+      <testcase id="npruntime-arm-on-x86" result="N/A"></testcase>
+  </set>
+  <set name="ConfigurationExtension">
+      <testcase id="application-content" result="N/A"></testcase>
+      <testcase id="setting-an-more" result="N/A"></testcase>
+      <testcase id="setting-an-one" result="N/A"></testcase>
+      <testcase id="setting-an-zero" result="N/A"></testcase>
+      <testcase id="setting-ar-true" result="N/A"></testcase>
+      <testcase id="setting-bs-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-enable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-disable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-enable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-default" result="N/A"></testcase>
+      <testcase id="setting-hwkey-disable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-enable" result="N/A"></testcase>
+      <testcase id="setting-install-location-internal-only-with-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-no-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-with-card" result="N/A"></testcase>
+  </set>
+  <set name="Stability">
+      <testcase id="test-half-memory" result="N/A"></testcase>
+      <testcase id="test-hd-image" result="N/A"></testcase>
+  </set>
+  <set name="WRTSupport">
+      <testcase id="debug-web-inspector-ubuntu" result="N/A"></testcase>
+      <testcase id="debug-web-inspector-windows7" result="N/A"></testcase>
+      <testcase id="lifecycle-unload-event" result="N/A"></testcase>
+      <testcase id="other-localization" result="N/A"></testcase>
+      <testcase id="other-uri-schemes" result="N/A"></testcase>
+      <testcase id="other-uri-schemes-mailto" result="N/A"></testcase>
+      <testcase id="other-widget-access-policy" result="N/A"></testcase>
+      <testcase id="protection-encryption-check" result="N/A"></testcase>
+      <testcase id="security-permission" result="N/A"></testcase>
+      <testcase id="security-policy" result="N/A"></testcase>
+      <testcase id="url-access-multi" result="N/A"></testcase>
+      <testcase id="url-access-multi-all" result="N/A"></testcase>
+      <testcase id="url-access-multi-subdomains" result="N/A"></testcase>
+  </set>
+  <set name="WRTUI">
+      <testcase id="application-rotation-sensor-enable" result="N/A"></testcase>
+      <testcase id="multiple-browsing-context" result="N/A"></testcase>
+      <testcase id="view-mode-fullscreen-rotation" result="N/A"></testcase>
+      <testcase id="view-mode-maximized-rotation" result="N/A"></testcase>
+  </set>
+</suite>
+</test_definition>
diff --git a/tv/tct-behavior-tests/suite.json b/tv/tct-behavior-tests/suite.json
new file mode 100755 (executable)
index 0000000..2e85b56
--- /dev/null
@@ -0,0 +1,110 @@
+{
+    "pkg-blacklist": [
+        "config.xml",
+        "pack.py",
+        "testcase.xsl",
+        "testresult.xsl",
+        "tests.css",
+        "icon.png",
+        "manifest.json",
+        "suite.json",
+        "inst.*"
+    ],
+    "pkg-list": {
+        "apk,cordova": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.apk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.android.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [
+                        "manifest.json"
+                    ],
+                    "copylist": {
+                        "tests.android.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                }
+            }
+        },
+        "wgt": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE.Apache-2.0": "LICENSE.Apache-2.0",
+                "LICENSE.BSD-3": "LICENSE.BSD-3",
+                "LICENSE.CC-BY-3.0": "LICENSE.CC-BY-3.0",
+                "inst.wgt.py": "inst.py",
+                "askpolicy.sh": "askpolicy.sh",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/html": "res/html",
+                "res/js": "res/js",
+                "res/media": "res/media",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.xml": "tests.xml"
+            },
+            "sign-flag": "true",
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "copylist": {
+                        "tests.xml": "tests.xml"
+                    },
+                    "install-path": ".",
+                    "sign-flag": "true"
+                }
+            }
+        },
+        "xpk": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.xpk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.tizen.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [],
+                    "copylist": {
+                        "tests.tizen.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                },
+                "tests/Viewport/ViewportTest": {
+                    "app-name": "ViewportTest",
+                    "blacklist": [],
+                    "install-path": "apps",
+                    "sign-flag": "true"
+                }
+            }
+        }
+    },
+    "pkg-name": "tct-behavior-tests"
+}
diff --git a/tv/tct-behavior-tests/tct-behavior-tests.spec b/tv/tct-behavior-tests/tct-behavior-tests.spec
new file mode 100755 (executable)
index 0000000..5be4f3f
--- /dev/null
@@ -0,0 +1,21 @@
+name="tct-behavior-tests"
+main_version="2.4"
+release=""
+version="$main_version"
+appname=$(echo $name|sed 's/-/_/g')
+
+# set value "1" if this suite need to sign,otherwise set "0" #
+sign="1"
+
+# set value "1" if this suite need to keep src_file,otherwise set "0" #
+src_file="1"
+
+# specified files to be kept in whitelist #
+whitelist="
+inst.sh
+tests.xml
+tests.full.xml
+LICENSE.Apache-2.0
+LICENSE.BSD-3
+LICENSE.CC-BY-3.0
+mediasrc"
diff --git a/tv/tct-behavior-tests/testcase.xsl b/tv/tct-behavior-tests/testcase.xsl
new file mode 100755 (executable)
index 0000000..8623c28
--- /dev/null
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="suites">
+                                               <table>
+                                                       <tr>
+                                                               <th>Test Suite</th>
+                                                               <th>Total</th>
+                                                               <th>Auto</th>
+                                                               <th>Manual</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>
+                                                                       Total
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition/suite/set//testcase)" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])" />
+                                                               </td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <tr>
+                                                                       <td>
+                                                                               <xsl:value-of select="@name" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td class="title">
+                                                                       <h1>Detailed Test Cases</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="cases">
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <p>
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                       </p>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Type</th>
+                                                                       <th>Component</th>
+                                                                       <th>Execution Type</th>
+                                                                       <th>Description</th>
+                                                                       <th>Specification</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="7">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@component" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@execution_type" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <p>
+                                                                                                       Pre_condition:
+                                                                                                       <xsl:value-of select=".//description/pre_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Post_condition:
+                                                                                                       <xsl:value-of select=".//description/post_condition" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Test Script Entry:
+                                                                                                       <xsl:value-of select=".//description/test_script_entry" />
+                                                                                               </p>
+                                                                                               <p>
+                                                                                                       Steps:
+                                                                                                       <p />
+                                                                                                       <xsl:for-each select=".//description/steps/step">
+                                                                                                               <xsl:sort select="@order" />
+                                                                                                               Step
+                                                                                                               <xsl:value-of select="@order" />
+                                                                                                               :
+                                                                                                               <xsl:value-of select="./step_desc" />
+                                                                                                               ;
+                                                                                                               <p />
+                                                                                                               Expected Result:
+                                                                                                               <xsl:value-of select="./expected" />
+                                                                                                               <p />
+                                                                                                       </xsl:for-each>
+                                                                                               </p>
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:call-template name="br-replace">
+                                                                                                       <xsl:with-param name="word" select=".//spec" />
+                                                                                               </xsl:call-template>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>
+</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/testresult.xsl b/tv/tct-behavior-tests/testresult.xsl
new file mode 100755 (executable)
index 0000000..9cb39da
--- /dev/null
@@ -0,0 +1,324 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+       <xsl:output method="html" version="1.0" encoding="UTF-8"
+               indent="yes" />
+       <xsl:template match="/">
+               <html>
+                       <STYLE type="text/css">
+                               @import "tests.css";
+                       </STYLE>
+                       <head>
+                               <script type="text/javascript" src="jquery.js" />
+                       </head>
+                       <body>
+                               <div id="testcasepage">
+                                       <div id="title">
+                                               <table>
+                                                       <tr>
+                                                               <td>
+                                                                       <h1>Test Report</h1>
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+                                       <div id="summary">
+                                               <table>
+                                                       <tr>
+                                                               <th colspan="2">Test Summary</th>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Tests Total</td>
+                                                               <td>
+                                                                       <xsl:value-of select="count(test_definition//suite/set/testcase)" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Passed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'PASS'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Failed</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'FAIL'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Block</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                                       <tr>
+                                                               <td>Test Not Run</td>
+                                                               <td>
+                                                                       <xsl:value-of
+                                                                               select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])" />
+                                                               </td>
+                                                       </tr>
+                                               </table>
+                                       </div>
+
+
+                                       <div id="suite_summary">
+                                               <div id="title">
+                                                       <a name="contents"></a>
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1>Test Summary by Suite</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <table>
+                                                       <tr>
+                                                               <th>Suite</th>
+                                                               <th>Passed</th>
+                                                               <th>Failed</th>
+                                                               <th>Blocked</th>
+                                                               <th>Not Run</th>
+                                                               <th>Total</th>
+                                                       </tr>
+                                                       <xsl:for-each select="test_definition/suite">
+                                                               <xsl:sort select="@name" />
+                                                               <tr>
+                                                                       <td>
+                                                                               <a>
+                                                                                       <xsl:attribute name="href">
+                                                                                      #<xsl:value-of
+                                                                                               select="@name" />
+                                                                                   </xsl:attribute>
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </a>
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'PASS'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'FAIL'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of
+                                                                                       select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])" />
+                                                                       </td>
+                                                                       <td>
+                                                                               <xsl:value-of select="count(set//testcase)" />
+                                                                       </td>
+                                                               </tr>
+                                                       </xsl:for-each>
+                                               </table>
+                                       </div>
+
+                                       <div id="fail_cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">
+                                                                                       Test Failures (
+                                                                                       <xsl:value-of
+                                                                                               select="count(test_definition/suite/set//testcase[@result = 'FAIL'])" />
+                                                                                       )
+                                                                               </h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                          <xsl:value-of
+                                                                               select="@name" />
+                                    </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <xsl:choose>
+                                                                                       <xsl:when test="@result">
+                                                                                               <xsl:if test="@result = 'FAIL'">
+
+                                                                                                       <tr>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@id" />
+                                                                                                               </td>
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select="@purpose" />
+                                                                                                               </td>
+
+
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+
+                                                                                                               <td>
+                                                                                                                       <xsl:value-of select=".//result_info/stdout" />
+                                                                                                                       <xsl:if test=".//result_info/stdout = ''">
+                                                                                                                               N/A
+                                                                                                                       </xsl:if>
+                                                                                                               </td>
+                                                                                                       </tr>
+                                                                                               </xsl:if>
+                                                                                       </xsl:when>
+                                                                               </xsl:choose>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+
+                                       <div id="cases">
+                                               <div id="title">
+                                                       <table>
+                                                               <tr>
+                                                                       <td class="title">
+                                                                               <h1 align="center">Detailed Test Results</h1>
+                                                                       </td>
+                                                               </tr>
+                                                       </table>
+                                               </div>
+                                               <xsl:for-each select="test_definition/suite">
+                                                       <xsl:sort select="@name" />
+                                                       <div id="btc">
+                                                               <a href="#contents">Back to Contents</a>
+                                                       </div>
+                                                       <div id="suite_title">
+                                                               Test Suite:
+                                                               <xsl:value-of select="@name" />
+                                                               <a>
+                                                                       <xsl:attribute name="name">
+                                                                     <xsl:value-of
+                                                                               select="@name" />
+                                                                  </xsl:attribute>
+                                                               </a>
+                                                       </div>
+                                                       <table>
+                                                               <tr>
+                                                                       <th>Case_ID</th>
+                                                                       <th>Purpose</th>
+                                                                       <th>Result</th>
+                                                                       <th>Stdout</th>
+                                                               </tr>
+                                                               <xsl:for-each select=".//set">
+                                                                       <xsl:sort select="@name" />
+                                                                       <tr>
+                                                                               <td colspan="4">
+                                                                                       Test Set:
+                                                                                       <xsl:value-of select="@name" />
+                                                                               </td>
+                                                                       </tr>
+                                                                       <xsl:for-each select=".//testcase">
+                                                                               <xsl:sort select="@id" />
+                                                                               <tr>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@id" />
+                                                                                       </td>
+                                                                                       <td>
+                                                                                               <xsl:value-of select="@purpose" />
+                                                                                       </td>
+
+                                                                                       <xsl:choose>
+                                                                                               <xsl:when test="@result">
+                                                                                                       <xsl:if test="@result = 'FAIL'">
+                                                                                                               <td class="red_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'PASS'">
+                                                                                                               <td class="green_rate">
+                                                                                                                       <xsl:value-of select="@result" />
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result = 'BLOCK' ">
+                                                                                                               <td>
+                                                                                                                       BLOCK
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                                       <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                                                                                                               <td>
+                                                                                                                       Not Run
+                                                                                                               </td>
+                                                                                                       </xsl:if>
+                                                                                               </xsl:when>
+                                                                                               <xsl:otherwise>
+                                                                                                       <td>
+
+                                                                                                       </td>
+                                                                                               </xsl:otherwise>
+                                                                                       </xsl:choose>
+                                                                                       <td>
+                                                                                               <xsl:value-of select=".//result_info/stdout" />
+                                                                                               <xsl:if test=".//result_info/stdout = ''">
+                                                                                                       N/A
+                                                                                               </xsl:if>
+                                                                                       </td>
+                                                                               </tr>
+                                                                       </xsl:for-each>
+                                                               </xsl:for-each>
+                                                       </table>
+                                               </xsl:for-each>
+                                       </div>
+                               </div>
+                               <div id="goTopBtn">
+                                       <img border="0" src="./back_top.png" />
+                               </div>
+                               <script type="text/javascript" src="application.js" />
+                               <script language="javascript" type="text/javascript">
+                                       $(document).ready(function(){
+                                       goTopEx();
+                                       });
+                               </script>
+                       </body>
+               </html>
+       </xsl:template>
+       <xsl:template name="br-replace">
+               <xsl:param name="word" />
+               <xsl:variable name="cr">
+                       <xsl:text>
+</xsl:text>
+               </xsl:variable>
+               <xsl:choose>
+                       <xsl:when test="contains($word,$cr)">
+                               <xsl:value-of select="substring-before($word,$cr)" />
+                               <br />
+                               <xsl:call-template name="br-replace">
+                                       <xsl:with-param name="word" select="substring-after($word,$cr)" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$word" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/tv/tct-behavior-tests/tests.css b/tv/tct-behavior-tests/tests.css
new file mode 100755 (executable)
index 0000000..30c3670
--- /dev/null
@@ -0,0 +1,103 @@
+@charset "UTF-8";
+/* CSS Document */
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
+       {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       font-weight: inherit;
+       font-style: inherit;
+       font-size: 0.96em;
+       font-family: arial;
+       vertical-align: baseline;
+}
+
+#testcasepage p {
+       text-align: left;
+}
+
+#testcasepage table {
+       border-collapse: separate;
+       border-spacing: 0;
+       margin-bottom: 1.4em;
+       vertical-align: middle;
+}
+
+#testcasepage th,#testcasepage td {
+       text-align: left;
+       font-weight: normal;
+       padding: 4px 10px 4px 5px;
+       vertical-align: middle;
+}
+
+#cases table {
+       width: 101%;
+}
+
+#title table {
+       width: 101%;
+}
+
+#device table {
+       width: 50%;
+}
+
+#summary table {
+       width: 50%;
+}
+
+#testcasepage th {
+       border-bottom: 1px solid #000;
+       background-color: #AAAAAA;
+       border-left: 1px solid #000;
+       border-top: 1px solid #000;
+       color: #000;
+       font-weight: bold;
+       vertical-align: bottom;
+}
+
+#testcasepage th:last-child, #testcasepage td:last-child {
+       border-right: 1px solid #000;
+}
+
+#testcasepage td {
+       border-left: 1px solid;
+       font-weight: normal;
+       border-bottom: 1px solid;
+}
+
+#testcasepage td.yellow_rate {
+       background-color: #ffcc00;
+}
+
+#testcasepage td.green_rate {
+       background-color: #33cc33;
+}
+
+#testcasepage td.dgreen_rate {
+       background-color: #339933;
+}
+
+#testcasepage td.red_rate {
+       background-color: #FF3333;
+}
+
+#title table, #title tr, #title td {
+       border-left: none;
+       border-bottom: none;
+       text-align: center;
+}
+
+#title td:last-child {
+       border-right: none;
+}
+
+#testcasepage h1 {
+       font-size: 2em;
+       font-family: Arial, sans-serif; font-weight : bold;
+       line-height: 1;
+       color: #000;
+       margin-bottom: 0.75em;
+       padding-top: 0.25em;
+       font-weight: bold;
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests.full.xml b/tv/tct-behavior-tests/tests.full.xml
new file mode 100755 (executable)
index 0000000..9ac282d
--- /dev/null
@@ -0,0 +1,685 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase purpose="Media Playback Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MediaPlayback">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="2D/3D Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="2D3DAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SVG Transformation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SVGTransformation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Style Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSStyle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Canvas Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="Canvas-PicRotaScaleTransfVampix">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="CSS-AnimTransfBackgBordFont">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+      <testcase purpose="Camera Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Camera">
+        <capability name="http://tizen.org/feature/camera"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Camera via UserMedia Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CameraViaUserMedia">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Vibration Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Vibration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Location GPS Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="LocationGPS">
+        <capability name="http://tizen.org/feature/location.gps"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Accelerometer Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Accelerometer">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Gesture">
+      <testcase purpose="Touch Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Touch">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Drag and Drop Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DragandDrop">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Clipboard Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Clipboard">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase purpose="Viewport Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Viewport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase purpose="Page Visibility Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PageVisibility">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase purpose="Alarm Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Alarm">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Application">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControl">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Extending Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControlExtending">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Package Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Package">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Hybrid Application Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="HybridApplication">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Communication">
+      <testcase purpose="Bluetooth Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Bluetooth">
+        <capability name="http://tizen.org/feature/network.bluetooth"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Messaging SMS/MMS Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MessagingSMSMMS">
+        <capability name="http://tizen.org/feature/network.telephony"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Messaging Email Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MessagingEmail">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="NFC Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="NFC">
+        <capability name="http://tizen.org/feature/network.nfc"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Push Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Push">
+        <capability name="http://tizen.org/feature/network.push"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Social">
+      <testcase purpose="DataSync Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DataSync">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Content">
+      <testcase purpose="Download Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Download">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="FileReader Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FileReader">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="System">
+      <testcase purpose="Power Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Power">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemInfo Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemInfo">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemSetting Screen Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemSettingScreen">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemSetting IncomingCall Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemSettingIncomingCall">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Security Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Security">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="DeviceAPISecurity Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DeviceAPISecurity">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Notification Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Notification">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Full Screen Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FullScreen">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Web Runtime">
+      <testcase purpose="ApplicationLifecycle Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationLifecycle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Invisible Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationInvisible">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Dynamic Box Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DynamicBox">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSP Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSP">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Interface Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTUI">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Runtime Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Configuration Extension Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ConfigurationExtension">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Package Management Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PackageManagement">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Stability Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Stability">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Agent String Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="UserAgentString">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Cordova Support">
+      <testcase purpose="Cordova Support Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CordovaSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests.xml b/tv/tct-behavior-tests/tests.xml
new file mode 100755 (executable)
index 0000000..1f096cc
--- /dev/null
@@ -0,0 +1,660 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+<!--       <testcase component="behavior" execution_type="manual" id="MediaPlayback" priority="P0" purpose="Media Playback Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="2D3DAnimation" priority="P0" purpose="2D/3D Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="SVGTransformation" priority="P0" purpose="SVG Transformation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="HTML5Forms" purpose="HTML5 Forms Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSSStyle" priority="P0" purpose="CSS Style Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSSAnimation" priority="P0" purpose="CSS Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Canvas-PicRotaScaleTransfVampix" priority="P1" purpose="Canvas Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSS-AnimTransfBackgBordFont" priority="P1" purpose="CSS Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+<!--
+    <set name="Hardware and Sensor">
+      <testcase component="behavior" execution_type="manual" id="Camera" priority="P0" purpose="Camera Test">
+        <capability name="http://tizen.org/feature/media.audio_recording"/>
+        <capability name="http://tizen.org/feature/media.image_capture"/>
+        <capability name="http://tizen.org/feature/media.video_recording"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CameraViaUserMedia" priority="P0" purpose="Camera via UserMedia Test">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Vibration" priority="P0" purpose="Vibration Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="LocationGPS" priority="P0" purpose="Location GPS Test">
+        <capability name="http://tizen.org/feature/location.gps"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Accelerometer" priority="P0" purpose="Accelerometer Test">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+-->
+    <set name="Gesture">
+<!--      <testcase component="behavior" execution_type="manual" id="Touch" priority="P0" purpose="Touch Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="DragandDrop" priority="P0" purpose="Drag and Drop Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="Clipboard" priority="P0" purpose="Clipboard Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+      <testcase component="behavior" execution_type="manual" id="Viewport" priority="P0" purpose="Viewport Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="PageVisibility" priority="P0" purpose="Page Visibility Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="Application">
+      <testcase component="behavior" execution_type="manual" id="Alarm" priority="P0" purpose="Alarm Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+     <!--  <testcase component="behavior" execution_type="manual" id="Application" priority="P0" purpose="Application Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    <!--  <testcase component="behavior" execution_type="manual" id="AppControl" priority="P0" purpose="AppControl Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="AppControlExtending" priority="P0" purpose="AppControl Extending Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="Package" priority="P0" purpose="Package Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="HybridApplication" priority="P0" purpose="Hybrid Application Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+<!--
+    <set name="Communication">
+      <testcase component="behavior" execution_type="manual" id="Bluetooth" priority="P0" purpose="Bluetooth Test">
+        <capability name="http://tizen.org/feature/network.bluetooth"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="MessagingSMSMMS" priority="P0" purpose="Messaging SMS/MMS Test">
+        <capability name="http://tizen.org/feature/network.telephony"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="MessagingEmail" priority="P0" purpose="Messaging Email Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="NFC" priority="P0" purpose="NFC Test">
+        <capability name="http://tizen.org/feature/network.nfc"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Push" priority="P0" purpose="Push Test">
+        <capability name="http://tizen.org/feature/network.push"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+-->
+<!--
+    <set name="Social">
+       <testcase component="behavior" execution_type="manual" id="DataSync" priority="P0" purpose="DataSync Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+    </set>
+-->
+    <set name="Content">
+      <testcase component="behavior" execution_type="manual" id="Download" priority="P0" purpose="Download Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="FileReader" priority="P0" purpose="FileReader Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="System">
+<!--      <testcase component="behavior" execution_type="manual" id="Power" priority="P0" purpose="Power Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="SystemInfo" priority="P0" purpose="SystemInfo Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--       <testcase component="behavior" execution_type="manual" id="SystemSettingScreen" priority="P0" purpose="SystemSetting Screen Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--       <testcase component="behavior" execution_type="manual" id="SystemSettingIncomingCall" priority="P0" purpose="SystemSetting IncomingCall Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="Security" priority="P0" purpose="Security Test">
+        <description>
+          <pre_condition/>
+       <!--   <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="DeviceAPISecurity" priority="P0" purpose="DeviceAPISecurity Test">
+        <description>
+          <pre_condition/>
+          <post_condition/> -->
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--
+      <testcase component="behavior" execution_type="manual" id="Notification" priority="P0" purpose="Notification Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+<!--       <testcase component="behavior" execution_type="manual" id="FullScreen" priority="P0" purpose="Full Screen Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="Web Runtime">
+     <!-- <testcase component="behavior" execution_type="manual" id="ApplicationLifecycle" priority="P0" purpose="ApplicationLifecycle Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+      <testcase component="behavior" execution_type="manual" id="ApplicationInvisible" priority="P0" purpose="Application Invisible Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>-->
+<!--       <testcase component="behavior" execution_type="manual" id="DynamicBox" priority="P0" purpose="Dynamic Box Test">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="CSP" priority="P0" purpose="CSP Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase component="behavior" execution_type="manual" id="WRTUI" priority="P0" purpose="User Interface Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--      <testcase component="behavior" execution_type="manual" id="WRTSupport" priority="P0" purpose="Application Runtime Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>   -->
+<!--      <testcase component="behavior" execution_type="manual" id="ConfigurationExtension" priority="P0" purpose="Configuration Extension Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="PackageManagement" priority="P0" purpose="Package Management Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Stability" priority="P0" purpose="Stability Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+   <!--   <testcase component="behavior" execution_type="manual" id="UserAgentString" priority="P0" purpose="User Agent String Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+    </set>
+    <set name="Cordova Support">
+      <testcase component="behavior" execution_type="manual" id="CordovaSupport" purpose="Cordova Support Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/css/style.css b/tv/tct-behavior-tests/tests/2D3DAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..4bd6a6c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 7px 0px;
+   width: 100%;
+}
+
+#viewArea {
+    width: 100%;
+    border: 1px solid black;
+}
+
+#mainTester {
+    position: relative;
+    width: 330px;
+    height: 300px;
+    margin: 0px auto;
+}
+
+.containing-element {padding-top: 20px;}
+
+.containing-element .ui-slider-switch { width: 100%;}
+
+.containing-element .ui-controlgroup-controls { width: 100%;}
+
+.ui-radio { width: 50%;}
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/index.html b/tv/tct-behavior-tests/tests/2D3DAnimation/index.html
new file mode 100755 (executable)
index 0000000..e4f558a
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/SpinningBox.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+    <script src="js/khronos/webgl-utils.js"></script>
+    <script src="js/khronos/webgl-debug.js"></script>
+    <script src="js/khronos/J3DI.js"></script>
+    <script src="js/khronos/J3DIMath.js"></script>
+    <script id="vshader" type="x-shader/x-vertex">
+        uniform mat4 u_modelViewProjMatrix;
+        uniform mat4 u_normalMatrix;
+        uniform vec3 lightDir;
+
+        attribute vec3 vNormal;
+        attribute vec4 vColor;
+        attribute vec4 vPosition;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_Position = u_modelViewProjMatrix * vPosition;
+        v_Color = vColor;
+        vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
+        v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
+        }
+    </script>
+    <script id="fshader" type="x-shader/x-fragment">
+        precision mediump float;
+
+        varying float v_Dot;
+        varying vec4 v_Color;
+
+        void main()
+        {
+        gl_FragColor = vec4(v_Color.xyz * v_Dot, v_Color.a);
+        }
+    </script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="header">
+    <h1 id="main_page_title"></h1>
+</div>
+<div data-role= "content">
+    <div id="viewArea">
+        <div id="mainTester">
+            <canvas id="canvas" width="330" height="300">
+                Not support the &lt;canvas&gt;&gt; element. Ouch! failed!
+            </canvas>
+        </div>
+    </div>
+    <div class="containing-element">
+        <label for="flip-1">Status</label>
+        <select name="flip-1" id="flip-1" data-role="slider">
+            <option value="paused">Pause</option>
+            <option value="running" selected>Play</option>
+        </select>
+        <fieldset data-role="controlgroup" data-type="horizontal">
+            <legend>Direction</legend>
+            <input type="radio" name="radio-choice-2" id="direction-1" value="right" checked="checked" />
+            <label for="direction-1">To-Right</label>
+            <input type="radio" name="radio-choice-2" id="direction-2" value="left" />
+            <label for="direction-2">To-Left</label>
+        </fieldset>
+        <label for="slider-1">Size</label>
+        <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="1" max="5" value="3" data-show-value="true" class="hideButton">
+        <label for="speed-1">Speed</label>
+        <input type="range" name="speed-1" id="speed-1" data-highlight="true" min="1" max="10" value="5" data-show-value="true" class="hideButton">
+    </div>
+</div>
+<div data-role="footer" data-position="fixed">
+</div>
+<div data-role="popup" id="popup_info">
+  <font class="fontSize">
+    <p>Test Purpose: </p>
+    <p>Verifies the 3D cube is drawn with red, yellow, blue, green and light blue colors, rotate smoothly and correctly. And tests the functionality of play and pause, rotate direction left or right, size of the cube from 1 to 5, rotate speed from 1 to 10 levels.</p>
+    <p>Test Step: </p>
+    <ol>
+      <li>Click the "Status" slider to play or pause the animation.</li>
+      <li>Click the "Direction" buttons to change the rotation direction.</li>
+      <li>Click the "Size" slider to change the animation size.</li>
+      <li>Click the "Speed" slider to change the rotation speed.</li>
+    </ol>
+    <p>Expected Result: </p>
+    <p>Test passes if all the check points work well during rotation.</p>
+  </font>
+</div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/COPYING b/tv/tct-behavior-tests/tests/2D3DAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..c009395
--- /dev/null
@@ -0,0 +1,94 @@
+The SpinningBox.js comes from
+https://github.com/KhronosGroup/WebGL
+with some modifications.
+
++    var incAngle = 0;
++    var currentAngle = 0;
++    var bakAngle = 0;
++    var viewDistance = 18;
++    var requestId;
++    var canvas;
+
+     function reshape(gl)
+     {
+-        var canvas = document.getElementById('example');
++        var canvas = document.getElementById('canvas');
+-        var windowWidth = window.innerWidth - 20;
+-        var windowHeight = window.innerHeight - 40;
+-        if (windowWidth == width && windowHeight == height)
+-            return;
+
+-        width = windowWidth;
+-        height = windowHeight;
+-        canvas.width = width;
+-        canvas.height = height;
+
+-        gl.viewport(0, 0, width, height);
++        gl.viewport(0, 0, canvas.width, canvas.height);
+         g.perspectiveMatrix = new J3DIMatrix4();
+-        g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
++        g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+-        g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
++        g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+
+The jquery extension code of main.js(line 251~376) comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
++            setSize(value);
++            if (parseInt(newValue, 10) != 3) {
++                testFlag.size = true;
++                checkEnable();
++            }
++        } else if (ID == "speed-1") {
++            setSpeed(parseInt(newValue, 10));
++            if (parseInt(newValue, 10) != 5) {
++                testFlag.speed = true;
++                checkEnable();
++            }
++        } else if (ID == "flip-1") {
++            if (newValue == "0") {
++                stop();
++                $("input[type='radio']").checkboxradio('disable');
++                $("#slider-1").slider('disable');
++                $("#speed-1").slider('disable');
++                testFlag.status = true;
++                checkEnable();
++            } else if (newValue == "1"){
++                if (!isInit) {
++                    reStart();
++                    $("input[type='radio']").checkboxradio('enable');
++                    $("#slider-1").slider('enable');
++                    $("#speed-1").slider('enable');
++                } else {
++                    isInit = false;
++                }
++            }
++        }
+
+        if ( o.popupEnabled ) {
+            this._positionPopup();
+-           this._popup.html( newValue );
++           this._popup.html( Math.round(newValue) );
+        }
+
+        if ( o.showValue ) {
+-           this._handleText.html( newValue );
++           this._handleText.html( Math.round(newValue) );
+        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
+
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js
new file mode 100755 (executable)
index 0000000..7494f86
--- /dev/null
@@ -0,0 +1,141 @@
+var g = {}; // globals
+
+var incAngle = 0;
+var currentAngle = 0;
+var bakAngle = 0;
+var viewDistance = 18;
+var requestId;
+
+var canvas;
+
+
+function init() {
+    // Initialize
+    var gl = initWebGL(
+        // The id of the Canvas Element
+        "canvas");
+    if (!gl) {
+        return;
+    }
+
+    g.program = simpleSetup(
+        gl,
+        // The ids of the vertex and fragment shaders
+        "vshader", "fshader",
+        // The vertex attribute names used by the shaders.
+        // The order they appear here corresponds to their index
+        // used later.
+        [ "vNormal", "vColor", "vPosition"],
+        // The clear color and depth values
+        [ 0, 0, 0, 1 ], 10000);
+
+    // Set up a uniform variable for the shaders
+    gl.uniform3f(gl.getUniformLocation(g.program, "lightDir"), 0, 0, 1);
+
+    // Create a box. On return 'gl' contains a 'box' property with
+    // the BufferObjects containing the arrays for vertices,
+    // normals, texture coords, and indices.
+    g.box = makeBox(gl);
+
+    // Set up the array of colors for the cube's faces
+    var colors = new Uint8Array(
+        [  0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,     // v0-v1-v2-v3 front
+        1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,     // v0-v3-v4-v5 right
+        0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,     // v0-v5-v6-v1 top
+        1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,     // v1-v6-v7-v2 left
+        1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,     // v7-v4-v3-v2 bottom
+        0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1 ]    // v4-v7-v6-v5 back
+        );
+
+    // Set up the vertex buffer for the colors
+    g.box.colorObject = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+
+    // Create some matrices to use later and save their locations in the shaders
+    g.mvMatrix = new J3DIMatrix4();
+    g.u_normalMatrixLoc = gl.getUniformLocation(g.program, "u_normalMatrix");
+    g.normalMatrix = new J3DIMatrix4();
+    g.u_modelViewProjMatrixLoc =
+    gl.getUniformLocation(g.program, "u_modelViewProjMatrix");
+    g.mvpMatrix = new J3DIMatrix4();
+
+    // Enable all of the vertex attribute arrays.
+    gl.enableVertexAttribArray(0);
+    gl.enableVertexAttribArray(1);
+    gl.enableVertexAttribArray(2);
+
+    // Set up all the vertex attributes for vertices, normals and colors
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.vertexObject);
+    gl.vertexAttribPointer(2, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.normalObject);
+    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, false, 0, 0);
+
+    // Bind the index array
+    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g.box.indexObject);
+
+    return gl;
+}
+
+//width = -1;
+//height = -1;
+//var requestId;
+
+function reshape(gl) {
+    //var canvas = document.getElementById('example');
+    var canvas = document.getElementById('canvas');
+    //var windowWidth = window.innerWidth - 20;
+    //var windowHeight = window.innerHeight - 40;
+    //if (windowWidth == width && windowHeight == height)
+    //    return;
+
+    //width = windowWidth;
+    //height = windowHeight;
+    //canvas.width = width;
+    //canvas.height = height;
+
+    // Set the viewport and projection matrix for the scene
+    //gl.viewport(0, 0, width, height);
+    gl.viewport(0, 0, canvas.width, canvas.height);
+    g.perspectiveMatrix = new J3DIMatrix4();
+    //g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
+    g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+    //g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
+    g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+}
+
+function drawPicture(gl) {
+    // Make sure the canvas is sized correctly.
+    reshape(gl);
+
+    gl.clearColor(1.0, 1.0, 1.0, 1.0);
+    // Clear the canvas
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+    // Make a model/view matrix.
+    g.mvMatrix.makeIdentity();
+    g.mvMatrix.rotate(20, 1, 0, 0);
+    g.mvMatrix.rotate(currentAngle, 0, 1, 0);
+
+    // Construct the normal matrix from the model-view matrix and pass it in
+    g.normalMatrix.load(g.mvMatrix);
+    g.normalMatrix.invert();
+    g.normalMatrix.transpose();
+    g.normalMatrix.setUniform(gl, g.u_normalMatrixLoc, false);
+
+    // Construct the model-view * projection matrix and pass it in
+    g.mvpMatrix.load(g.perspectiveMatrix);
+    g.mvpMatrix.multiply(g.mvMatrix);
+    g.mvpMatrix.setUniform(gl, g.u_modelViewProjMatrixLoc, false);
+
+    // Draw the cube
+    gl.drawElements(gl.TRIANGLES, g.box.numIndices, gl.UNSIGNED_BYTE, 0);
+
+    currentAngle += incAngle;
+    if (currentAngle > 360)
+    currentAngle -= 360;
+}
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING b/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING
new file mode 100755 (executable)
index 0000000..5b85dfd
--- /dev/null
@@ -0,0 +1,26 @@
+The files come from https://www.khronos.org/registry/webgl/sdk/demos/webkit/resources/
+
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js
new file mode 100755 (executable)
index 0000000..597417b
--- /dev/null
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+//
+// initWebGL
+//
+// Initialize the Canvas element with the passed name as a WebGL object and return the
+// WebGLRenderingContext.
+function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    var canvas = document.getElementById(canvasName);
+    return gl = WebGLUtils.setupWebGL(canvas);
+}
+
+function log(msg) {
+    if (window.console && window.console.log) {
+        window.console.log(msg);
+    }
+}
+
+// Load shaders with the passed names and create a program with them. Return this program
+// in the 'program' property of the returned context.
+//
+// For each string in the passed attribs array, bind an attrib with that name at that index.
+// Once the attribs are bound, link the program and then use it.
+//
+// Set the clear color to the passed array (4 values) and set the clear depth to the passed value.
+// Enable depth testing and blending with a blend func of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA)
+//
+// A console function is added to the context: console(string). This can be replaced
+// by the caller. By default, it maps to the window.console() function on WebKit and to
+// an empty function on other browsers.
+//
+function simpleSetup(gl, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    // create our shaders
+    var vertexShader = loadShader(gl, vshader);
+    var fragmentShader = loadShader(gl, fshader);
+
+    // Create the program object
+    var program = gl.createProgram();
+
+    // Attach our two shaders to the program
+    gl.attachShader (program, vertexShader);
+    gl.attachShader (program, fragmentShader);
+
+    // Bind attributes
+    for (var i = 0; i < attribs.length; ++i)
+        gl.bindAttribLocation (program, i, attribs[i]);
+
+    // Link the program
+    gl.linkProgram(program);
+
+    // Check the link status
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked && !gl.isContextLost()) {
+        // something went wrong with the link
+        var error = gl.getProgramInfoLog (program);
+        log("Error in program linking:"+error);
+
+        gl.deleteProgram(program);
+        gl.deleteProgram(fragmentShader);
+        gl.deleteProgram(vertexShader);
+
+        return null;
+    }
+
+    gl.useProgram(program);
+
+    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
+    gl.clearDepth(clearDepth);
+
+    gl.enable(gl.DEPTH_TEST);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+    return program;
+}
+
+//
+// loadShader
+//
+// 'shaderId' is the id of a <script> element containing the shader source string.
+// Load this shader and return the WebGLShader object corresponding to it.
+//
+function loadShader(ctx, shaderId)
+{
+    var shaderScript = document.getElementById(shaderId);
+    if (!shaderScript) {
+        log("*** Error: shader script '"+shaderId+"' not found");
+        return null;
+    }
+
+    if (shaderScript.type == "x-shader/x-vertex")
+        var shaderType = ctx.VERTEX_SHADER;
+    else if (shaderScript.type == "x-shader/x-fragment")
+        var shaderType = ctx.FRAGMENT_SHADER;
+    else {
+        log("*** Error: shader script '"+shaderId+"' of undefined type '"+shaderScript.type+"'");
+        return null;
+    }
+
+    // Create the shader object
+    var shader = ctx.createShader(shaderType);
+
+    // Load the shader source
+    ctx.shaderSource(shader, shaderScript.text);
+
+    // Compile the shader
+    ctx.compileShader(shader);
+
+    // Check the compile status
+    var compiled = ctx.getShaderParameter(shader, ctx.COMPILE_STATUS);
+    if (!compiled && !ctx.isContextLost()) {
+        // Something went wrong during compilation; get the error
+        var error = ctx.getShaderInfoLog(shader);
+        log("*** Error compiling shader '"+shaderId+"':"+error);
+        ctx.deleteShader(shader);
+        return null;
+    }
+
+    return shader;
+}
+
+//
+// makeBox
+//
+// Create a box with vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeBox(ctx)
+{
+    // box
+    //    v6----- v5
+    //   /|      /|
+    //  v1------v0|
+    //  | |     | |
+    //  | |v7---|-|v4
+    //  |/      |/
+    //  v2------v3
+    //
+    // vertex coords array
+    var vertices = new Float32Array(
+        [  1, 1, 1,  -1, 1, 1,  -1,-1, 1,   1,-1, 1,    // v0-v1-v2-v3 front
+           1, 1, 1,   1,-1, 1,   1,-1,-1,   1, 1,-1,    // v0-v3-v4-v5 right
+           1, 1, 1,   1, 1,-1,  -1, 1,-1,  -1, 1, 1,    // v0-v5-v6-v1 top
+          -1, 1, 1,  -1, 1,-1,  -1,-1,-1,  -1,-1, 1,    // v1-v6-v7-v2 left
+          -1,-1,-1,   1,-1,-1,   1,-1, 1,  -1,-1, 1,    // v7-v4-v3-v2 bottom
+           1,-1,-1,  -1,-1,-1,  -1, 1,-1,   1, 1,-1 ]   // v4-v7-v6-v5 back
+    );
+
+    // normal array
+    var normals = new Float32Array(
+        [  0, 0, 1,   0, 0, 1,   0, 0, 1,   0, 0, 1,     // v0-v1-v2-v3 front
+           1, 0, 0,   1, 0, 0,   1, 0, 0,   1, 0, 0,     // v0-v3-v4-v5 right
+           0, 1, 0,   0, 1, 0,   0, 1, 0,   0, 1, 0,     // v0-v5-v6-v1 top
+          -1, 0, 0,  -1, 0, 0,  -1, 0, 0,  -1, 0, 0,     // v1-v6-v7-v2 left
+           0,-1, 0,   0,-1, 0,   0,-1, 0,   0,-1, 0,     // v7-v4-v3-v2 bottom
+           0, 0,-1,   0, 0,-1,   0, 0,-1,   0, 0,-1 ]    // v4-v7-v6-v5 back
+       );
+
+
+    // texCoord array
+    var texCoords = new Float32Array(
+        [  1, 1,   0, 1,   0, 0,   1, 0,    // v0-v1-v2-v3 front
+           0, 1,   0, 0,   1, 0,   1, 1,    // v0-v3-v4-v5 right
+           1, 0,   1, 1,   0, 1,   0, 0,    // v0-v5-v6-v1 top
+           1, 1,   0, 1,   0, 0,   1, 0,    // v1-v6-v7-v2 left
+           0, 0,   1, 0,   1, 1,   0, 1,    // v7-v4-v3-v2 bottom
+           0, 0,   1, 0,   1, 1,   0, 1 ]   // v4-v7-v6-v5 back
+       );
+
+    // index array
+    var indices = new Uint8Array(
+        [  0, 1, 2,   0, 2, 3,    // front
+           4, 5, 6,   4, 6, 7,    // right
+           8, 9,10,   8,10,11,    // top
+          12,13,14,  12,14,15,    // left
+          16,17,18,  16,18,19,    // bottom
+          20,21,22,  20,22,23 ]   // back
+      );
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, normals, ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, texCoords, ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, vertices, ctx.STATIC_DRAW);
+
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, indices, ctx.STATIC_DRAW);
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+
+    retval.numIndices = indices.length;
+
+    return retval;
+}
+
+//
+// makeSphere
+//
+// Create a sphere with the passed number of latitude and longitude bands and the passed radius.
+// Sphere has vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeSphere(ctx, radius, lats, longs)
+{
+    var geometryData = [ ];
+    var normalData = [ ];
+    var texCoordData = [ ];
+    var indexData = [ ];
+
+    for (var latNumber = 0; latNumber <= lats; ++latNumber) {
+        for (var longNumber = 0; longNumber <= longs; ++longNumber) {
+            var theta = latNumber * Math.PI / lats;
+            var phi = longNumber * 2 * Math.PI / longs;
+            var sinTheta = Math.sin(theta);
+            var sinPhi = Math.sin(phi);
+            var cosTheta = Math.cos(theta);
+            var cosPhi = Math.cos(phi);
+
+            var x = cosPhi * sinTheta;
+            var y = cosTheta;
+            var z = sinPhi * sinTheta;
+            var u = 1-(longNumber/longs);
+            var v = latNumber/lats;
+
+            normalData.push(x);
+            normalData.push(y);
+            normalData.push(z);
+            texCoordData.push(u);
+            texCoordData.push(v);
+            geometryData.push(radius * x);
+            geometryData.push(radius * y);
+            geometryData.push(radius * z);
+        }
+    }
+
+    for (var latNumber = 0; latNumber < lats; ++latNumber) {
+        for (var longNumber = 0; longNumber < longs; ++longNumber) {
+            var first = (latNumber * (longs+1)) + longNumber;
+            var second = first + longs + 1;
+            indexData.push(first);
+            indexData.push(second);
+            indexData.push(first+1);
+
+            indexData.push(second);
+            indexData.push(second+1);
+            indexData.push(first+1);
+        }
+    }
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
+
+    retval.numIndices = indexData.length;
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
+
+    return retval;
+}
+
+// Array of Objects curently loading
+var g_loadingObjects = [];
+
+// Clears all the Objects currently loading.
+// This is used to handle context lost events.
+function clearLoadingObjects() {
+    for (var ii = 0; ii < g_loadingObjects.length; ++ii) {
+        g_loadingObjects[ii].onreadystatechange = undefined;
+    }
+    g_loadingObjects = [];
+}
+
+//
+// loadObj
+//
+// Load a .obj file from the passed URL. Return an object with a 'loaded' property set to false.
+// When the object load is complete, the 'loaded' property becomes true and the following
+// properties are set:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function loadObj(ctx, url)
+{
+    var obj = { loaded : false };
+    obj.ctx = ctx;
+    var req = new XMLHttpRequest();
+    req.obj = obj;
+    g_loadingObjects.push(req);
+    req.onreadystatechange = function () { processLoadObj(req) };
+    req.open("GET", url, true);
+    req.send(null);
+    return obj;
+}
+
+function processLoadObj(req)
+{
+    log("req="+req)
+    // only if req shows "complete"
+    if (req.readyState == 4) {
+        g_loadingObjects.splice(g_loadingObjects.indexOf(req), 1);
+        doLoadObj(req.obj, req.responseText);
+    }
+}
+
+function doLoadObj(obj, text)
+{
+    vertexArray = [ ];
+    normalArray = [ ];
+    textureArray = [ ];
+    indexArray = [ ];
+
+    var vertex = [ ];
+    var normal = [ ];
+    var texture = [ ];
+    var facemap = { };
+    var index = 0;
+
+    // This is a map which associates a range of indices with a name
+    // The name comes from the 'g' tag (of the form "g NAME"). Indices
+    // are part of one group until another 'g' tag is seen. If any indices
+    // come before a 'g' tag, it is given the group name "_unnamed"
+    // 'group' is an object whose property names are the group name and
+    // whose value is a 2 element array with [<first index>, <num indices>]
+    var groups = { };
+    var currentGroup = [-1, 0];
+    groups["_unnamed"] = currentGroup;
+
+    var lines = text.split("\n");
+    for (var lineIndex in lines) {
+        var line = lines[lineIndex].replace(/[ \t]+/g, " ").replace(/\s\s*$/, "");
+
+        // ignore comments
+        if (line[0] == "#")
+            continue;
+
+        var array = line.split(" ");
+        if (array[0] == "g") {
+            // new group
+            currentGroup = [indexArray.length, 0];
+            groups[array[1]] = currentGroup;
+        }
+        else if (array[0] == "v") {
+            // vertex
+            vertex.push(parseFloat(array[1]));
+            vertex.push(parseFloat(array[2]));
+            vertex.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "vt") {
+            // normal
+            texture.push(parseFloat(array[1]));
+            texture.push(parseFloat(array[2]));
+        }
+        else if (array[0] == "vn") {
+            // normal
+            normal.push(parseFloat(array[1]));
+            normal.push(parseFloat(array[2]));
+            normal.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "f") {
+            // face
+            if (array.length != 4) {
+                log("*** Error: face '"+line+"' not handled");
+                continue;
+            }
+
+            for (var i = 1; i < 4; ++i) {
+                if (!(array[i] in facemap)) {
+                    // add a new entry to the map and arrays
+                    var f = array[i].split("/");
+                    var vtx, nor, tex;
+
+                    if (f.length == 1) {
+                        vtx = parseInt(f[0]) - 1;
+                        nor = vtx;
+                        tex = vtx;
+                    }
+                    else if (f.length = 3) {
+                        vtx = parseInt(f[0]) - 1;
+                        tex = parseInt(f[1]) - 1;
+                        nor = parseInt(f[2]) - 1;
+                    }
+                    else {
+                        obj.ctx.console.log("*** Error: did not understand face '"+array[i]+"'");
+                        return null;
+                    }
+
+                    // do the vertices
+                    var x = 0;
+                    var y = 0;
+                    var z = 0;
+                    if (vtx * 3 + 2 < vertex.length) {
+                        x = vertex[vtx*3];
+                        y = vertex[vtx*3+1];
+                        z = vertex[vtx*3+2];
+                    }
+                    vertexArray.push(x);
+                    vertexArray.push(y);
+                    vertexArray.push(z);
+
+                    // do the textures
+                    x = 0;
+                    y = 0;
+                    if (tex * 2 + 1 < texture.length) {
+                        x = texture[tex*2];
+                        y = texture[tex*2+1];
+                    }
+                    textureArray.push(x);
+                    textureArray.push(y);
+
+                    // do the normals
+                    x = 0;
+                    y = 0;
+                    z = 1;
+                    if (nor * 3 + 2 < normal.length) {
+                        x = normal[nor*3];
+                        y = normal[nor*3+1];
+                        z = normal[nor*3+2];
+                    }
+                    normalArray.push(x);
+                    normalArray.push(y);
+                    normalArray.push(z);
+
+                    facemap[array[i]] = index++;
+                }
+
+                indexArray.push(facemap[array[i]]);
+                currentGroup[1]++;
+            }
+        }
+    }
+
+    // set the VBOs
+    obj.normalObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.normalObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(normalArray), obj.ctx.STATIC_DRAW);
+
+    obj.texCoordObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.texCoordObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(textureArray), obj.ctx.STATIC_DRAW);
+
+    obj.vertexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.vertexObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(vertexArray), obj.ctx.STATIC_DRAW);
+
+    obj.numIndices = indexArray.length;
+    obj.indexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ELEMENT_ARRAY_BUFFER, obj.indexObject);
+    obj.ctx.bufferData(obj.ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexArray), obj.ctx.STREAM_DRAW);
+
+    obj.groups = groups;
+
+    obj.loaded = true;
+}
+
+// Array of images curently loading
+var g_loadingImages = [];
+
+// Clears all the images currently loading.
+// This is used to handle context lost events.
+function clearLoadingImages() {
+    for (var ii = 0; ii < g_loadingImages.length; ++ii) {
+        g_loadingImages[ii].onload = undefined;
+    }
+    g_loadingImages = [];
+}
+
+//
+// loadImageTexture
+//
+// Load the image at the passed url, place it in a new WebGLTexture object and return the WebGLTexture.
+//
+function loadImageTexture(ctx, url)
+{
+    var texture = ctx.createTexture();
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(ctx.TEXTURE_2D, 0, ctx.RGBA, 1, 1, 0, ctx.RGBA, ctx.UNSIGNED_BYTE, null);
+    var image = new Image();
+    g_loadingImages.push(image);
+    image.onload = function() { doLoadImageTexture(ctx, image, texture) }
+    image.src = url;
+    return texture;
+}
+
+function doLoadImageTexture(ctx, image, texture)
+{
+    g_loadingImages.splice(g_loadingImages.indexOf(image), 1);
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(
+        ctx.TEXTURE_2D, 0, ctx.RGBA, ctx.RGBA, ctx.UNSIGNED_BYTE, image);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MAG_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MIN_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.CLAMP_TO_EDGE);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.CLAMP_TO_EDGE);
+    //ctx.generateMipmap(ctx.TEXTURE_2D)
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+}
+
+//
+// Framerate object
+//
+// This object keeps track of framerate and displays it as the innerHTML text of the
+// HTML element with the passed id. Once created you call snapshot at the end
+// of every rendering cycle. Every 500ms the framerate is updated in the HTML element.
+//
+Framerate = function(id)
+{
+    this.numFramerates = 10;
+    this.framerateUpdateInterval = 500;
+    this.id = id;
+
+    this.renderTime = -1;
+    this.framerates = [ ];
+    self = this;
+    var fr = function() { self.updateFramerate() }
+    setInterval(fr, this.framerateUpdateInterval);
+}
+
+Framerate.prototype.updateFramerate = function()
+{
+    var tot = 0;
+    for (var i = 0; i < this.framerates.length; ++i)
+        tot += this.framerates[i];
+
+    var framerate = tot / this.framerates.length;
+    framerate = Math.round(framerate);
+    document.getElementById(this.id).innerHTML = "Framerate:"+framerate+"fps";
+}
+
+Framerate.prototype.snapshot = function()
+{
+    if (this.renderTime < 0)
+        this.renderTime = new Date().getTime();
+    else {
+        var newTime = new Date().getTime();
+        var t = newTime - this.renderTime;
+        if (t == 0)
+            return;
+        var framerate = 1000/t;
+        this.framerates.push(framerate);
+        while (this.framerates.length > this.numFramerates)
+            this.framerates.shift();
+        this.renderTime = newTime;
+    }
+}
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js
new file mode 100755 (executable)
index 0000000..b3e5b64
--- /dev/null
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ // J3DI (Jedi) - A support library for WebGL.
+
+/*
+    J3DI Math Classes. Currently includes:
+
+        J3DIMatrix4 - A 4x4 Matrix
+*/
+
+/*
+    J3DIMatrix4 class
+
+    This class implements a 4x4 matrix. It has functions which duplicate the
+    functionality of the OpenGL matrix stack and glut functions. On browsers
+    that support it, CSSMatrix is used to accelerate operations.
+
+    IDL:
+
+    [
+        Constructor(in J3DIMatrix4 matrix),                 // copy passed matrix into new J3DIMatrix4
+        Constructor(in sequence<float> array)               // create new J3DIMatrix4 with 16 floats (row major)
+        Constructor()                                       // create new J3DIMatrix4 with identity matrix
+    ]
+    interface J3DIMatrix4 {
+        void load(in J3DIMatrix4 matrix);                   // copy the values from the passed matrix
+        void load(in sequence<float> array);                // copy 16 floats into the matrix
+        sequence<float> getAsArray();                       // return the matrix as an array of 16 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void setUniform(in WebGLRenderingContext ctx,       // Send the matrix to the passed uniform location in the passed context
+                        in WebGLUniformLocation loc,
+                        in boolean transpose);
+        void makeIdentity();                                // replace the matrix with identity
+        void transpose();                                   // replace the matrix with its transpose
+        void invert();                                      // replace the matrix with its inverse
+
+        void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right
+        void translate(in J3DVector3 v);                    // multiply the matrix by passed translation values on the right
+        void scale(in float x, in float y, in float z);     // multiply the matrix by passed scale values on the right
+        void scale(in J3DVector3 v);                        // multiply the matrix by passed scale values on the right
+        void rotate(in float angle,                         // multiply the matrix by passed rotation values on the right
+                    in float x, in float y, in float z);    // (angle is in degrees)
+        void rotate(in float angle, in J3DVector3 v);       // multiply the matrix by passed rotation values on the right
+                                                            // (angle is in degrees)
+        void multiply(in CanvasMatrix matrix);              // multiply the matrix by the passed matrix on the right
+        void divide(in float divisor);                      // divide the matrix by the passed divisor
+        void ortho(in float left, in float right,           // multiply the matrix by the passed ortho values on the right
+                   in float bottom, in float top,
+                   in float near, in float far);
+        void frustum(in float left, in float right,         // multiply the matrix by the passed frustum values on the right
+                     in float bottom, in float top,
+                     in float near, in float far);
+        void perspective(in float fovy, in float aspect,    // multiply the matrix by the passed perspective values on the right
+                         in float zNear, in float zFar);
+        void lookat(in J3DVector3 eye,                      // multiply the matrix by the passed lookat
+                in J3DVector3 center,  in J3DVector3 up);   // values on the right
+         bool decompose(in J3DVector3 translate,            // decompose the matrix into the passed vector
+                        in J3DVector3 rotate,
+                        in J3DVector3 scale,
+                        in J3DVector3 skew,
+                        in sequence<float> perspective);
+    }
+
+    [
+        Constructor(in J3DVector3 vector),                  // copy passed vector into new J3DVector3
+        Constructor(in sequence<float> array)               // create new J3DVector3 with 3 floats from array
+        Constructor(in float x, in float y, in float z)     // create new J3DVector3 with 3 floats
+        Constructor()                                       // create new J3DVector3 with (0,0,0)
+    ]
+    interface J3DVector3 {
+        void load(in J3DVector3 vector);                    // copy the values from the passed vector
+        void load(in sequence<float> array);                // copy 3 floats into the vector from array
+        void load(in float x, in float y, in float z);      // copy 3 floats into the vector
+        sequence<float> getAsArray();                       // return the vector as an array of 3 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void multMatrix(in J3DIMatrix4 matrix);             // multiply the vector by the passed matrix (on the right)
+        float vectorLength();                               // return the length of the vector
+        float dot();                                        // return the dot product of the vector
+        void cross(in J3DVector3 v);                        // replace the vector with vector x v
+        void divide(in float divisor);                      // divide the vector by the passed divisor
+    }
+*/
+
+J3DIHasCSSMatrix = false;
+J3DIHasCSSMatrixCopy = false;
+/*
+if ("WebKitCSSMatrix" in window && ("media" in window && window.media.matchMedium("(-webkit-transform-3d)")) ||
+                                   ("styleMedia" in window && window.styleMedia.matchMedium("(-webkit-transform-3d)"))) {
+    J3DIHasCSSMatrix = true;
+    if ("copy" in WebKitCSSMatrix.prototype)
+        J3DIHasCSSMatrixCopy = true;
+}
+*/
+
+//  console.log("J3DIHasCSSMatrix="+J3DIHasCSSMatrix);
+//  console.log("J3DIHasCSSMatrixCopy="+J3DIHasCSSMatrixCopy);
+
+//
+// J3DIMatrix4
+//
+J3DIMatrix4 = function(m)
+{
+    if (J3DIHasCSSMatrix)
+        this.$matrix = new WebKitCSSMatrix;
+    else
+        this.$matrix = new Object;
+
+    if (typeof m == 'object') {
+        if ("length" in m && m.length >= 16) {
+            this.load(m);
+            return;
+        }
+        else if (m instanceof J3DIMatrix4) {
+            this.load(m);
+            return;
+        }
+    }
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.load = function()
+{
+    if (arguments.length == 1 && typeof arguments[0] == 'object') {
+        var matrix;
+
+        if (arguments[0] instanceof J3DIMatrix4) {
+            matrix = arguments[0].$matrix;
+
+            this.$matrix.m11 = matrix.m11;
+            this.$matrix.m12 = matrix.m12;
+            this.$matrix.m13 = matrix.m13;
+            this.$matrix.m14 = matrix.m14;
+
+            this.$matrix.m21 = matrix.m21;
+            this.$matrix.m22 = matrix.m22;
+            this.$matrix.m23 = matrix.m23;
+            this.$matrix.m24 = matrix.m24;
+
+            this.$matrix.m31 = matrix.m31;
+            this.$matrix.m32 = matrix.m32;
+            this.$matrix.m33 = matrix.m33;
+            this.$matrix.m34 = matrix.m34;
+
+            this.$matrix.m41 = matrix.m41;
+            this.$matrix.m42 = matrix.m42;
+            this.$matrix.m43 = matrix.m43;
+            this.$matrix.m44 = matrix.m44;
+            return;
+        }
+        else
+            matrix = arguments[0];
+
+        if ("length" in matrix && matrix.length >= 16) {
+            this.$matrix.m11 = matrix[0];
+            this.$matrix.m12 = matrix[1];
+            this.$matrix.m13 = matrix[2];
+            this.$matrix.m14 = matrix[3];
+
+            this.$matrix.m21 = matrix[4];
+            this.$matrix.m22 = matrix[5];
+            this.$matrix.m23 = matrix[6];
+            this.$matrix.m24 = matrix[7];
+
+            this.$matrix.m31 = matrix[8];
+            this.$matrix.m32 = matrix[9];
+            this.$matrix.m33 = matrix[10];
+            this.$matrix.m34 = matrix[11];
+
+            this.$matrix.m41 = matrix[12];
+            this.$matrix.m42 = matrix[13];
+            this.$matrix.m43 = matrix[14];
+            this.$matrix.m44 = matrix[15];
+            return;
+        }
+    }
+
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.getAsArray = function()
+{
+    return [
+        this.$matrix.m11, this.$matrix.m12, this.$matrix.m13, this.$matrix.m14,
+        this.$matrix.m21, this.$matrix.m22, this.$matrix.m23, this.$matrix.m24,
+        this.$matrix.m31, this.$matrix.m32, this.$matrix.m33, this.$matrix.m34,
+        this.$matrix.m41, this.$matrix.m42, this.$matrix.m43, this.$matrix.m44
+    ];
+}
+
+J3DIMatrix4.prototype.getAsFloat32Array = function()
+{
+    if (J3DIHasCSSMatrixCopy) {
+        var array = new Float32Array(16);
+        this.$matrix.copy(array);
+        return array;
+    }
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIMatrix4.prototype.setUniform = function(ctx, loc, transpose)
+{
+    if (J3DIMatrix4.setUniformArray == undefined) {
+        J3DIMatrix4.setUniformWebGLArray = new Float32Array(16);
+        J3DIMatrix4.setUniformArray = new Array(16);
+    }
+
+    if (J3DIHasCSSMatrixCopy)
+        this.$matrix.copy(J3DIMatrix4.setUniformWebGLArray);
+    else {
+        J3DIMatrix4.setUniformArray[0] = this.$matrix.m11;
+        J3DIMatrix4.setUniformArray[1] = this.$matrix.m12;
+        J3DIMatrix4.setUniformArray[2] = this.$matrix.m13;
+        J3DIMatrix4.setUniformArray[3] = this.$matrix.m14;
+        J3DIMatrix4.setUniformArray[4] = this.$matrix.m21;
+        J3DIMatrix4.setUniformArray[5] = this.$matrix.m22;
+        J3DIMatrix4.setUniformArray[6] = this.$matrix.m23;
+        J3DIMatrix4.setUniformArray[7] = this.$matrix.m24;
+        J3DIMatrix4.setUniformArray[8] = this.$matrix.m31;
+        J3DIMatrix4.setUniformArray[9] = this.$matrix.m32;
+        J3DIMatrix4.setUniformArray[10] = this.$matrix.m33;
+        J3DIMatrix4.setUniformArray[11] = this.$matrix.m34;
+        J3DIMatrix4.setUniformArray[12] = this.$matrix.m41;
+        J3DIMatrix4.setUniformArray[13] = this.$matrix.m42;
+        J3DIMatrix4.setUniformArray[14] = this.$matrix.m43;
+        J3DIMatrix4.setUniformArray[15] = this.$matrix.m44;
+
+        J3DIMatrix4.setUniformWebGLArray.set(J3DIMatrix4.setUniformArray);
+    }
+
+    ctx.uniformMatrix4fv(loc, transpose, J3DIMatrix4.setUniformWebGLArray);
+}
+
+J3DIMatrix4.prototype.makeIdentity = function()
+{
+    this.$matrix.m11 = 1;
+    this.$matrix.m12 = 0;
+    this.$matrix.m13 = 0;
+    this.$matrix.m14 = 0;
+
+    this.$matrix.m21 = 0;
+    this.$matrix.m22 = 1;
+    this.$matrix.m23 = 0;
+    this.$matrix.m24 = 0;
+
+    this.$matrix.m31 = 0;
+    this.$matrix.m32 = 0;
+    this.$matrix.m33 = 1;
+    this.$matrix.m34 = 0;
+
+    this.$matrix.m41 = 0;
+    this.$matrix.m42 = 0;
+    this.$matrix.m43 = 0;
+    this.$matrix.m44 = 1;
+}
+
+J3DIMatrix4.prototype.transpose = function()
+{
+    var tmp = this.$matrix.m12;
+    this.$matrix.m12 = this.$matrix.m21;
+    this.$matrix.m21 = tmp;
+
+    tmp = this.$matrix.m13;
+    this.$matrix.m13 = this.$matrix.m31;
+    this.$matrix.m31 = tmp;
+
+    tmp = this.$matrix.m14;
+    this.$matrix.m14 = this.$matrix.m41;
+    this.$matrix.m41 = tmp;
+
+    tmp = this.$matrix.m23;
+    this.$matrix.m23 = this.$matrix.m32;
+    this.$matrix.m32 = tmp;
+
+    tmp = this.$matrix.m24;
+    this.$matrix.m24 = this.$matrix.m42;
+    this.$matrix.m42 = tmp;
+
+    tmp = this.$matrix.m34;
+    this.$matrix.m34 = this.$matrix.m43;
+    this.$matrix.m43 = tmp;
+}
+
+J3DIMatrix4.prototype.invert = function()
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.inverse();
+        return;
+    }
+
+    // Calculate the 4x4 determinant
+    // If the determinant is zero,
+    // then the inverse matrix is not unique.
+    var det = this._determinant4x4();
+
+    if (Math.abs(det) < 1e-8)
+        return null;
+
+    this._makeAdjoint();
+
+    // Scale the adjoint matrix to get the inverse
+    this.$matrix.m11 /= det;
+    this.$matrix.m12 /= det;
+    this.$matrix.m13 /= det;
+    this.$matrix.m14 /= det;
+
+    this.$matrix.m21 /= det;
+    this.$matrix.m22 /= det;
+    this.$matrix.m23 /= det;
+    this.$matrix.m24 /= det;
+
+    this.$matrix.m31 /= det;
+    this.$matrix.m32 /= det;
+    this.$matrix.m33 /= det;
+    this.$matrix.m34 /= det;
+
+    this.$matrix.m41 /= det;
+    this.$matrix.m42 /= det;
+    this.$matrix.m43 /= det;
+    this.$matrix.m44 /= det;
+}
+
+J3DIMatrix4.prototype.translate = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 0;
+        if (y == undefined)
+            y = 0;
+        if (z == undefined)
+            z = 0;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.translate(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m41 = x;
+    matrix.$matrix.m42 = y;
+    matrix.$matrix.m43 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.scale = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 1;
+        if (z == undefined) {
+            if (y == undefined) {
+                y = x;
+                z = x;
+            }
+            else
+                z = 1;
+        }
+        else if (y == undefined)
+            y = x;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.scale(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = x;
+    matrix.$matrix.m22 = y;
+    matrix.$matrix.m33 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.rotate = function(angle,x,y,z)
+{
+    // Forms are (angle, x,y,z), (angle,vector), (angleX, angleY, angleZ), (angle)
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (arguments.length == 1) {
+            x = 0;
+            y = 0;
+            z = 1;
+        }
+        else if (arguments.length == 3) {
+            this.rotate(angle, 1,0,0); // about X axis
+            this.rotate(x, 0,1,0); // about Y axis
+            this.rotate(y, 0,0,1); // about Z axis
+            return;
+        }
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.rotateAxisAngle(x, y, z, angle);
+        return;
+    }
+
+    // angles are in degrees. Switch to radians
+    angle = angle / 180 * Math.PI;
+
+    angle /= 2;
+    var sinA = Math.sin(angle);
+    var cosA = Math.cos(angle);
+    var sinA2 = sinA * sinA;
+
+    // normalize
+    var len = Math.sqrt(x * x + y * y + z * z);
+    if (len == 0) {
+        // bad vector, just use something reasonable
+        x = 0;
+        y = 0;
+        z = 1;
+    } else if (len != 1) {
+        x /= len;
+        y /= len;
+        z /= len;
+    }
+
+    var mat = new J3DIMatrix4();
+
+    // optimize case where axis is along major axis
+    if (x == 1 && y == 0 && z == 0) {
+        mat.$matrix.m11 = 1;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 2 * sinA * cosA;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = -2 * sinA * cosA;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 1 && z == 0) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = -2 * sinA * cosA;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 2 * sinA * cosA;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 0 && z == 1) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 2 * sinA * cosA;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = -2 * sinA * cosA;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else {
+        var x2 = x*x;
+        var y2 = y*y;
+        var z2 = z*z;
+
+        mat.$matrix.m11 = 1 - 2 * (y2 + z2) * sinA2;
+        mat.$matrix.m12 = 2 * (x * y * sinA2 + z * sinA * cosA);
+        mat.$matrix.m13 = 2 * (x * z * sinA2 - y * sinA * cosA);
+        mat.$matrix.m21 = 2 * (y * x * sinA2 - z * sinA * cosA);
+        mat.$matrix.m22 = 1 - 2 * (z2 + x2) * sinA2;
+        mat.$matrix.m23 = 2 * (y * z * sinA2 + x * sinA * cosA);
+        mat.$matrix.m31 = 2 * (z * x * sinA2 + y * sinA * cosA);
+        mat.$matrix.m32 = 2 * (z * y * sinA2 - x * sinA * cosA);
+        mat.$matrix.m33 = 1 - 2 * (x2 + y2) * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    }
+    this.multiply(mat);
+}
+
+J3DIMatrix4.prototype.multiply = function(mat)
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.multiply(mat.$matrix);
+        return;
+    }
+
+    var m11 = (mat.$matrix.m11 * this.$matrix.m11 + mat.$matrix.m12 * this.$matrix.m21
+               + mat.$matrix.m13 * this.$matrix.m31 + mat.$matrix.m14 * this.$matrix.m41);
+    var m12 = (mat.$matrix.m11 * this.$matrix.m12 + mat.$matrix.m12 * this.$matrix.m22
+               + mat.$matrix.m13 * this.$matrix.m32 + mat.$matrix.m14 * this.$matrix.m42);
+    var m13 = (mat.$matrix.m11 * this.$matrix.m13 + mat.$matrix.m12 * this.$matrix.m23
+               + mat.$matrix.m13 * this.$matrix.m33 + mat.$matrix.m14 * this.$matrix.m43);
+    var m14 = (mat.$matrix.m11 * this.$matrix.m14 + mat.$matrix.m12 * this.$matrix.m24
+               + mat.$matrix.m13 * this.$matrix.m34 + mat.$matrix.m14 * this.$matrix.m44);
+
+    var m21 = (mat.$matrix.m21 * this.$matrix.m11 + mat.$matrix.m22 * this.$matrix.m21
+               + mat.$matrix.m23 * this.$matrix.m31 + mat.$matrix.m24 * this.$matrix.m41);
+    var m22 = (mat.$matrix.m21 * this.$matrix.m12 + mat.$matrix.m22 * this.$matrix.m22
+               + mat.$matrix.m23 * this.$matrix.m32 + mat.$matrix.m24 * this.$matrix.m42);
+    var m23 = (mat.$matrix.m21 * this.$matrix.m13 + mat.$matrix.m22 * this.$matrix.m23
+               + mat.$matrix.m23 * this.$matrix.m33 + mat.$matrix.m24 * this.$matrix.m43);
+    var m24 = (mat.$matrix.m21 * this.$matrix.m14 + mat.$matrix.m22 * this.$matrix.m24
+               + mat.$matrix.m23 * this.$matrix.m34 + mat.$matrix.m24 * this.$matrix.m44);
+
+    var m31 = (mat.$matrix.m31 * this.$matrix.m11 + mat.$matrix.m32 * this.$matrix.m21
+               + mat.$matrix.m33 * this.$matrix.m31 + mat.$matrix.m34 * this.$matrix.m41);
+    var m32 = (mat.$matrix.m31 * this.$matrix.m12 + mat.$matrix.m32 * this.$matrix.m22
+               + mat.$matrix.m33 * this.$matrix.m32 + mat.$matrix.m34 * this.$matrix.m42);
+    var m33 = (mat.$matrix.m31 * this.$matrix.m13 + mat.$matrix.m32 * this.$matrix.m23
+               + mat.$matrix.m33 * this.$matrix.m33 + mat.$matrix.m34 * this.$matrix.m43);
+    var m34 = (mat.$matrix.m31 * this.$matrix.m14 + mat.$matrix.m32 * this.$matrix.m24
+               + mat.$matrix.m33 * this.$matrix.m34 + mat.$matrix.m34 * this.$matrix.m44);
+
+    var m41 = (mat.$matrix.m41 * this.$matrix.m11 + mat.$matrix.m42 * this.$matrix.m21
+               + mat.$matrix.m43 * this.$matrix.m31 + mat.$matrix.m44 * this.$matrix.m41);
+    var m42 = (mat.$matrix.m41 * this.$matrix.m12 + mat.$matrix.m42 * this.$matrix.m22
+               + mat.$matrix.m43 * this.$matrix.m32 + mat.$matrix.m44 * this.$matrix.m42);
+    var m43 = (mat.$matrix.m41 * this.$matrix.m13 + mat.$matrix.m42 * this.$matrix.m23
+               + mat.$matrix.m43 * this.$matrix.m33 + mat.$matrix.m44 * this.$matrix.m43);
+    var m44 = (mat.$matrix.m41 * this.$matrix.m14 + mat.$matrix.m42 * this.$matrix.m24
+               + mat.$matrix.m43 * this.$matrix.m34 + mat.$matrix.m44 * this.$matrix.m44);
+
+    this.$matrix.m11 = m11;
+    this.$matrix.m12 = m12;
+    this.$matrix.m13 = m13;
+    this.$matrix.m14 = m14;
+
+    this.$matrix.m21 = m21;
+    this.$matrix.m22 = m22;
+    this.$matrix.m23 = m23;
+    this.$matrix.m24 = m24;
+
+    this.$matrix.m31 = m31;
+    this.$matrix.m32 = m32;
+    this.$matrix.m33 = m33;
+    this.$matrix.m34 = m34;
+
+    this.$matrix.m41 = m41;
+    this.$matrix.m42 = m42;
+    this.$matrix.m43 = m43;
+    this.$matrix.m44 = m44;
+}
+
+J3DIMatrix4.prototype.divide = function(divisor)
+{
+    this.$matrix.m11 /= divisor;
+    this.$matrix.m12 /= divisor;
+    this.$matrix.m13 /= divisor;
+    this.$matrix.m14 /= divisor;
+
+    this.$matrix.m21 /= divisor;
+    this.$matrix.m22 /= divisor;
+    this.$matrix.m23 /= divisor;
+    this.$matrix.m24 /= divisor;
+
+    this.$matrix.m31 /= divisor;
+    this.$matrix.m32 /= divisor;
+    this.$matrix.m33 /= divisor;
+    this.$matrix.m34 /= divisor;
+
+    this.$matrix.m41 /= divisor;
+    this.$matrix.m42 /= divisor;
+    this.$matrix.m43 /= divisor;
+    this.$matrix.m44 /= divisor;
+
+}
+
+J3DIMatrix4.prototype.ortho = function(left, right, bottom, top, near, far)
+{
+    var tx = (left + right) / (left - right);
+    var ty = (top + bottom) / (top - bottom);
+    var tz = (far + near) / (far - near);
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = 2 / (left - right);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+    matrix.$matrix.m31 = 0;
+    matrix.$matrix.m32 = 0;
+    matrix.$matrix.m33 = -2 / (far - near);
+    matrix.$matrix.m34 = 0;
+    matrix.$matrix.m41 = tx;
+    matrix.$matrix.m42 = ty;
+    matrix.$matrix.m43 = tz;
+    matrix.$matrix.m44 = 1;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.frustum = function(left, right, bottom, top, near, far)
+{
+    var matrix = new J3DIMatrix4();
+    var A = (right + left) / (right - left);
+    var B = (top + bottom) / (top - bottom);
+    var C = -(far + near) / (far - near);
+    var D = -(2 * far * near) / (far - near);
+
+    matrix.$matrix.m11 = (2 * near) / (right - left);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 * near / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = A;
+    matrix.$matrix.m32 = B;
+    matrix.$matrix.m33 = C;
+    matrix.$matrix.m34 = -1;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = D;
+    matrix.$matrix.m44 = 0;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar)
+{
+    var top = Math.tan(fovy * Math.PI / 360) * zNear;
+    var bottom = -top;
+    var left = aspect * bottom;
+    var right = aspect * top;
+    this.frustum(left, right, bottom, top, zNear, zFar);
+}
+
+J3DIMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz)
+{
+    if (typeof eyez == 'object' && "length" in eyez) {
+        var t = eyez;
+        upx = t[0];
+        upy = t[1];
+        upz = t[2];
+
+        t = eyey;
+        centerx = t[0];
+        centery = t[1];
+        centerz = t[2];
+
+        t = eyex;
+        eyex = t[0];
+        eyey = t[1];
+        eyez = t[2];
+    }
+
+    var matrix = new J3DIMatrix4();
+
+    // Make rotation matrix
+
+    // Z vector
+    var zx = eyex - centerx;
+    var zy = eyey - centery;
+    var zz = eyez - centerz;
+    var mag = Math.sqrt(zx * zx + zy * zy + zz * zz);
+    if (mag) {
+        zx /= mag;
+        zy /= mag;
+        zz /= mag;
+    }
+
+    // Y vector
+    var yx = upx;
+    var yy = upy;
+    var yz = upz;
+
+    // X vector = Y cross Z
+    xx =  yy * zz - yz * zy;
+    xy = -yx * zz + yz * zx;
+    xz =  yx * zy - yy * zx;
+
+    // Recompute Y = Z cross X
+    yx = zy * xz - zz * xy;
+    yy = -zx * xz + zz * xx;
+    yx = zx * xy - zy * xx;
+
+    // cross product gives area of parallelogram, which is < 1.0 for
+    // non-perpendicular unit-length vectors; so normalize x, y here
+
+    mag = Math.sqrt(xx * xx + xy * xy + xz * xz);
+    if (mag) {
+        xx /= mag;
+        xy /= mag;
+        xz /= mag;
+    }
+
+    mag = Math.sqrt(yx * yx + yy * yy + yz * yz);
+    if (mag) {
+        yx /= mag;
+        yy /= mag;
+        yz /= mag;
+    }
+
+    matrix.$matrix.m11 = xx;
+    matrix.$matrix.m12 = xy;
+    matrix.$matrix.m13 = xz;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = yx;
+    matrix.$matrix.m22 = yy;
+    matrix.$matrix.m23 = yz;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = zx;
+    matrix.$matrix.m32 = zy;
+    matrix.$matrix.m33 = zz;
+    matrix.$matrix.m34 = 0;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = 0;
+    matrix.$matrix.m44 = 1;
+    matrix.translate(-eyex, -eyey, -eyez);
+
+    this.multiply(matrix);
+}
+
+// Returns true on success, false otherwise. All params are Array objects
+J3DIMatrix4.prototype.decompose = function(_translate, _rotate, _scale, _skew, _perspective)
+{
+    // Normalize the matrix.
+    if (this.$matrix.m44 == 0)
+        return false;
+
+    // Gather the params
+    var translate, rotate, scale, skew, perspective;
+
+    var translate = (_translate == undefined || !("length" in _translate)) ? new J3DIVector3 : _translate;
+    var rotate = (_rotate == undefined || !("length" in _rotate)) ? new J3DIVector3 : _rotate;
+    var scale = (_scale == undefined || !("length" in _scale)) ? new J3DIVector3 : _scale;
+    var skew = (_skew == undefined || !("length" in _skew)) ? new J3DIVector3 : _skew;
+    var perspective = (_perspective == undefined || !("length" in _perspective)) ? new Array(4) : _perspective;
+
+    var matrix = new J3DIMatrix4(this);
+
+    matrix.divide(matrix.$matrix.m44);
+
+    // perspectiveMatrix is used to solve for perspective, but it also provides
+    // an easy way to test for singularity of the upper 3x3 component.
+    var perspectiveMatrix = new J3DIMatrix4(matrix);
+
+    perspectiveMatrix.$matrix.m14 = 0;
+    perspectiveMatrix.$matrix.m24 = 0;
+    perspectiveMatrix.$matrix.m34 = 0;
+    perspectiveMatrix.$matrix.m44 = 1;
+
+    if (perspectiveMatrix._determinant4x4() == 0)
+        return false;
+
+    // First, isolate perspective.
+    if (matrix.$matrix.m14 != 0 || matrix.$matrix.m24 != 0 || matrix.$matrix.m34 != 0) {
+        // rightHandSide is the right hand side of the equation.
+        var rightHandSide = [ matrix.$matrix.m14, matrix.$matrix.m24, matrix.$matrix.m34, matrix.$matrix.m44 ];
+
+        // Solve the equation by inverting perspectiveMatrix and multiplying
+        // rightHandSide by the inverse.
+        var inversePerspectiveMatrix = new J3DIMatrix4(perspectiveMatrix);
+        inversePerspectiveMatrix.invert();
+        var transposedInversePerspectiveMatrix = new J3DIMatrix4(inversePerspectiveMatrix);
+        transposedInversePerspectiveMatrix.transpose();
+        transposedInversePerspectiveMatrix.multVecMatrix(perspective, rightHandSide);
+
+        // Clear the perspective partition
+        matrix.$matrix.m14 = matrix.$matrix.m24 = matrix.$matrix.m34 = 0
+        matrix.$matrix.m44 = 1;
+    }
+    else {
+        // No perspective.
+        perspective[0] = perspective[1] = perspective[2] = 0;
+        perspective[3] = 1;
+    }
+
+    // Next take care of translation
+    translate[0] = matrix.$matrix.m41
+    matrix.$matrix.m41 = 0
+    translate[1] = matrix.$matrix.m42
+    matrix.$matrix.m42 = 0
+    translate[2] = matrix.$matrix.m43
+    matrix.$matrix.m43 = 0
+
+    // Now get scale and shear. 'row' is a 3 element array of 3 component vectors
+    var row0 = new J3DIVector3(matrix.$matrix.m11, matrix.$matrix.m12, matrix.$matrix.m13);
+    var row1 = new J3DIVector3(matrix.$matrix.m21, matrix.$matrix.m22, matrix.$matrix.m23);
+    var row2 = new J3DIVector3(matrix.$matrix.m31, matrix.$matrix.m32, matrix.$matrix.m33);
+
+    // Compute X scale factor and normalize first row.
+    scale[0] = row0.vectorLength();
+    row0.divide(scale[0]);
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    skew[0] = row0.dot(row1);
+    row1.combine(row0, 1.0, -skew[0]);
+
+    // Now, compute Y scale and normalize 2nd row.
+    scale[1] = row1.vectorLength();
+    row1.divide(scale[1]);
+    skew[0] /= scale[1];
+
+    // Compute XZ and YZ shears, orthogonalize 3rd row
+    skew[1] = row1.dot(row2);
+    row2.combine(row0, 1.0, -skew[1]);
+    skew[2] = row1.dot(row2);
+    row2.combine(row1, 1.0, -skew[2]);
+
+    // Next, get Z scale and normalize 3rd row.
+    scale[2] = row2.vectorLength();
+    row2.divide(scale[2]);
+    skew[1] /= scale[2];
+    skew[2] /= scale[2];
+
+    // At this point, the matrix (in rows) is orthonormal.
+    // Check for a coordinate system flip.  If the determinant
+    // is -1, then negate the matrix and the scaling factors.
+    var pdum3 = new J3DIVector3(row1);
+    pdum3.cross(row2);
+    if (row0.dot(pdum3) < 0) {
+        for (i = 0; i < 3; i++) {
+            scale[i] *= -1;
+            row[0][i] *= -1;
+            row[1][i] *= -1;
+            row[2][i] *= -1;
+        }
+    }
+
+    // Now, get the rotations out
+    rotate[1] = Math.asin(-row0[2]);
+    if (Math.cos(rotate[1]) != 0) {
+        rotate[0] = Math.atan2(row1[2], row2[2]);
+        rotate[2] = Math.atan2(row0[1], row0[0]);
+    }
+    else {
+        rotate[0] = Math.atan2(-row2[0], row1[1]);
+        rotate[2] = 0;
+    }
+
+    // Convert rotations to degrees
+    var rad2deg = 180 / Math.PI;
+    rotate[0] *= rad2deg;
+    rotate[1] *= rad2deg;
+    rotate[2] *= rad2deg;
+
+    return true;
+}
+
+J3DIMatrix4.prototype._determinant2x2 = function(a, b, c, d)
+{
+    return a * d - b * c;
+}
+
+J3DIMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3)
+{
+    return a1 * this._determinant2x2(b2, b3, c2, c3)
+         - b1 * this._determinant2x2(a2, a3, c2, c3)
+         + c1 * this._determinant2x2(a2, a3, b2, b3);
+}
+
+J3DIMatrix4.prototype._determinant4x4 = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4)
+         - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4)
+         + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4)
+         - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+}
+
+J3DIMatrix4.prototype._makeAdjoint = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    // Row column labeling reversed since we transpose rows & columns
+    this.$matrix.m11  =   this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m21  = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m31  =   this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
+    this.$matrix.m41  = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+
+    this.$matrix.m12  = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m22  =   this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m32  = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
+    this.$matrix.m42  =   this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
+
+    this.$matrix.m13  =   this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m23  = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m33  =   this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
+    this.$matrix.m43  = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
+
+    this.$matrix.m14  = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m24  =   this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m34  = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
+    this.$matrix.m44  =   this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
+}
+
+//
+// J3DIVector3
+//
+J3DIVector3 = function(x,y,z)
+{
+    this.load(x,y,z);
+}
+
+J3DIVector3.prototype.load = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        this[0] = x[0];
+        this[1] = x[1];
+        this[2] = x[2];
+    }
+    else if (typeof x == 'number') {
+        this[0] = x;
+        this[1] = y;
+        this[2] = z;
+    }
+    else {
+        this[0] = 0;
+        this[1] = 0;
+        this[2] = 0;
+    }
+}
+
+J3DIVector3.prototype.getAsArray = function()
+{
+    return [ this[0], this[1], this[2] ];
+}
+
+J3DIVector3.prototype.getAsFloat32Array = function()
+{
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIVector3.prototype.vectorLength = function()
+{
+    return Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);
+}
+
+J3DIVector3.prototype.divide = function(divisor)
+{
+    this[0] /= divisor; this[1] /= divisor; this[2] /= divisor;
+}
+
+J3DIVector3.prototype.cross = function(v)
+{
+    this[0] =  this[1] * v[2] - this[2] * v[1];
+    this[1] = -this[0] * v[2] + this[2] * v[0];
+    this[2] =  this[0] * v[1] - this[1] * v[0];
+}
+
+J3DIVector3.prototype.dot = function(v)
+{
+    return this[0] * v[0] + this[1] * v[1] + this[2] * v[2];
+}
+
+J3DIVector3.prototype.combine = function(v, ascl, bscl)
+{
+    this[0] = (ascl * this[0]) + (bscl * v[0]);
+    this[1] = (ascl * this[1]) + (bscl * v[1]);
+    this[2] = (ascl * this[2]) + (bscl * v[2]);
+}
+
+J3DIVector3.prototype.multVecMatrix = function(matrix)
+{
+    var x = this[0];
+    var y = this[1];
+    var z = this[2];
+
+    this[0] = matrix.$matrix.m41 + x * matrix.$matrix.m11 + y * matrix.$matrix.m21 + z * matrix.$matrix.m31;
+    this[1] = matrix.$matrix.m42 + x * matrix.$matrix.m12 + y * matrix.$matrix.m22 + z * matrix.$matrix.m32;
+    this[2] = matrix.$matrix.m43 + x * matrix.$matrix.m13 + y * matrix.$matrix.m23 + z * matrix.$matrix.m33;
+    var w = matrix.$matrix.m44 + x * matrix.$matrix.m14 + y * matrix.$matrix.m24 + z * matrix.$matrix.m34;
+    if (w != 1 && w != 0) {
+        this[0] /= w;
+        this[1] /= w;
+        this[2] /= w;
+    }
+}
+
+J3DIVector3.prototype.toString = function()
+{
+    return "["+this[0]+","+this[1]+","+this[2]+"]";
+}
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js
new file mode 100755 (executable)
index 0000000..26a8872
--- /dev/null
@@ -0,0 +1,875 @@
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+// Various functions for helping debug WebGL apps.
+
+WebGLDebugUtils = function() {
+
+/**
+ * Wrapped logging function.
+ * @param {string} msg Message to log.
+ */
+var log = function(msg) {
+  if (window.console && window.console.log) {
+    window.console.log(msg);
+  }
+};
+
+/**
+ * Wrapped error logging function.
+ * @param {string} msg Message to log.
+ */
+var error = function(msg) {
+  if (window.console && window.console.error) {
+    window.console.error(msg);
+  } else {
+    log(msg);
+  }
+};
+
+/**
+ * Which arguements are enums.
+ * @type {!Object.<number, string>}
+ */
+var glValidEnumContexts = {
+
+  // Generic setters and getters
+
+  'enable': { 0:true },
+  'disable': { 0:true },
+  'getParameter': { 0:true },
+
+  // Rendering
+
+  'drawArrays': { 0:true },
+  'drawElements': { 0:true, 2:true },
+
+  // Shaders
+
+  'createShader': { 0:true },
+  'getShaderParameter': { 1:true },
+  'getProgramParameter': { 1:true },
+
+  // Vertex attributes
+
+  'getVertexAttrib': { 1:true },
+  'vertexAttribPointer': { 2:true },
+
+  // Textures
+
+  'bindTexture': { 0:true },
+  'activeTexture': { 0:true },
+  'getTexParameter': { 0:true, 1:true },
+  'texParameterf': { 0:true, 1:true },
+  'texParameteri': { 0:true, 1:true, 2:true },
+  'texImage2D': { 0:true, 2:true, 6:true, 7:true },
+  'texSubImage2D': { 0:true, 6:true, 7:true },
+  'copyTexImage2D': { 0:true, 2:true },
+  'copyTexSubImage2D': { 0:true },
+  'generateMipmap': { 0:true },
+
+  // Buffer objects
+
+  'bindBuffer': { 0:true },
+  'bufferData': { 0:true, 2:true },
+  'bufferSubData': { 0:true },
+  'getBufferParameter': { 0:true, 1:true },
+
+  // Renderbuffers and framebuffers
+
+  'pixelStorei': { 0:true, 1:true },
+  'readPixels': { 4:true, 5:true },
+  'bindRenderbuffer': { 0:true },
+  'bindFramebuffer': { 0:true },
+  'checkFramebufferStatus': { 0:true },
+  'framebufferRenderbuffer': { 0:true, 1:true, 2:true },
+  'framebufferTexture2D': { 0:true, 1:true, 2:true },
+  'getFramebufferAttachmentParameter': { 0:true, 1:true, 2:true },
+  'getRenderbufferParameter': { 0:true, 1:true },
+  'renderbufferStorage': { 0:true, 1:true },
+
+  // Frame buffer operations (clear, blend, depth test, stencil)
+
+  'clear': { 0:true },
+  'depthFunc': { 0:true },
+  'blendFunc': { 0:true, 1:true },
+  'blendFuncSeparate': { 0:true, 1:true, 2:true, 3:true },
+  'blendEquation': { 0:true },
+  'blendEquationSeparate': { 0:true, 1:true },
+  'stencilFunc': { 0:true },
+  'stencilFuncSeparate': { 0:true, 1:true },
+  'stencilMaskSeparate': { 0:true },
+  'stencilOp': { 0:true, 1:true, 2:true },
+  'stencilOpSeparate': { 0:true, 1:true, 2:true, 3:true },
+
+  // Culling
+
+  'cullFace': { 0:true },
+  'frontFace': { 0:true },
+};
+
+/**
+ * Map of numbers to names.
+ * @type {Object}
+ */
+var glEnums = null;
+
+/**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ *    you have more than one context it doesn't matter which one
+ *    you pass in, it is only used to pull out constants.
+ */
+function init(ctx) {
+  if (glEnums == null) {
+    glEnums = { };
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'number') {
+        glEnums[ctx[propertyName]] = propertyName;
+      }
+    }
+  }
+}
+
+/**
+ * Checks the utils have been initialized.
+ */
+function checkInit() {
+  if (glEnums == null) {
+    throw 'WebGLDebugUtils.init(ctx) not called';
+  }
+}
+
+/**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+function mightBeEnum(value) {
+  checkInit();
+  return (glEnums[value] !== undefined);
+}
+
+/**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+function glEnumToString(value) {
+  checkInit();
+  var name = glEnums[value];
+  return (name !== undefined) ? name :
+      ("*UNKNOWN WebGL ENUM (0x" + value.toString(16) + ")");
+}
+
+/**
+ * Returns the string version of a WebGL argument.
+ * Attempts to convert enum arguments to strings.
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+function glFunctionArgToString(functionName, argumentIndex, value) {
+  var funcInfo = glValidEnumContexts[functionName];
+  if (funcInfo !== undefined) {
+    if (funcInfo[argumentIndex]) {
+      return glEnumToString(value);
+    }
+  }
+  if (value === null) {
+    return "null";
+  } else if (value === undefined) {
+    return "undefined";
+  } else {
+    return value.toString();
+  }
+}
+
+/**
+ * Converts the arguments of a WebGL function to a string.
+ * Attempts to convert enum arguments to strings.
+ *
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} args The arguments.
+ * @return {string} The arguments as a string.
+ */
+function glFunctionArgsToString(functionName, args) {
+  // apparently we can't do args.join(",");
+  var argStr = "";
+  for (var ii = 0; ii < args.length; ++ii) {
+    argStr += ((ii == 0) ? '' : ', ') +
+        glFunctionArgToString(functionName, ii, args[ii]);
+  }
+  return argStr;
+};
+
+
+function makePropertyWrapper(wrapper, original, propertyName) {
+  //log("wrap prop: " + propertyName);
+  wrapper.__defineGetter__(propertyName, function() {
+    return original[propertyName];
+  });
+  // TODO(gmane): this needs to handle properties that take more than
+  // one value?
+  wrapper.__defineSetter__(propertyName, function(value) {
+    //log("set: " + propertyName);
+    original[propertyName] = value;
+  });
+}
+
+// Makes a function that calls a function on another object.
+function makeFunctionWrapper(original, functionName) {
+  //log("wrap fn: " + functionName);
+  var f = original[functionName];
+  return function() {
+    //log("call: " + functionName);
+    var result = f.apply(original, arguments);
+    return result;
+  };
+}
+
+/**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not gl.NO_ERROR.
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ *        wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
+ *        The function to call when gl.getError returns an
+ *        error. If not specified the default function calls
+ *        console.log with a message.
+ * @param {!function(funcName, args): void} opt_onFunc The
+ *        function to call when each webgl function is called.
+ *        You can use this to log all calls for example.
+ */
+function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc) {
+  init(ctx);
+  opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
+        // apparently we can't do args.join(",");
+        var argStr = "";
+        for (var ii = 0; ii < args.length; ++ii) {
+          argStr += ((ii == 0) ? '' : ', ') +
+              glFunctionArgToString(functionName, ii, args[ii]);
+        }
+        error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
+              "(" + argStr + ")");
+      };
+
+  // Holds booleans for each GL error so after we get the error ourselves
+  // we can still return it to the client app.
+  var glErrorShadow = { };
+
+  // Makes a function that calls a WebGL function and then calls getError.
+  function makeErrorWrapper(ctx, functionName) {
+    return function() {
+      if (opt_onFunc) {
+        opt_onFunc(functionName, arguments);
+      }
+      var result = ctx[functionName].apply(ctx, arguments);
+      var err = ctx.getError();
+      if (err != 0) {
+        glErrorShadow[err] = true;
+        opt_onErrorFunc(err, functionName, arguments);
+      }
+      return result;
+    };
+  }
+
+  // Make a an object that has a copy of every property of the WebGL context
+  // but wraps all functions.
+  var wrapper = {};
+  for (var propertyName in ctx) {
+    if (typeof ctx[propertyName] == 'function') {
+       wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
+     } else {
+       makePropertyWrapper(wrapper, ctx, propertyName);
+     }
+  }
+
+  // Override the getError function with one that returns our saved results.
+  wrapper.getError = function() {
+    for (var err in glErrorShadow) {
+      if (glErrorShadow.hasOwnProperty(err)) {
+        if (glErrorShadow[err]) {
+          glErrorShadow[err] = false;
+          return err;
+        }
+      }
+    }
+    return ctx.NO_ERROR;
+  };
+
+  return wrapper;
+}
+
+function resetToInitialState(ctx) {
+  var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
+  var tmp = ctx.createBuffer();
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
+  for (var ii = 0; ii < numAttribs; ++ii) {
+    ctx.disableVertexAttribArray(ii);
+    ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
+    ctx.vertexAttrib1f(ii, 0);
+  }
+  ctx.deleteBuffer(tmp);
+
+  var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
+  for (var ii = 0; ii < numTextureUnits; ++ii) {
+    ctx.activeTexture(ctx.TEXTURE0 + ii);
+    ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+  }
+
+  ctx.activeTexture(ctx.TEXTURE0);
+  ctx.useProgram(null);
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+  ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+  ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
+  ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
+  ctx.disable(ctx.BLEND);
+  ctx.disable(ctx.CULL_FACE);
+  ctx.disable(ctx.DEPTH_TEST);
+  ctx.disable(ctx.DITHER);
+  ctx.disable(ctx.SCISSOR_TEST);
+  ctx.blendColor(0, 0, 0, 0);
+  ctx.blendEquation(ctx.FUNC_ADD);
+  ctx.blendFunc(ctx.ONE, ctx.ZERO);
+  ctx.clearColor(0, 0, 0, 0);
+  ctx.clearDepth(1);
+  ctx.clearStencil(-1);
+  ctx.colorMask(true, true, true, true);
+  ctx.cullFace(ctx.BACK);
+  ctx.depthFunc(ctx.LESS);
+  ctx.depthMask(true);
+  ctx.depthRange(0, 1);
+  ctx.frontFace(ctx.CCW);
+  ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
+  ctx.lineWidth(1);
+  ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
+  ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
+  // TODO: Delete this IF.
+  if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
+    ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
+  }
+  ctx.polygonOffset(0, 0);
+  ctx.sampleCoverage(1, false);
+  ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
+  ctx.stencilMask(0xFFFFFFFF);
+  ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
+  ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
+
+  // TODO: This should NOT be needed but Firefox fails with 'hint'
+  while(ctx.getError());
+}
+
+function makeLostContextSimulatingCanvas(canvas) {
+  var unwrappedContext_;
+  var wrappedContext_;
+  var onLost_ = [];
+  var onRestored_ = [];
+  var wrappedContext_ = {};
+  var contextId_ = 1;
+  var contextLost_ = false;
+  var resourceId_ = 0;
+  var resourceDb_ = [];
+  var numCallsToLoseContext_ = 0;
+  var numCalls_ = 0;
+  var canRestore_ = false;
+  var restoreTimeout_ = 0;
+
+  // Holds booleans for each GL error so can simulate errors.
+  var glErrorShadow_ = { };
+
+  canvas.getContext = function(f) {
+    return function() {
+      var ctx = f.apply(canvas, arguments);
+      // Did we get a context and is it a WebGL context?
+      if (ctx instanceof WebGLRenderingContext) {
+        if (ctx != unwrappedContext_) {
+          if (unwrappedContext_) {
+            throw "got different context"
+          }
+          unwrappedContext_ = ctx;
+          wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
+        }
+        return wrappedContext_;
+      }
+      return ctx;
+    }
+  }(canvas.getContext);
+
+  function wrapEvent(listener) {
+    if (typeof(listener) == "function") {
+      return listener;
+    } else {
+      return function(info) {
+        listener.handleEvent(info);
+      }
+    }
+  }
+
+  var addOnContextLostListener = function(listener) {
+    onLost_.push(wrapEvent(listener));
+  };
+
+  var addOnContextRestoredListener = function(listener) {
+    onRestored_.push(wrapEvent(listener));
+  };
+
+
+  function wrapAddEventListener(canvas) {
+    var f = canvas.addEventListener;
+    canvas.addEventListener = function(type, listener, bubble) {
+      switch (type) {
+        case 'webglcontextlost':
+          addOnContextLostListener(listener);
+          break;
+        case 'webglcontextrestored':
+          addOnContextRestoredListener(listener);
+          break;
+        default:
+          f.apply(canvas, arguments);
+      }
+    };
+  }
+
+  wrapAddEventListener(canvas);
+
+  canvas.loseContext = function() {
+    if (!contextLost_) {
+      contextLost_ = true;
+      numCallsToLoseContext_ = 0;
+      ++contextId_;
+      while (unwrappedContext_.getError());
+      clearErrors();
+      glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
+      var event = makeWebGLContextEvent("context lost");
+      var callbacks = onLost_.slice();
+      setTimeout(function() {
+          //log("numCallbacks:" + callbacks.length);
+          for (var ii = 0; ii < callbacks.length; ++ii) {
+            //log("calling callback:" + ii);
+            callbacks[ii](event);
+          }
+          if (restoreTimeout_ >= 0) {
+            setTimeout(function() {
+                canvas.restoreContext();
+              }, restoreTimeout_);
+          }
+        }, 0);
+    }
+  };
+
+  canvas.restoreContext = function() {
+    if (contextLost_) {
+      if (onRestored_.length) {
+        setTimeout(function() {
+            if (!canRestore_) {
+              throw "can not restore. webglcontestlost listener did not call event.preventDefault";
+            }
+            freeResources();
+            resetToInitialState(unwrappedContext_);
+            contextLost_ = false;
+            numCalls_ = 0;
+            canRestore_ = false;
+            var callbacks = onRestored_.slice();
+            var event = makeWebGLContextEvent("context restored");
+            for (var ii = 0; ii < callbacks.length; ++ii) {
+              callbacks[ii](event);
+            }
+          }, 0);
+      }
+    }
+  };
+
+  canvas.loseContextInNCalls = function(numCalls) {
+    if (contextLost_) {
+      throw "You can not ask a lost contet to be lost";
+    }
+    numCallsToLoseContext_ = numCalls_ + numCalls;
+  };
+
+  canvas.getNumCalls = function() {
+    return numCalls_;
+  };
+
+  canvas.setRestoreTimeout = function(timeout) {
+    restoreTimeout_ = timeout;
+  };
+
+  function isWebGLObject(obj) {
+    //return false;
+    return (obj instanceof WebGLBuffer ||
+            obj instanceof WebGLFramebuffer ||
+            obj instanceof WebGLProgram ||
+            obj instanceof WebGLRenderbuffer ||
+            obj instanceof WebGLShader ||
+            obj instanceof WebGLTexture);
+  }
+
+  function checkResources(args) {
+    for (var ii = 0; ii < args.length; ++ii) {
+      var arg = args[ii];
+      if (isWebGLObject(arg)) {
+        return arg.__webglDebugContextLostId__ == contextId_;
+      }
+    }
+    return true;
+  }
+
+  function clearErrors() {
+    var k = Object.keys(glErrorShadow_);
+    for (var ii = 0; ii < k.length; ++ii) {
+      delete glErrorShadow_[k];
+    }
+  }
+
+  function loseContextIfTime() {
+    ++numCalls_;
+    if (!contextLost_) {
+      if (numCallsToLoseContext_ == numCalls_) {
+        canvas.loseContext();
+      }
+    }
+  }
+
+  // Makes a function that simulates WebGL when out of context.
+  function makeLostContextFunctionWrapper(ctx, functionName) {
+    var f = ctx[functionName];
+    return function() {
+      // log("calling:" + functionName);
+      // Only call the functions if the context is not lost.
+      loseContextIfTime();
+      if (!contextLost_) {
+        //if (!checkResources(arguments)) {
+        //  glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
+        //  return;
+        //}
+        var result = f.apply(ctx, arguments);
+        return result;
+      }
+    };
+  }
+
+  function freeResources() {
+    for (var ii = 0; ii < resourceDb_.length; ++ii) {
+      var resource = resourceDb_[ii];
+      if (resource instanceof WebGLBuffer) {
+        unwrappedContext_.deleteBuffer(resource);
+      } else if (resource instanceof WebGLFramebuffer) {
+        unwrappedContext_.deleteFramebuffer(resource);
+      } else if (resource instanceof WebGLProgram) {
+        unwrappedContext_.deleteProgram(resource);
+      } else if (resource instanceof WebGLRenderbuffer) {
+        unwrappedContext_.deleteRenderbuffer(resource);
+      } else if (resource instanceof WebGLShader) {
+        unwrappedContext_.deleteShader(resource);
+      } else if (resource instanceof WebGLTexture) {
+        unwrappedContext_.deleteTexture(resource);
+      }
+    }
+  }
+
+  function makeWebGLContextEvent(statusMessage) {
+    return {
+      statusMessage: statusMessage,
+      preventDefault: function() {
+          canRestore_ = true;
+        }
+    };
+  }
+
+  return canvas;
+
+  function makeLostContextSimulatingContext(ctx) {
+    // copy all functions and properties to wrapper
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'function') {
+         wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
+             ctx, propertyName);
+       } else {
+         makePropertyWrapper(wrappedContext_, ctx, propertyName);
+       }
+    }
+
+    // Wrap a few functions specially.
+    wrappedContext_.getError = function() {
+      loseContextIfTime();
+      if (!contextLost_) {
+        var err;
+        while (err = unwrappedContext_.getError()) {
+          glErrorShadow_[err] = true;
+        }
+      }
+      for (var err in glErrorShadow_) {
+        if (glErrorShadow_[err]) {
+          delete glErrorShadow_[err];
+          return err;
+        }
+      }
+      return wrappedContext_.NO_ERROR;
+    };
+
+    var creationFunctions = [
+      "createBuffer",
+      "createFramebuffer",
+      "createProgram",
+      "createRenderbuffer",
+      "createShader",
+      "createTexture"
+    ];
+    for (var ii = 0; ii < creationFunctions.length; ++ii) {
+      var functionName = creationFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          var obj = f.apply(ctx, arguments);
+          obj.__webglDebugContextLostId__ = contextId_;
+          resourceDb_.push(obj);
+          return obj;
+        };
+      }(ctx[functionName]);
+    }
+
+    var functionsThatShouldReturnNull = [
+      "getActiveAttrib",
+      "getActiveUniform",
+      "getBufferParameter",
+      "getContextAttributes",
+      "getAttachedShaders",
+      "getFramebufferAttachmentParameter",
+      "getParameter",
+      "getProgramParameter",
+      "getProgramInfoLog",
+      "getRenderbufferParameter",
+      "getShaderParameter",
+      "getShaderInfoLog",
+      "getShaderSource",
+      "getTexParameter",
+      "getUniform",
+      "getUniformLocation",
+      "getVertexAttrib"
+    ];
+    for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
+      var functionName = functionsThatShouldReturnNull[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    var isFunctions = [
+      "isBuffer",
+      "isEnabled",
+      "isFramebuffer",
+      "isProgram",
+      "isRenderbuffer",
+      "isShader",
+      "isTexture"
+    ];
+    for (var ii = 0; ii < isFunctions.length; ++ii) {
+      var functionName = isFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return false;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    wrappedContext_.checkFramebufferStatus = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.checkFramebufferStatus);
+
+    wrappedContext_.getAttribLocation = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return -1;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getAttribLocation);
+
+    wrappedContext_.getVertexAttribOffset = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return 0;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getVertexAttribOffset);
+
+    wrappedContext_.isContextLost = function() {
+      return contextLost_;
+    };
+
+    return wrappedContext_;
+  }
+}
+
+return {
+    /**
+     * Initializes this module. Safe to call more than once.
+     * @param {!WebGLRenderingContext} ctx A WebGL context. If
+    }
+   *    you have more than one context it doesn't matter which one
+   *    you pass in, it is only used to pull out constants.
+   */
+  'init': init,
+
+  /**
+   * Returns true or false if value matches any WebGL enum
+   * @param {*} value Value to check if it might be an enum.
+   * @return {boolean} True if value matches one of the WebGL defined enums
+   */
+  'mightBeEnum': mightBeEnum,
+
+  /**
+   * Gets an string version of an WebGL enum.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+   *
+   * @param {number} value Value to return an enum for
+   * @return {string} The string version of the enum.
+   */
+  'glEnumToString': glEnumToString,
+
+  /**
+   * Converts the argument of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 0, gl.TEXTURE_2D);
+   *
+   * would return 'TEXTURE_2D'
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} argumentIndx the index of the argument.
+   * @param {*} value The value of the argument.
+   * @return {string} The value as a string.
+   */
+  'glFunctionArgToString': glFunctionArgToString,
+
+  /**
+   * Converts the arguments of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} args The arguments.
+   * @return {string} The arguments as a string.
+   */
+  'glFunctionArgsToString': glFunctionArgsToString,
+
+  /**
+   * Given a WebGL context returns a wrapped context that calls
+   * gl.getError after every command and calls a function if the
+   * result is not NO_ERROR.
+   *
+   * You can supply your own function if you want. For example, if you'd like
+   * an exception thrown on any GL error you could do this
+   *
+   *    function throwOnGLError(err, funcName, args) {
+   *      throw WebGLDebugUtils.glEnumToString(err) +
+   *            " was caused by call to " + funcName;
+   *    };
+   *
+   *    ctx = WebGLDebugUtils.makeDebugContext(
+   *        canvas.getContext("webgl"), throwOnGLError);
+   *
+   * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+   * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
+   *     to call when gl.getError returns an error. If not specified the default
+   *     function calls console.log with a message.
+   * @param {!function(funcName, args): void} opt_onFunc The
+   *     function to call when each webgl function is called. You
+   *     can use this to log all calls for example.
+   */
+  'makeDebugContext': makeDebugContext,
+
+  /**
+   * Given a canvas element returns a wrapped canvas element that will
+   * simulate lost context. The canvas returned adds the following functions.
+   *
+   * loseContext:
+   *   simulates a lost context event.
+   *
+   * restoreContext:
+   *   simulates the context being restored.
+   *
+   * lostContextInNCalls:
+   *   loses the context after N gl calls.
+   *
+   * getNumCalls:
+   *   tells you how many gl calls there have been so far.
+   *
+   * setRestoreTimeout:
+   *   sets the number of milliseconds until the context is restored
+   *   after it has been lost. Defaults to 0. Pass -1 to prevent
+   *   automatic restoring.
+   *
+   * @param {!Canvas} canvas The canvas element to wrap.
+   */
+  'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
+
+  /**
+   * Resets a context to the initial state.
+   * @param {!WebGLRenderingContext} ctx The webgl context to
+   *     reset.
+   */
+  'resetToInitialState': resetToInitialState
+};
+
+}();
+
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js
new file mode 100755 (executable)
index 0000000..4f14f7f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/**
+ * @fileoverview This file contains functions every webgl program will need
+ * a version of one way or another.
+ *
+ * Instead of setting up a context manually it is recommended to
+ * use. This will check for success or failure. On failure it
+ * will attempt to present an approriate message to the user.
+ *
+ *       gl = WebGLUtils.setupWebGL(canvas);
+ *
+ * For animated WebGL apps use of setTimeout or setInterval are
+ * discouraged. It is recommended you structure your rendering
+ * loop like this.
+ *
+ *       function render() {
+ *         window.requestAnimFrame(render, canvas);
+ *
+ *         // do rendering
+ *         ...
+ *       }
+ *       render();
+ *
+ * This will call your rendering function up to the refresh rate
+ * of your display but will stop rendering if your app is not
+ * visible.
+ */
+
+WebGLUtils = function() {
+
+/**
+ * Creates the HTLM for a failure message
+ * @param {string} canvasContainerId id of container of th
+ *        canvas.
+ * @return {string} The html.
+ */
+var makeFailHTML = function(msg) {
+  return '' +
+    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
+    '<td align="center">' +
+    '<div style="display: table-cell; vertical-align: middle;">' +
+    '<div style="">' + msg + '</div>' +
+    '</div>' +
+    '</td></tr></table>';
+};
+
+/**
+ * Mesasge for getting a webgl browser
+ * @type {string}
+ */
+var GET_A_WEBGL_BROWSER = '' +
+  'This page requires a browser that supports WebGL.<br/>' +
+  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
+
+/**
+ * Mesasge for need better hardware
+ * @type {string}
+ */
+var OTHER_PROBLEM = '' +
+  "It doesn't appear your computer can support WebGL.<br/>" +
+  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
+
+/**
+ * Creates a webgl context. If creation fails it will
+ * change the contents of the container of the <canvas>
+ * tag to an error message with the correct links for WebGL.
+ * @param {Element} canvas. The canvas element to create a
+ *     context from.
+ * @param {WebGLContextCreationAttirbutes} opt_attribs Any
+ *     creation attributes you want to pass in.
+ * @return {WebGLRenderingContext} The created context.
+ */
+var setupWebGL = function(canvas, opt_attribs) {
+  function showLink(str) {
+    var container = canvas.parentNode;
+    if (container) {
+      container.innerHTML = makeFailHTML(str);
+    }
+  };
+
+  if (!window.WebGLRenderingContext) {
+    showLink(GET_A_WEBGL_BROWSER);
+    return null;
+  }
+
+  var context = create3DContext(canvas, opt_attribs);
+  if (!context) {
+    showLink(OTHER_PROBLEM);
+  }
+  return context;
+};
+
+/**
+ * Creates a webgl context.
+ * @param {!Canvas} canvas The canvas tag to get context
+ *     from. If one is not passed in one will be created.
+ * @return {!WebGLContext} The created context.
+ */
+var create3DContext = function(canvas, opt_attribs) {
+  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
+  var context = null;
+  for (var ii = 0; ii < names.length; ++ii) {
+    try {
+      context = canvas.getContext(names[ii], opt_attribs);
+    } catch(e) {}
+    if (context) {
+      break;
+    }
+  }
+  return context;
+}
+
+return {
+  create3DContext: create3DContext,
+  setupWebGL: setupWebGL
+};
+}();
+
+/**
+ * Provides requestAnimationFrame in a cross browser way.
+ */
+window.requestAnimFrame = (function() {
+  return window.requestAnimationFrame ||
+         window.webkitRequestAnimationFrame ||
+         window.mozRequestAnimationFrame ||
+         window.oRequestAnimationFrame ||
+         window.msRequestAnimationFrame ||
+         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
+           return window.setTimeout(callback, 1000/60);
+         };
+})();
+
+/**
+ * Provides cancelAnimationFrame in a cross browser way.
+ */
+window.cancelAnimFrame = (function() {
+  return window.cancelAnimationFrame ||
+         window.webkitCancelAnimationFrame ||
+         window.mozCancelAnimationFrame ||
+         window.oCancelAnimationFrame ||
+         window.msCancelAnimationFrame ||
+         window.clearTimeout;
+})();
+
+
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/main.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/main.js
new file mode 100755 (executable)
index 0000000..41563d0
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var ORIGIN_SPEED = 0.5;
+var multiple = 5;
+var isRunning = false;
+var isInit = true;
+var testFlag = {
+    status: false,
+    direction: false,
+    size:false,
+    speed:false
+};
+
+function start() {
+    var c = document.getElementById("canvas");
+    canvas = c;
+
+    var gl = init();
+    if (!gl) {
+        return;
+    }
+    incAngle = ORIGIN_SPEED*multiple;
+    currentAngle = 0;
+
+    f();
+    isRunning = true;
+}
+var f = function() {
+    drawPicture(gl);
+    requestId = window.requestAnimFrame(f, canvas);
+};
+
+function handleContextLost(event) {
+    if (event) {
+        event.preventDefault();
+    }
+    if (requestId !== undefined) {
+        window.cancelAnimFrame(requestId);
+        requestId = undefined;
+    }
+}
+
+function handleContextRestored() {
+    init();
+    f();
+}
+
+function reStart() {
+    if (isRunning) {
+        return;
+    }
+    incAngle = bakAngle;
+    handleContextRestored();
+    isRunning = true;
+}
+
+function stop(event) {
+    if (!isRunning) {
+        return;
+    }
+    bakAngle = incAngle;
+    incAngle = 0;
+    handleContextLost(event);
+    isRunning = false;
+}
+
+function resume() {
+    if(!isRunning) {
+        return;
+    }
+    stop();
+    reStart();
+}
+
+function setToRight() {
+    if(incAngle < 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setToLeft() {
+    if(incAngle > 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setSize(value) {
+    if(value < 7 || value > 30) {
+        return;
+    }
+    if (value != viewDistance){
+        viewDistance = value;
+    };
+    resume();
+}
+
+function setSpeed(value) {
+    if(value <= 0 || value > 10) {
+        return;
+    }
+    if(incAngle > 0) {
+        incAngle = ORIGIN_SPEED*value;
+    } else {
+        incAngle = -ORIGIN_SPEED*value;
+    }
+    resume();
+}
+
+function checkEnable() {
+    if (testFlag.status && testFlag.direction
+        && testFlag.size && testFlag.speed) {
+        EnablePassButton();
+    }
+}
+
+$(document).ready(function(){
+    start();
+    // animation-left-right status changes
+    $("input[type='radio']").bind( "change", function(event, ui) {
+        if (this.value == "left") {
+            setToLeft();
+            testFlag.direction = true;
+            checkEnable();
+        } else {
+            setToRight();
+        }
+    });
+    DisablePassButton();
+});
diff --git a/tv/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js b/tv/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..59672db
--- /dev/null
@@ -0,0 +1,155 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
+            setSize(value);
+            if (parseInt(newValue, 10) != 3) {
+                testFlag.size = true;
+                checkEnable();
+            }
+        } else if (ID == "speed-1") {
+            setSpeed(parseInt(newValue, 10));
+            if (parseInt(newValue, 10) != 5) {
+                testFlag.speed = true;
+                checkEnable();
+            }
+        } else if (ID == "flip-1") {
+            if (newValue == "0") {
+                stop();
+                $("input[type='radio']").checkboxradio('disable');
+                $("#slider-1").slider('disable');
+                $("#speed-1").slider('disable');
+                testFlag.status = true;
+                checkEnable();
+            } else if (newValue == "1"){
+                if (!isInit) {
+                    reStart();
+                    $("input[type='radio']").checkboxradio('enable');
+                    $("#slider-1").slider('enable');
+                    $("#speed-1").slider('enable');
+                } else {
+                    isInit = false;
+                }
+            }
+        }
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       //this._popup.html( newValue );
+            this._popup.html( Math.round(newValue) );
+               }
+
+               if ( o.showValue ) {
+                       //this._handleText.html( newValue );
+            this._handleText.html( Math.round(newValue) );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/tv/tct-behavior-tests/tests/Accelerometer/index.html b/tv/tct-behavior-tests/tests/Accelerometer/index.html
new file mode 100755 (executable)
index 0000000..e4f6d53
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style type="text/css">
+        .d{
+            border: 1px solid #000;
+            width:100%;
+            height:200px;
+        }
+        .d li{
+            margin: 10px 5px;
+        }
+        .d p{
+            margin: 10px 25px;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <div class="d">
+        <ul id="coordinate">
+          <li id="x">X:</li>
+          <li id="y">Y:</li>
+          <li id="z">Z:</li>
+        </ul>
+        <p>X, Y, Z will be changed while moving the device, otherwise they will be zero</p>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionality of Accelerometer. And detects the device moving direction is x axis or y axis or z axis.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the detected direction reflects the actual device moving direction.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Accelerometer/js/main.js b/tv/tct-behavior-tests/tests/Accelerometer/js/main.js
new file mode 100755 (executable)
index 0000000..af52a3e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+window.addEventListener(
+    "devicemotion",
+    function(evt) {
+        var coordinate = evt.acceleration;
+        jQuery("#x").text("X: " + Math.round(coordinate.x-0));
+        jQuery("#y").text("Y: " + Math.round(coordinate.y-0));
+        jQuery("#z").text("Z: " + Math.round(coordinate.z-0));
+    }, false);
diff --git a/tv/tct-behavior-tests/tests/Alarm/NOTICE b/tv/tct-behavior-tests/tests/Alarm/NOTICE
new file mode 100755 (executable)
index 0000000..5e383b8
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestAlarm :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/Alarm/index.html b/tv/tct-behavior-tests/tests/Alarm/index.html
new file mode 100755 (executable)
index 0000000..70bf8b1
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AlarmTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">AlarmTest Install</div>
+                </li>
+                <li data-role="list-divider">Alarm List</li>
+            </ul>
+            <ul data-role="listview" id="alarm-all-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Absolute Alarm Time</li>
+                <li>
+                    <input type="datetime" name="alarm-time" id="alarm-time" value="0000-00-00T00:00Z" />
+                </li>
+                <li data-role="list-divider">Absolute Alarm Repeat interval(sec)</li>
+                <li><input id="absolute-alarm-period" name="absolute-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Absolute Alarm Add</li>
+                <li>
+                    <div data-role="button" id="absolute-alarm-save">Absolute Save</div>
+                </li>
+                <li data-role="list-divider">Relative Alarm Delay(sec)</li>
+                <li><input id="relative-alarm-delay" name="relative-alarm-delay" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Repeat interval(sec)</li>
+                <li><input id="relative-alarm-period" name="relative-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                <li data-role="list-divider">Relative Alarm Add</li>
+                <li>
+                    <div data-role="button" id="relative-alarm-save">Relative Save</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Alarm Delete</li>
+                <li>
+                    <div data-role="button" id="alarm-remove-all">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+              <font style="font-size:85%">
+                <p>Check if an application is launched on time</p><br>
+                <p>1. Install AlarmTest</p>
+                <p>2. Set absolute time with UTC ( ex. 2014-12-19T14:00Z ) </p>
+                <p>3. Set an interval</p>
+                <p>4. Save an absolute button</p>
+                <p>5. Watch AlarmTest is launched on time</p>
+                <p>6. Watch AlarmTest is launched after the interval</p>
+                <p>7. Remove the alarm</p>
+                <p>8. Set delay</p>
+                <p>9. Set an interval</p>
+                <p>10. Save a relative alarm</p>
+                <p>11. Watch AlarmTest is launched on time</p>
+                <p>12. Watch AlarmTest is launched after the interval</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Alarm/js/main.js b/tv/tct-behavior-tests/tests/Alarm/js/main.js
new file mode 100755 (executable)
index 0000000..f183baa
--- /dev/null
@@ -0,0 +1,301 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    $("#alarm-remove-all").bind("vclick", function() {
+        removeAll();
+        return false;
+    });
+    $("#alarm-all-list").delegate("li", "vclick", function() {
+        alarmInfo($(this).data("id"));
+        return false;
+    });
+    $("#alarm-all-list").delegate("div", "vclick", function() {
+        removeAlarm($(this).parent().data("id"));
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install_(installUrl);
+        $("#absolute-alarm-save").removeClass("ui-disabled");
+        $("#relative-alarm-save").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").bind("vclick", function() {
+        addAlarmAbsolute();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#relative-alarm-save").bind("vclick", function() {
+        addAlarmRelative();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").addClass("ui-disabled");
+    $("#relative-alarm-save").addClass("ui-disabled");
+    $("#alarm-remove-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    displayAlarms();
+    alarmPre();
+});
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function displayAlarms() {
+    var alarmsArray = tizen.alarm.getAll();
+    var period, str = "";
+
+    for (var i = 0; i < alarmsArray.length; i++) {
+        if (alarmsArray[i].period) {
+            period = alarmsArray[i].period + " sec";
+        } else {
+            period = "none";
+        }
+
+        if (alarmsArray[i] instanceof tizen.AlarmAbsolute) {
+            var d = alarmsArray[i].date,
+            m = d.getMinutes();
+
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + (d.getMonth() + 1)
+                + '/'
+                + d.getDate()
+                + '/'
+                + d.getFullYear()
+                + ' '
+                + d.getHours()
+                + ':'
+                + ((m < 10) ? "0" + m : m)
+                + ' Absolute alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else if (alarmsArray[i] instanceof tizen.AlarmRelative) {
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + alarmsArray[i].delay
+                + ' sec Relative alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else {
+            alert("Wrong alarm instance");
+            break;
+        }
+    }
+    $("#alarm-all-list").html(str).trigger("create").listview("refresh");
+}
+
+function addAlarm(alarm) {
+    var arg;
+    arg = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view",
+            null,
+            null,
+            null,
+            [new tizen.ApplicationControlData("id", ["bhvtcalarm.AlarmTest"])]);
+
+    try {
+        tizen.alarm.add(alarm, "bhvtcalarm.AlarmTest", arg);
+    } catch (e) {
+        alert("error: " + e.message);
+    }
+}
+
+function addAlarmAbsolute() {
+    var period = parseInt($("#absolute-alarm-period").prop("value")),
+    time = $("#alarm-time").prop("value"),
+    year, month, date, hours, minutes, splits, d, t;
+
+    if (time === null || time === "" || period < 0) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        splits = time.split("T");
+        d = splits[0].split("-");
+        t = splits[1].split(":");
+
+        year = parseInt(d[0]);
+        month = parseInt(d[1]) - 1;
+        date = parseInt(d[2]);
+        hours = parseInt(t[0]);
+        minutes = parseInt(t[1]);
+
+        var inputDate = new Date(year, month, date, hours, minutes, 0, 0);
+        var myAlarm = new tizen.AlarmAbsolute(inputDate, (period > 0 ? period : null));
+
+        addAlarm(myAlarm);
+        alert("Absolute Alarm Added");
+        displayAlarms();
+    }
+}
+
+function addAlarmRelative() {
+    var period = parseInt($("#relative-alarm-period").prop("value")),
+    delay = parseInt($("#relative-alarm-delay").prop("value"));
+
+    if ((delay < 0) || (period < 0)) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        var myAlarm = new tizen.AlarmRelative(delay, period);
+
+        addAlarm(myAlarm);
+        alert("Relative Alarm Added");
+        displayAlarms();
+    }
+}
+
+function removeAll() {
+    tizen.alarm.removeAll();
+    alert("Alarm delete all");
+    displayAlarms();
+}
+
+function removeAlarm(id) {
+    try {
+        tizen.alarm.remove(id);
+        alert("Alarm delete");
+    } catch (e) {
+        alert("Alarm remove failed. The once alarm might be already removed automatically");
+    }
+    displayAlarms();
+}
+
+function alarmInfo(id) {
+    var alarm = tizen.alarm.get(id);
+
+    if (alarm) {
+        if (alarm instanceof tizen.AlarmAbsolute) {
+            alert("Next scheduled alarm is " + alarm.getNextScheduledDate());
+        } else {
+            alert("Remaining seconds is " + alarm.getRemainingSeconds() + " SECS");
+        }
+    } else {
+        alert("Alarm info retrieving failed<br/>This once alarm might be already removed automatically");
+        displayAlarms();
+    }
+}
+
+function install_(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                $("#install").addClass("ui-disabled");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">AlarmTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            install_flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            install_flag = false;
+        }
+};
+
+function alarmPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestAlarm.wgt",
+                    false,
+                    function() {
+                        console.log("Alarm Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Alarm/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/Alarm/res/TestAlarm b/tv/tct-behavior-tests/tests/Alarm/res/TestAlarm
new file mode 100755 (executable)
index 0000000..4c9a6e9
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Alarm/res/TestAlarm differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/index.html b/tv/tct-behavior-tests/tests/AppControl/index.html
new file mode 100755 (executable)
index 0000000..838adeb
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="actList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test App Control</li>
+                <li id="csp-none">
+                    <a href="javascript:goToApp('res/app-control-complex-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-complex-wgt</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:goToApp('res/appcontrol-operation-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-operation-wgt</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of App Control worked well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/AppControl/js/main1.js b/tv/tct-behavior-tests/tests/AppControl/js/main1.js
new file mode 100755 (executable)
index 0000000..c01f954
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0003.unittestforappcontrol";
+
+var wgt_names = new Array('app-control-complex-wgt-1.wgt',
+                          'app-control-complex-wgt-2.wgt',
+                          'app-control-complex-wgt-3.wgt',
+                          'app-control-complex-wgt-4.wgt',
+                          'app-control-complex-wgt-5.wgt',
+                          'unit-test-for-app-control.wgt');
+
+var package_ids = new Array('wrt2act066',
+                            'wrt2act067',
+                            'wrt2act068',
+                            'wrt2act069',
+                            'wrt1nj0032',
+                            'wrt1nj0003');
+
+var id_maps = {'app-control-complex-wgt-1.wgt':        'wrt2act066',
+               'app-control-complex-wgt-2.wgt':        'wrt2act067',
+               'app-control-complex-wgt-3.wgt':        'wrt2act068',
+               'app-control-complex-wgt-4.wgt':        'wrt2act069',
+               'app-control-complex-wgt-5.wgt':        'wrt1nj0032',
+               'unit-test-for-app-control.wgt':        'wrt1nj0003'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    /**gettpkInfoByPlatForm();**/
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+function goToApp(path) {
+    window.open(path);
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/AppControl/js/main2.js b/tv/tct-behavior-tests/tests/AppControl/js/main2.js
new file mode 100755 (executable)
index 0000000..b60b084
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0009.appcontrolTestApp";
+
+var wgt_names = new Array('appcontrol-operation-content.wgt',
+                          'appcontrol-operation-createcontent-video.wgt',
+                          'appcontrol-operation-default.wgt',
+                          'appcontrol-operation-dial.wgt',
+                          'appcontrol-operation-dial-null.wgt',
+                          'appcontrol-operation-call.wgt',
+                          'appcontrol-operation-call-null.wgt',
+                          'appcontrol-operation-edit.wgt',
+                          'appcontrol-operation-multi_share.wgt',
+                          'appcontrol-operation-nfc-empty.wgt',
+                          'appcontrol-operation-nfc-mime.wgt',
+                          'appcontrol-operation-nfc-uri.wgt',
+                          'appcontrol-operation-nfc-wellknow.wgt',
+                          'appcontrol-operation-pick.wgt',
+                          'appcontrol-operation-pick-audio.wgt',
+                          'appcontrol-operation-pick-video.wgt',
+                          'appcontrol-operation-search.wgt',
+                          'appcontrol-operation-send.wgt',
+                          'appcontrol-operation-share.wgt',
+                          'appcontrol-operation-view.wgt',
+                          'appcontrol-operation-view-3gpp.wgt',
+                          'appcontrol-operation-view-aac.wgt',
+                          'appcontrol-operation-view-amr.wgt',
+                          'appcontrol-operation-view-bmp.wgt',
+                          'appcontrol-operation-view-gif.wgt',
+                          'appcontrol-operation-view-jpeg.wgt',
+                          'appcontrol-operation-view-mp3.wgt',
+                          'appcontrol-operation-view-mp4.wgt',
+                          'appcontrol-operation-view-png.wgt',
+                          'appcontrol-operation-view-wav.wgt',
+                          'appcontrol-test-app.wgt');
+
+var package_ids = new Array('wrt2aoc011',
+                            'wrt1nj0027',
+                            'wrt2aod012',
+                            'wrt2aod013',
+                            'wrt1nj0029',
+                            'wrt1nj0024',
+                            'wrt1nj0025',
+                            'wrt2aoe014',
+                            'wrt1nj0031',
+                            'wrt2aon015',
+                            'wrt2aon016',
+                            'wrt2aon017',
+                            'wrt2aon018',
+                            'wrt2aop019',
+                            'wrt1nj0021',
+                            'wrt1nj0023',
+                            'wrt2aos020',
+                            'wrt2aos021',
+                            'wrt1nj0030',
+                            'wrt2aov022',
+                            'wrt1nj0018',
+                            'wrt1nj0014',
+                            'wrt1nj0015',
+                            'wrt1nj0011',
+                            'wrt1nj0012',
+                            'wrt1nj0010',
+                            'wrt1nj0016',
+                            'wrt1nj0019',
+                            'wrt1nj0013',
+                            'wrt1nj0017',
+                            'wrt1nj0009');
+
+var id_maps = {'appcontrol-operation-content.wgt':                'wrt2aoc011',
+               'appcontrol-operation-createcontent-video.wgt':    'wrt1nj0027',
+               'appcontrol-operation-default.wgt':                'wrt2aod012',
+               'appcontrol-operation-dial.wgt':                   'wrt2aod013',
+               'appcontrol-operation-dial-null.wgt':              'wrt1nj0029',
+               'appcontrol-operation-call.wgt':                   'wrt1nj0024',
+               'appcontrol-operation-call-null.wgt':              'wrt1nj0025',
+               'appcontrol-operation-edit.wgt':                   'wrt2aoe014',
+               'appcontrol-operation-multi_share.wgt':            'wrt1nj0031',
+               'appcontrol-operation-nfc-empty.wgt':              'wrt2aon015',
+               'appcontrol-operation-nfc-mime.wgt':               'wrt2aon016',
+               'appcontrol-operation-nfc-uri.wgt':                'wrt2aon017',
+               'appcontrol-operation-nfc-wellknow.wgt':           'wrt2aon018',
+               'appcontrol-operation-pick.wgt':                   'wrt2aop019',
+               'appcontrol-operation-pick-audio.wgt':             'wrt2aos021',
+               'appcontrol-operation-pick-video.wgt':             'wrt1nj0023',
+               'appcontrol-operation-search.wgt':                 'wrt2aos020',
+               'appcontrol-operation-send.wgt':                   'wrt2aos021',
+               'appcontrol-operation-share.wgt':                  'wrt1nj0030',
+               'appcontrol-operation-view.wgt':                   'wrt2aov022',
+               'appcontrol-operation-view-3gpp.wgt':              'wrt1nj0018',
+               'appcontrol-operation-view-aac.wgt':               'wrt1nj0014',
+               'appcontrol-operation-view-amr.wgt':               'wrt1nj0015',
+               'appcontrol-operation-view-bmp.wgt':               'wrt1nj0011',
+               'appcontrol-operation-view-gif.wgt':               'wrt1nj0012',
+               'appcontrol-operation-view-jpeg.wgt':              'wrt1nj0010',
+               'appcontrol-operation-view-mp3.wgt':               'wrt1nj0016',
+               'appcontrol-operation-view-mp4.wgt':               'wrt1nj0019',
+               'appcontrol-operation-view-png.wgt':               'wrt1nj0013',
+               'appcontrol-operation-view-wav.wgt':               'wrt1nj0017',
+               'appcontrol-test-app.wgt':                         'wrt1nj0009'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    //gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt b/tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt
new file mode 100755 (executable)
index 0000000..9f9d1f2
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html b/tv/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html
new file mode 100755 (executable)
index 0000000..7d2a2e4
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main1.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"app-control-complex-one-uri" test Step: </p>
+            <ol>
+              <li>Press button "open7".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A "PASS" displayed on the screen, then jumped to another page, the new page auto closed in 5 seconds, finally a "PASS" and a "close" button displayed on the screen.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt
new file mode 100755 (executable)
index 0000000..48ee2b7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt
new file mode 100755 (executable)
index 0000000..aa7a643
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt
new file mode 100755 (executable)
index 0000000..465be31
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt
new file mode 100755 (executable)
index 0000000..41cb9b5
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt
new file mode 100755 (executable)
index 0000000..19ec1a4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt
new file mode 100755 (executable)
index 0000000..1f3b60e
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt
new file mode 100755 (executable)
index 0000000..de0e468
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt
new file mode 100755 (executable)
index 0000000..024b132
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt
new file mode 100755 (executable)
index 0000000..6331a69
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt
new file mode 100755 (executable)
index 0000000..ab6d513
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt
new file mode 100755 (executable)
index 0000000..0fc95fd
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt
new file mode 100755 (executable)
index 0000000..f616491
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt
new file mode 100755 (executable)
index 0000000..2843184
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt
new file mode 100755 (executable)
index 0000000..a151a76
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt
new file mode 100755 (executable)
index 0000000..c3584d1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt
new file mode 100755 (executable)
index 0000000..43cbbf3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt
new file mode 100755 (executable)
index 0000000..ca9d5a4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt
new file mode 100755 (executable)
index 0000000..c70a9ea
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html
new file mode 100755 (executable)
index 0000000..f3e0753
--- /dev/null
@@ -0,0 +1,323 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main2.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"appcontrol-operation-view-3gpp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/3gpp, URI is "Videos/3gpp.3gpp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-3gpp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-aac" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/aac, URI is "Sounds/aac.aac" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-aac" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-amr" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/amr, URI is "Sounds/amr.amr" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-amr" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-bmp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/bmp, URI is "Images/bmp.bmp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-bmp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-gif" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/gif, URI is "Images/gif.gif" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-gif" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-jpeg" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/jpeg, URI is "Images/jpg.jpg" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-jpeg" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp3" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/mp3, URI is "Sounds/mp3.mp3" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp3" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp4" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/mp4, URI is "Videos/mp4.mp4" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp4" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-png" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/png, URI is "Images/png.png" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-png" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-wav" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/wav, URI is "Sounds/wav.wav" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-wav" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-createcontent-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is create_content, MIME is video/*,URI is any video in the list. then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-createcontent-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-dial-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is dial, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-dial-null" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel, URI is "tel:10010" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-call-tel" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-call-nulluri" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-audio" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is audio/*,URI is any audio file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-audio" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is video/*,URI is any video file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-multi_share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is multi_share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-multi_share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt
new file mode 100755 (executable)
index 0000000..4e58d37
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt b/tv/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt
new file mode 100755 (executable)
index 0000000..f1db0cf
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControlExtending/index.html b/tv/tct-behavior-tests/tests/AppControlExtending/index.html
new file mode 100755 (executable)
index 0000000..a9a0904
--- /dev/null
@@ -0,0 +1,90 @@
+6<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Test the custom feature</li>
+                <li>
+                    <div data-role="button" id="install1" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Test the regular feature</li>
+                <li>
+                    <div data-role="button" id="install2" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Packages Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of launching the Application which control by user instead of system. Tests the two test Applications could be launched by App ID or customized AppControl's "operation" attribute by user.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the custom package.</li>
+              <li>Click the "Launch" button to launch the custom package.</li>
+              <li>Click the "Install" button to install the regular package.</li>
+              <li>Click the "Launch" button to launch the regular package.</li>
+              <li>Click the "Uninstall" button to uninstall the two widgets.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the test Applications launch successfully.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/AppControlExtending/js/main.js b/tv/tct-behavior-tests/tests/AppControlExtending/js/main.js
new file mode 100755 (executable)
index 0000000..edb15cd
--- /dev/null
@@ -0,0 +1,271 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+var installUrl1;
+var installUrl2;
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install1").bind("vclick", function() {
+        install(installUrl1, "install1");
+    });
+    $("#install2").bind("vclick", function() {
+        install(installUrl2, "install2");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch("app-control1");
+        if(checkInstalledPkg("apcontrol2")) {
+            $("#install2").addClass("ui-disabled");
+            $("#launch2").removeClass("ui-disabled");
+        } else {
+            $("#install2").removeClass("ui-disabled");
+        }
+    });
+    $("#launch2").bind("vclick", function() {
+        launch("app-control2");
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        ["apcontrol1", "apcontrol2"].forEach(function(package_id) {
+            if(checkInstalledPkg(package_id)) {
+                setTimeout(function() {
+                    uninstall(package_id);
+                }, 1000);
+            }
+        });
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#install2").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("apcontrol1")) {
+        $("#install1").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        alert("The package " + packageId + " is uninstalled");
+    }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl1 = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "app_control_regular_wgt.wgt")
+            {
+                var Url2 = files[i].toURI();
+                installUrl2 = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            if(type == "install1") {
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+            if(type == "install2") {
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(type == "install1") {
+                $("#install1").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Install</div>');
+            }
+            if(type == "install2") {
+                $("#install2").addClass("ui-disabled");
+                $("#launch2").removeClass("ui-disabled");
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Install</div>');
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+
+    var onUninstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            if(packageId == "apcontrol1") {
+                $("#launch1").addClass("ui-disabled");
+            }
+            if(packageId == "apcontrol2") {
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(option) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        if (option == "app-control1"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl1_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, null, onSuccess, onError, null);
+        }else if (option == "app-control2"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl2_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, "apcontrol2.AppcontrolRegularWgt", onSuccess, onError, null);
+        }
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/app_control_custom_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_custom_wgt Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "app_control_regular_wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/app_control_regular_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_regular_wgt Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControlExtending/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt b/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt
new file mode 100755 (executable)
index 0000000..a42f57c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom_wgt differ
diff --git a/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt b/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt
new file mode 100755 (executable)
index 0000000..0cd2ed4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular_wgt differ
diff --git a/tv/tct-behavior-tests/tests/Application/NOTICE b/tv/tct-behavior-tests/tests/Application/NOTICE
new file mode 100755 (executable)
index 0000000..cd11443
--- /dev/null
@@ -0,0 +1,23 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/audio.acc,
+res/audio.amr,
+res/audio.mp3,
+res/audio.wav,
+res/iconA.png,
+res/iconV.png,
+res/image.bmp,
+res/image.gif,
+res/image.jpeg,
+res/image.png,
+res/video.3gp,
+res/video.mp4 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/Application/index.html b/tv/tct-behavior-tests/tests/Application/index.html
new file mode 100755 (executable)
index 0000000..a153343
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#image ul, li {list-style:none;}
+#audio ul, li {list-style:none;}
+#video ul, li {list-style:none;}
+#image img {margin:5px; width:65px; height:70px}
+#audio img {margin:5px; width:70px; height:70px}
+#video img {margin:5px; width:70px; height:70px}
+</style>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Image</li>
+            </ul>
+            <ul data-role="listview" id="image"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Audio</li>
+            </ul>
+            <ul data-role="listview" id="audio"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl Video</li>
+            </ul>
+            <ul data-role="listview" id="video"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">AppControl File</li>
+                <li id="allFile">All File</li>
+                <li id="imageFile">Image File</li>
+                <li id="audioFile">Audio File</li>
+                <li id="videoFile">Video File</li>
+                <li data-role="list-divider">AppControl Browser</li>
+                <li id="tizen">https://www.tizen.org</li>
+                <li><input type="text" id="url" value="http://"/><div data-role="button" id="browser">Browser</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if AppControls are supported</p><br>
+                <p>1. Select a thumbnail in the AppControl Image category</p>
+                <p>2. Check if the original image is displayed</p>
+                <p>3. Select a music file in the AppControl Audio category</p>
+                <p>4. Check if the music file is played</p>
+                <p>5. Select a video file in the AppControl Video category</p>
+                <p>6. Check if the video file is played</p>
+                <p>5. Select or Input the URL in the AppControl Browser category</p>
+                <p>6. Check if the URL is browsed</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Application/js/main.js b/tv/tct-behavior-tests/tests/Application/js/main.js
new file mode 100755 (executable)
index 0000000..131be5a
--- /dev/null
@@ -0,0 +1,318 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path = "", mime = "", name = "", Url = "";
+var thumAudio = "", thumVideo = "";
+var sharedDir;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#image").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlImage(path, mime, name);
+        return false;
+    });
+    $("#audio").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlAudio(path, mime, name);
+        return false;
+    });
+    $("#video").delegate("li", "vclick", function() {
+        name = $(this).data("file");
+        path = $(this).data("url");
+        mime = $(this).data("mime");
+        setAppControlVideo(path, mime, name);
+        return false;
+    });
+    $("#allFile").bind("vclick", function() {
+        setAppControlFile("*/*");
+        return false;
+    });
+    $("#imageFile").bind("vclick", function() {
+        setAppControlFile("image/*");
+        return false;
+    });
+    $("#videoFile").bind("vclick", function() {
+        setAppControlFile("video/*");
+        return false;
+    });
+    $("#audioFile").bind("vclick", function() {
+        setAppControlFile("audio/*");
+        return false;
+    });
+    $("#tizen").bind("vclick", function() {
+        setAppControlBrowser("https://www.tizen.org");
+        return false;
+    });
+    $("#browser").bind("vclick", function() {
+        var url = $("#url").val();
+        setAppControlBrowser(url);
+        return false;
+    });
+    applicationPre();
+    file();
+});
+
+function file() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            var text = files[i].name.substring(0, 5);
+            if(text == "iconA")
+            {
+                thumAudio = files[i].toURI();
+                thumAudio = thumAudio.replace("file:///", "/");
+            }
+            if(text == "iconV")
+            {
+                thumVideo = files[i].toURI();
+                thumVideo = thumVideo.replace("file:///", "/");
+            }
+        }
+        file2();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function file2() {
+    var documentsDir, strImage = "", strVideo = "", strAudio = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var mime = files[i].name.replace(".", "/");
+                var text = files[i].name.substring(0, 5);
+                var file = files[i].name;
+                Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                if(text == "image")
+                    strImage += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + Url + '" alt="" />' + file + '</li>';
+                if(text == "audio")
+                    strAudio += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumAudio + '" alt="" />' + file + '</li>';
+                if(text == "video")
+                    strVideo += '<li data-url="' + Url + '" data-mime="' + mime + '" data-file="' + file + '"><img src="' + thumVideo + '" alt="" />' + file + '</li>';
+            }
+        }
+        $("#image").html(strImage).trigger("create").listview("refresh");
+        $("#audio").html(strAudio).trigger("create").listview("refresh");
+        $("#video").html(strVideo).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'wgt-package/tests/Application/res/',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function setAppControlImage(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlAudio(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlVideo(url, mime, name) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            sharedDir+"/data/"+name,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlFile(mime) {
+    var app = {attach:[]};
+    app.attach = [];
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/pick",
+            null,
+            mime);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+                app.attach.push(data[0].value[0]);
+                alert("Select File : " + app.attach[0]);
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function setAppControlBrowser(url) {
+    var appControl = new tizen.ApplicationControl(
+            "http://tizen.org/appcontrol/operation/view",
+            url,
+            null);
+    var appControlReplyCB = {
+            onsuccess: function(data) {
+            },
+            onfailure: function() {
+            }
+    };
+    try {
+        tizen.application.launchAppControl(appControl, null,
+        function(){
+            console.log("launch appControl succeeded");
+        },
+        function(e){
+            alert("launch appControl failed. Reason: " + e.message);
+        },
+        appControlReplyCB);
+    } catch(e)
+    {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function applicationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            sharedDir = tizen.application.getAppSharedURI();
+            sharedDir = sharedDir.replace("file:///", "/");
+            documentsDir.copyTo(
+                files[i].fullPath,
+                sharedDir+"/data/"+files[i].name,
+                true,
+                function() {
+                    console.log("PKGID/shared/data/ File Copy");
+                },
+                function(e){
+                    console.log("Error : " + e.name);
+                });
+        }
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Application/res',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/Application/res/audio.aac b/tv/tct-behavior-tests/tests/Application/res/audio.aac
new file mode 100755 (executable)
index 0000000..dea42a8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/audio.aac differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/audio.amr b/tv/tct-behavior-tests/tests/Application/res/audio.amr
new file mode 100755 (executable)
index 0000000..81093ff
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/audio.amr differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/audio.mp3 b/tv/tct-behavior-tests/tests/Application/res/audio.mp3
new file mode 100755 (executable)
index 0000000..2b62d4c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/audio.mp3 differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/audio.wav b/tv/tct-behavior-tests/tests/Application/res/audio.wav
new file mode 100755 (executable)
index 0000000..f336ec8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/audio.wav differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/iconA.png b/tv/tct-behavior-tests/tests/Application/res/iconA.png
new file mode 100755 (executable)
index 0000000..394dfa3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/iconA.png differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/iconV.png b/tv/tct-behavior-tests/tests/Application/res/iconV.png
new file mode 100755 (executable)
index 0000000..a809e1e
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/iconV.png differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/image.bmp b/tv/tct-behavior-tests/tests/Application/res/image.bmp
new file mode 100755 (executable)
index 0000000..2bc4bb5
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/image.bmp differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/image.gif b/tv/tct-behavior-tests/tests/Application/res/image.gif
new file mode 100755 (executable)
index 0000000..c2d950d
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/image.gif differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/image.jpeg b/tv/tct-behavior-tests/tests/Application/res/image.jpeg
new file mode 100755 (executable)
index 0000000..bce27ff
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/image.jpeg differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/image.png b/tv/tct-behavior-tests/tests/Application/res/image.png
new file mode 100755 (executable)
index 0000000..ee90c37
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/image.png differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/video.3gp b/tv/tct-behavior-tests/tests/Application/res/video.3gp
new file mode 100755 (executable)
index 0000000..0e98843
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/video.3gp differ
diff --git a/tv/tct-behavior-tests/tests/Application/res/video.mp4 b/tv/tct-behavior-tests/tests/Application/res/video.mp4
new file mode 100755 (executable)
index 0000000..e203ae2
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Application/res/video.mp4 differ
diff --git a/tv/tct-behavior-tests/tests/ApplicationInvisible/css/main.css b/tv/tct-behavior-tests/tests/ApplicationInvisible/css/main.css
new file mode 100755 (executable)
index 0000000..5296294
--- /dev/null
@@ -0,0 +1,211 @@
+body{
+
+}
+.container {
+    padding: 50px;
+    text-align: center;
+}
+
+.timer {
+    padding: 10px;
+    background: -webkit-linear-gradient(top, #222, #444);
+    background: -moz-linear-gradient(top, #222, #444);
+    background: -ms-linear-gradient(top, #222, #444);
+    background: -o-linear-gradient(top, #222, #444);
+    background: linear-gradient(top, #222, #444);
+    overflow: hidden;
+    display: inline-block;
+    border: 7px solid #efefef;
+    border-radius: 5px;
+    position: relative;
+    box-shadow: inset 0 -2px 10px 1px rgba(0, 0, 0, 0.75), 0 5px 20px -10px rgba(0, 0, 0, 1);
+}
+
+.cell1 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.cell2 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.numbers {
+    width: 0.6em;
+    line-height: 40px;
+    font-family: digital, arial, verdana;
+    text-align: center;
+    color: #fff;
+    position: absolute;
+    top: 0;
+    left: 0;
+
+}
+
+
+#start:checked~.timer .numbers {
+  -webkit-animation-play-state: running;
+  -moz-animation-play-state: running;
+  -o-animation-play-state: running;
+  -ms-animation-play-state: running;
+  animation-play-state: running;
+}
+
+.moveten {
+
+    -webkit-animation: moveten 1s steps(10, end) infinite;
+    -moz-animation: moveten 1s steps(10, end) infinite;
+    -o-animation: moveten 1s steps(10, end) infinite;
+    -ms-animation: moveten 1s steps(10, end) infinite;
+    animation: moveten 1s steps(10, end) infinite;
+
+}
+.movesix {
+    -webkit-animation: movesix 1s steps(6, end) infinite;
+    -moz-animation: movesix 1s steps(6, end) infinite;
+    -o-animation: movesix 1s steps(6, end) infinite;
+    -ms-animation: movesix 1s steps(6, end) infinite;
+    animation: movesix 1s steps(6, end) infinite;
+}
+
+
+.second {
+ -webkit-animation-duration: 10s;
+ -moz-animation-duration: 10s;
+ -o-animation-duration: 10s;
+ -ms-animation-duration: 10s;
+ animation-duration: 10s;
+}
+.tensecond {
+  /*60 times .second*/
+  -webkit-animation-duration: 60s;
+  -moz-animation-duration: 60s;
+  -o-animation-duration: 60s;
+  -ms-animation-duration: 60s;
+  animation-duration: 60s;
+}
+
+.milisecond {
+  /*1/10th of .second*/
+  -webkit-animation-duration: 1s;
+    -moz-animation-duration: 1s;
+    -o-animation-duration: 1s;
+    -ms-animation-duration: 1s;
+    animation-duration: 1s;
+}
+.tenmilisecond {
+  -webkit-animation-duration: 0.1s;
+  -moz-animation-duration: 0.1s;
+  -ms-animation-duration: 0.1s;
+  -o-animation-duration: 0.1s;
+  animation-duration: 0.1s;
+}
+.hundredmilisecond {
+  -webkit-animation-duration: 0.01s;
+  -moz-animation-duration: 0.01s;
+  -o-animation-duration: 0.01s;
+  -ms-animation-duration: 0.01s;
+  animation-duration: 0.01s;
+}
+
+.minute {
+  /*60 times .second*/
+  -webkit-animation-duration: 600s;
+    -moz-animation-duration: 600s;
+    -o-animation-duration: 600s;
+    -ms-animation-duration: 600s;
+    animation-duration: 600s;
+}
+.tenminute {
+  /*60 times .minute*/
+  -webkit-animation-duration: 3600s;
+    -moz-animation-duration: 3600s;
+    -ms-animation-duration: 3600s;
+    -o-animation-duration: 3600s;
+    animation-duration: 3600s;
+}
+
+.hour {
+  /*60 times .minute*/
+  -webkit-animation-duration: 36000s;
+    -moz-animation-duration: 36000s;
+    -ms-animation-duration: 36000s;
+    -o-animation-duration: 36000s;
+    animation-duration: 36000s;
+}
+.tenhour {
+  /*10 times .hour*/
+  -webkit-animation-duration: 360000s;
+    -moz-animation-duration: 360000s;
+    -o-animation-duration: 360000s;
+    -ms-animation-duration: 360000s;
+    animation-duration: 360000s;
+}
+
+@-webkit-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-webkit-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+
+@-moz-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-moz-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-o-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-o-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-ms-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-ms-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
diff --git a/tv/tct-behavior-tests/tests/ApplicationInvisible/index.html b/tv/tct-behavior-tests/tests/ApplicationInvisible/index.html
new file mode 100755 (executable)
index 0000000..b1478a0
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <title>ApplicationInvisible</title>
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+  <link rel="stylesheet" type="text/css" href="css/main.css" />
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider"><div>Enter time</div></li><li><div>
+                    <span id="en_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Current time</div></li><li><div>
+                    <span id="current_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>Difference time</div></li><li><div>
+                    <span id="diff_time"></span>
+                </div></li>
+                <li data-role="list-divider"><div>JS time</div></li><li><div>
+        <div class="container">
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers" id="js_time_tensecond"></div>
+                </div>
+                                <div class="cell2">
+                    <div class="numbers" id="js_time_second"></div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+                <li data-role="list-divider"><div>Animation time :</div></li><li><div>
+        <div class="container">
+            <!-- time to add the controls -->
+            <input id="start" name="controls" type="radio" checked hidden />
+            <div class="timer">
+                <div class="cell1">
+                    <div class="numbers tensecond movesix">0 1 2 3 4 5 6</div>
+                </div>
+                <div class="cell2">
+                    <div class="numbers second moveten">0 1 2 3 4 5 6 7 8 9</div>
+                </div>
+            </div>
+        </div>
+                </div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies js and css animation will suspend when application goes invisible.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Press the "Home" button on device to return to the menu.</li>
+              <li>Long press "Home" button to start the "Task switcher" and select "tct-behavior-tests".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "JS time" is different from the "Difference time".</li>
+              <li>The "Animation time" is different from the "Difference time".</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationInvisible/js/main.js b/tv/tct-behavior-tests/tests/ApplicationInvisible/js/main.js
new file mode 100755 (executable)
index 0000000..64d5bf1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+var systime = new Date();
+var timer = systime.getTime();
+var timer2 = systime.toString().substr(15, 16);
+// Time interval
+var t = 1000;
+//Counter of js
+var Num = 0;
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    Refresh();
+    setInterval("Refresh();", t);
+    //The time when entry this page timer2
+    $("#en_time").html(timer2);
+    DisablePassButton();
+    document.addEventListener(visibilitychange, notification);
+});
+
+function Refresh() {
+    Num = Num + 1;
+    //The current time
+    var curtime = new Date();
+    var timer3 = curtime.toString().substr(15, 16);
+    $("#current_time").html(timer3);
+    //The true timer: NowTime - entryTime
+    $("#diff_time").html(Math.floor((new Date().getTime()-timer)/t) % 60);
+    //The timer of js
+    $("#js_time_tensecond").html((Num-1) / 10);
+    $("#js_time_second").html((Num-1) % 10);
+    if(Num == 60){
+        Num = 0;
+    }
+}
+
+function notification() {
+    EnablePassButton();
+}
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/index.html b/tv/tct-behavior-tests/tests/ApplicationLifecycle/index.html
new file mode 100755 (executable)
index 0000000..06ac0b7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="lifecycle-background-foreground-nosevice">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-nosevice.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-nosevice</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-background-foreground-service">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-service.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-service</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-page-visibility-visibilitychange">
+                    <a href="javascript:goToApp('res/lifecycle-page-visibility-visibilitychange.html')" data-transition="slide" style="">
+                        <h2>lifecycle-page-visibility-visibilitychange</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-powerfailure-reinstall">
+                    <a href="javascript:goToApp('res/lifecycle-powerfailure-reinstall.html')" data-transition="slide" style="">
+                        <h2>lifecycle-powerfailure-reinstall</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies for applications whose execution was suspended the WRT must resume JavaScript execution and rendering(including CSS animations) when Web Application enters visible state.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js b/tv/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js
new file mode 100755 (executable)
index 0000000..b990feb
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt3css172',
+                    'wrt3css171',
+                    'wrt3css170',
+                    'wrt1nj0035',
+                    'wrt1nj0036',
+                    'wrt1nj0033',
+                    'wrt1nj0037',
+                    'wrt3lrj019');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ApplicationLifecycle";
+var RESULT_FILE_NAME = "tct-behavior-child.applicationlifecycle.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js b/tv/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js
new file mode 100755 (executable)
index 0000000..ab10dea
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ApplicationLifecycle/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html
new file mode 100755 (executable)
index 0000000..cc99047
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-nosevice">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-nosevice"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0035.lifecycleBackgroundForegroundNoservice"/>
+                <input type="hidden" id="package_id" value="wrt1nj0035"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt
new file mode 100755 (executable)
index 0000000..0dd8ad0
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html
new file mode 100755 (executable)
index 0000000..22c8057
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-service">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-service"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0036.lifecycleBackgroundForegroundService"/>
+                <input type="hidden" id="package_id" value="wrt1nj0036"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt
new file mode 100755 (executable)
index 0000000..c5c799a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html
new file mode 100755 (executable)
index 0000000..cc46910
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-page-visibility-visibilitychange">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-page-visibility-visibilitychange"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0033.lifecyclePageVisibilitychange"/>
+                <input type="hidden" id="package_id" value="wrt1nj0033"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt
new file mode 100755 (executable)
index 0000000..367bd3a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html
new file mode 100755 (executable)
index 0000000..8db4e4f
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-powerfailure-reinstall">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-powerfailure-reinstall"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0037.lifecyclepowerfailurereinstall"/>
+                <input type="hidden" id="package_id" value="wrt1nj0037"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+                         <li>Use another device with same image and same behavior tool to test.</li>
+              <li>In another device, click the "Install" button to install the widget.</li>
+              <li>In another device, remove battery soon after install the test widget.</li>
+                         <li>Reboot another device and goto behavior to reinstall widget by click the "Install" button.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+                         <li>Another device have installed same version behavior tool</li>
+              <li>The widget installed successfully</li>
+              <li>Device power off, widget install fail</li>
+              <li>Web Application recover to its original state prior, can re-install the application</li>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt
new file mode 100755 (executable)
index 0000000..f360a77
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt differ
diff --git a/tv/tct-behavior-tests/tests/Bluetooth/NOTICE b/tv/tct-behavior-tests/tests/Bluetooth/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/Bluetooth/index.html b/tv/tct-behavior-tests/tests/Bluetooth/index.html
new file mode 100755 (executable)
index 0000000..049508a
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Bluetooth Select(Server or Client)</li>
+                <li><div data-role="button" id="server">Server</div></li>
+                <li><div data-role="button" id="client">Client</div></li>
+                <li data-role="list-divider">Write Message</li>
+                <li><input type="text" id="wmsg" value=""/></li>
+                <li><div data-role="button" id="send">Send Message</div></li>
+                <li data-role="list-divider">Receive Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">Bluetooth Disconnect</li>
+                <li><div data-role="button" id="disconnect">Disconnect</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Bluetooth communication between devices supported</p><br>
+                <p>1. You must install the TCT-behavior Test both on the Server device and the Client device</p>
+                <p>2. The one side device selects a Server and the other side device selects a Client</p>
+                <p>3. Establishing a connection between two Bluetooth devices</p>
+                <p>4. Fill in Message and Click Send Message</p>
+                <p>5. Check the message on the other device</p>
+                <p>6. Click the Disconnect button and Check if the Bluetooth disconnected</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Bluetooth/js/main.js b/tv/tct-behavior-tests/tests/Bluetooth/js/main.js
new file mode 100755 (executable)
index 0000000..cb6d662
--- /dev/null
@@ -0,0 +1,309 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var serverConnected = false;
+var clientConnected = false;
+var globalSocket = null;
+var adapter = null;
+var type = null;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#server").bind("vclick", function() {
+        setListener();
+        startServer();
+        $("#client").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "server";
+    });
+    $("#client").bind("vclick", function() {
+        setListener();
+        connectToServer();
+        $("#server").addClass("ui-disabled");
+        $("#disconnect").removeClass("ui-disabled");
+        type = "client";
+    });
+    $("#send").bind("vclick", function() {
+        if(type == "server")
+            sendMsgS();
+        if(type == "client")
+            sendMsgC();
+    });
+    $("#disconnect").bind("vclick", function() {
+        adapter.unsetChangeListener();
+        disconnect();
+        serverConnected = false;
+        clientConnected = false;
+        type = null;
+        $("#server").removeClass("ui-disabled");
+        $("#client").removeClass("ui-disabled");
+        $("#disconnect").addClass("ui-disabled");
+        $("#send").addClass("ui-disabled");
+    });
+    $("#send").addClass("ui-disabled");
+    $("#disconnect").addClass("ui-disabled");
+});
+
+function setListener() {
+    var changeListener = {
+        onstatechanged: function(powered) {
+            console.log ("Power state is changed into: " + powered);
+        },
+        onnamechanged: function(name) {
+            console.log("Name is changed to: " + name);
+        },
+        onvisibilitychanged: function(visible) {
+            console.log("Visibility is changed into: " + visible);
+        }
+    };
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    adapter.setChangeListener(changeListener);
+}
+
+function startServer() {
+    if (clientConnected) {
+        alert("Already connected");
+        return;
+    }
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    console.log("StartServer Name : " + "BehaviorBT");
+    function registerSuccessCallback(handler) {
+        chatServiceHandler = handler;
+        alert("Wait for client...");
+        console.log("Chat service register success");
+        chatServiceHandler.onconnect = function(socket) {
+            globalSocket = socket;
+            var peerDevice = socket.peer;
+            alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+            console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+            clientConnected = true;
+            $("#send").removeClass("ui-disabled");
+            socket.onmessage = function() {
+                var data = socket.readData();
+                var recvmsg = "";
+                for (var i = 0; i < data.length;i++) {
+                    recvmsg += String.fromCharCode(data[i]);
+                }
+                recvmsg = decodeURIComponent(recvmsg);
+                document.getElementById("rmsg").innerHTML = "Client : " + recvmsg;
+                alert("Client : " + recvmsg);
+            };
+            socket.onerror = function(e) {
+                console.log("Socket error");
+                clientConnected = false;
+                socket.close();
+            };
+            socket.onclose = function() {
+                clientConnected = false;
+                console.log("Socket disconnected");
+            };
+        };
+    };
+    function onError(e) {
+        console.log("Operation error");
+        clientConnected = false;
+    }
+    function setVisibleAndRegister() {
+        adapter.setVisible(true, function() {
+            adapter.registerRFCOMMServiceByUUID(
+                    "5BCE9431-6C75-32AB-AFE0-2EC108A30860",
+                    "My service",
+                    registerSuccessCallback,
+                    onError
+            );
+        });
+    }
+    function setNameWithTimer() {
+        adapter.setName("BehaviorBT", function() {
+            console.log("Set name ok");
+            setVisibleAndRegister();
+        }, onError);
+    }
+    function onSuccess() {
+        console.log("Turn on success");
+        setTimeout(setNameWithTimer, 3000);
+    }
+    adapter.setPowered(true, onSuccess, function() {
+        console.log("Device is busy");
+        onError();
+    });
+}
+
+function connectToServer() {
+    if (serverConnected) {
+        alert("Already connected");
+        return;
+    }
+    console.log("Connect to Server " + "BehaviorBT");
+    adapter = tizen.bluetooth.getDefaultAdapter();
+    function onSocketConnected(socket) {
+        globalSocket = socket;
+        var peerDevice = socket.peer;
+        alert("Socket state:" + socket.state + " [" + peerDevice.name + "(" + peerDevice.address + ")]");
+        console.log("Server connented address(" + socket.peer.address + ")" + " connected service uuid: " + socket.uuid);
+        serverConnected = true;
+        $("#send").removeClass("ui-disabled");
+        socket.onmessage = function() {
+            var data = socket.readData();
+            var recvmsg = "";
+            for (var i = 0; i < data.length;i++) {
+                recvmsg += String.fromCharCode(data[i]);
+            }
+            recvmsg = decodeURIComponent(recvmsg);
+            document.getElementById("rmsg").innerHTML = "Server : " + recvmsg;
+            alert("Server : " + recvmsg);
+        };
+        socket.onerror = function(e) {
+            console.log("Socket error");
+            serverConnected = false;
+            socket.close();
+        };
+        socket.onclose = function() {
+            serverConnected = false;
+            console.log("Socket disconnected");
+        };
+    }
+    function onSocketError(e) {
+        console.log("Socket error: " + e.message);
+        serverConnected = false;
+    }
+    function onError(e) {
+        console.log("Operation error");
+        serverConnected = false;
+    }
+    function getDeviceSuccessCB(device) {
+        if (device != null) {
+            console.log("Get device and then try to connect: " + "5BCE9431-6C75-32AB-AFE0-2EC108A30860");
+            device.connectToServiceByUUID("5BCE9431-6C75-32AB-AFE0-2EC108A30860", onSocketConnected, onSocketError);
+        }
+        else
+            console.log("Get device infomration error");
+    }
+    function bondSuccess(device) {
+        console.log("Bond success!");
+        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+    }
+    var discoverDevicesSuccessCallback = {
+            onstarted : function() {
+                alert("Device discovery start!");
+            },
+            ondevicefound: function (device) {
+                var msg = device.name + "("+ device.address + ")";
+                if (device.name == "BehaviorBT") {
+                    adapter.stopDiscovery(function() {});
+                    console.log("Try to connect");
+                    if (device.isBonded == true) {
+                        console.log("Try to get device information");
+                        adapter.getDevice(device.address, getDeviceSuccessCB, onError);
+                    }
+                    else {
+                        console.log("Try to bond");
+                        adapter.createBonding(device.address, bondSuccess, onError);
+                    }
+                }
+                else
+                    console.log(msg + " found");
+            },
+            ondevicedisappeared: function(device) {},
+            onfinished : function (devices) {
+                alert("Discovery finished");
+            }
+    };
+    function onSuccess() {
+        console.log("Turn on success");
+        adapter.discoverDevices(discoverDevicesSuccessCallback, onError);
+    }
+    console.log("Try to turn on");
+    adapter.setPowered(true, onSuccess, onError);
+}
+
+function sendMsgS() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && clientConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function sendMsgC() {
+    var inputText = document.getElementById("wmsg");
+    var textmsg = inputText.value;
+    if(textmsg.length != 0){
+        var sendtextmsg = new Array();
+        textmsg = encodeURIComponent(textmsg);
+        for (var i = 0; i < textmsg.length; i++)
+            sendtextmsg[i] = textmsg.charCodeAt(i);
+        if (globalSocket != null && serverConnected == true) {
+            var length = globalSocket.writeData(sendtextmsg);
+            if (length != 0)
+                console.log("writeData");
+            else
+                console.log("writeData fail");
+        }
+        else
+            console.log("socket is not set");
+    }
+    else
+        alert("Fill in Send Message");
+}
+
+function disconnect() {
+    if (serverConnected == true && globalSocket != null) {
+        try {
+            globalSocket.close();
+            alert("Disconnected");
+        }
+        catch(e) {
+            console.log(e.message);
+        }
+    }
+    try {
+        if (adapter != null)
+            adapter.setPowered(
+                    false,
+                    function() {
+                        alert("Bluetooth Power Off");
+                        globalSocket = null;
+                        serverConnected = false;
+                        clientConnected = false;
+                        adapter = null;
+                        type = null;
+                    }, function(e) {
+                        console.log(e.message);
+                    }
+            );
+    }
+    catch(e) {
+        console.log(e.message);
+    }
+}
diff --git a/tv/tct-behavior-tests/tests/CSP/index.html b/tv/tct-behavior-tests/tests/CSP/index.html
new file mode 100755 (executable)
index 0000000..afb641c
--- /dev/null
@@ -0,0 +1,227 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="csp-none">
+                    <a href="javascript:goToApp('res/csp-none.html')" data-transition="slide" style="">
+                        <h2>csp-none</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:goToApp('res/csp-self.html')" data-transition="slide" style="">
+                        <h2>csp-self</h2>
+                    </a>
+                </li>
+                <li id="csp-asterisk">
+                    <a href="javascript:goToApp('res/csp-asterisk.html')" data-transition="slide" style="">
+                        <h2>csp-asterisk</h2>
+                    </a>
+                </li>
+                <li id="csp-cross-origin">
+                    <a href="javascript:goToApp('res/csp-cross-origin.html')" data-transition="slide" style="">
+                        <h2>csp-cross-origin</h2>
+                    </a>
+                </li>
+                <li id="default-policy-by-directives-csp">
+                    <a href="javascript:goToApp('res/default-policy-by-directives-csp.html')" data-transition="slide" style="">
+                        <h2>default-policy-by-directives-csp</h2>
+                    </a>
+                </li>
+                <li id="default-policy-by-directives-report-only">
+                    <a href="javascript:goToApp('res/default-policy-by-directives-report-only.html')" data-transition="slide" style="">
+                        <h2>default-policy-by-directives-report-only</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test default-src directive</li>
+                <li id="default-src_none">
+                    <a href="javascript:goToApp('res/default-src_none.html')" data-transition="slide" style="">
+                        <h2>default-src-none</h2>
+                    </a>
+                </li>
+                <li id="default-src_self">
+                    <a href="javascript:goToApp('res/default-src_self.html')" data-transition="slide" style="">
+                        <h2>default-src-self</h2>
+                    </a>
+                </li>
+                <li id="default-src_asterisk">
+                    <a href="javascript:goToApp('res/default-src_asterisk.html')" data-transition="slide" style="">
+                        <h2>default-src-asterisk</h2>
+                    </a>
+                </li>
+                <li id="default-src_cross_origin">
+                    <a href="javascript:goToApp('res/default-src_cross_origin.html')" data-transition="slide" style="">
+                        <h2>default-src-cross-origin</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test sandbox directive</li>
+                <li id="sandbox-empty-ext">
+                    <a href="javascript:goToApp('res/sandbox-empty-ext.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-ext</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-int">
+                    <a href="javascript:goToApp('res/sandbox-empty-int.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-int</h2>
+                    </a>
+                </li>
+                <li id="sandbox-empty-inline">
+                    <a href="javascript:goToApp('res/sandbox-empty-inline.html')" data-transition="slide" style="">
+                        <h2>sandbox-empty-inline</h2>
+                    </a>
+                </li>
+                <li id="sandbox-same-origin-allow-scripts">
+                    <a href="javascript:goToApp('res/sandbox-same-origin-allow-scripts.html')" data-transition="slide" style="">
+                        <h2>sandbox-same-origin-allow-scripts</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test script-src directive</li>
+                <li id="script-src_none">
+                    <a href="javascript:goToApp('res/script-src_none.html')" data-transition="slide" style="">
+                        <h2>script-src-none</h2>
+                    </a>
+                </li>
+                <li id="script-src_inline_eval">
+                    <a href="javascript:goToApp('res/script-src_inline_eval.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-eval</h2>
+                    </a>
+                </li>
+                <!--<li id="script-src-inline-allow">
+                    <a href="javascript:goToApp('res/script-src-inline-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-block">
+                    <a href="javascript:goToApp('res/script-src-inline-block.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-allow">
+                    <a href="javascript:goToApp('res/script-src-eval-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-block">
+                    <a href="javascript:goToApp('res/script-src-eval-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-constructor-block">
+                    <a href="javascript:goToApp('res/script-src-eval-constructor-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-constructor-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-constructor-allow">
+                    <a href="javascript:goToApp('res/script-src-eval-constructor-allow.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-constructor-allow</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-timeout-block">
+                    <a href="javascript:goToApp('res/script-src-eval-timeout-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-timeout-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-eval-interval-block">
+                    <a href="javascript:goToApp('res/script-src-eval-interval-block.html')" data-transition="slide" style="">
+                        <h2>script-src-eval-interval-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-without-uri">
+                    <a href="javascript:goToApp('res/script-src-inline-without-uri.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-without-uri</h2>
+                    </a>
+                </li>
+                 <li id="script-src-inline-with-uri">
+                    <a href="javascript:goToApp('res/script-src-inline-with-uri.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-with-uri</h2>
+                    </a>
+                </li>
+                <li id="script-src-inline-with-uri-constructor">
+                    <a href="javascript:goToApp('res/script-src-inline-with-uri-constructor.html')" data-transition="slide" style="">
+                        <h2>script-src-inline-with-uri-constructor</h2>
+                    </a>
+                </li>
+                <li id="script-src-self-config-block">
+                    <a href="javascript:goToApp('res/script-src-self-config-block.html')" data-transition="slide" style="">
+                        <h2>script-src-self-config-block</h2>
+                    </a>
+                </li>
+                <li id="script-src-self-http-config-block">
+                    <a href="javascript:goToApp('res/script-src-self-http-config-block.html')" data-transition="slide" style="">
+                        <h2>script-src-self-http-config-block</h2>
+                    </a>
+                </li>-->
+                <li data-role="list-divider" role="heading">Test style-src directive</li>
+                <li id="style-src_self">
+                    <a href="javascript:goToApp('res/style-src_self.html')" data-transition="slide" style="">
+                        <h2>style-src-self</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of CSP worked well.</p>
+            <p>Test Pre-condition: </p>
+            <p>Tinyweb server launched with the command: "tinyweb -ssl_certificate /usr/share/tinyweb/server.pem -document_root / -listening_ports 80,8080,8081,8082,8083,8443s".</p>
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of CSP worked well when script-src, object-src, style-src, img-src, media-src, frame-src, font-src, connect-src directives set different values.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/js/main.js b/tv/tct-behavior-tests/tests/CSP/js/main.js
new file mode 100755 (executable)
index 0000000..8d38733
--- /dev/null
@@ -0,0 +1,317 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('beh1csp001',
+                    'beh1csp002',
+                    'beh1csp003',
+                    'beh1csp004',
+                    'beh1csp005',
+                    'beh1csp006',
+                    'beh1csp007',
+                    'beh1csp008',
+                    'beh1csp009',
+                    'beh1csp010',
+                    'beh1csp011',
+                    'beh1csp012',
+                    'beh1csp013',
+                    'beh1csp014',
+                    'beh1csp015',
+                    'beh1csp016',
+                    'beh1csp017',
+                    'WRTCSP0002',
+                    'WRTCSP0003',
+                    'WRTCSP0004',
+                    'WRTCSP0005',
+                    'WRTCSP0006',
+                    'WRTCSP0007',
+                    'WRTCSP0008',
+                    'WRTCSP0010',
+                    'WRTCSP0012',
+                    'WRTCSP0013',
+                    'WRTCSP0014',
+                    'WRTCSP0018',
+                    'WRTCSP0019');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CSP";
+var RESULT_FILE_NAME = "tct-behavior-child.csp.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/CSP/js/tests.js b/tv/tct-behavior-tests/tests/CSP/js/tests.js
new file mode 100755 (executable)
index 0000000..e1ad857
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CSP/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.html b/tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.html
new file mode 100755 (executable)
index 0000000..ea1eed6
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp001.cspasterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+               <li>$ web-tct_2.3/tools/python tct-config-device.py --check proc=tinyweb</li>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt b/tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt
new file mode 100755 (executable)
index 0000000..d704a1a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html b/tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html
new file mode 100755 (executable)
index 0000000..15baea4
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-cross-origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-cross-origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp002.cspcrossorigin"/>
+                <input type="hidden" id="package_id" value="beh1csp002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...8, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt b/tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt
new file mode 100755 (executable)
index 0000000..1980323
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-none.html b/tv/tct-behavior-tests/tests/CSP/res/csp-none.html
new file mode 100755 (executable)
index 0000000..6c943e2
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-none"/>
+                <input type="hidden" id="app_id"  value="beh1csp003.cspnone"/>
+                <input type="hidden" id="package_id" value="beh1csp003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-none.wgt b/tv/tct-behavior-tests/tests/CSP/res/csp-none.wgt
new file mode 100755 (executable)
index 0000000..6619609
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/csp-none.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-self.html b/tv/tct-behavior-tests/tests/CSP/res/csp-self.html
new file mode 100755 (executable)
index 0000000..4ed8eec
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-self"/>
+                <input type="hidden" id="app_id"  value="beh1csp004.cspself"/>
+                <input type="hidden" id="package_id" value="beh1csp004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/csp-self.wgt b/tv/tct-behavior-tests/tests/CSP/res/csp-self.wgt
new file mode 100755 (executable)
index 0000000..35cb2d7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/csp-self.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html
new file mode 100755 (executable)
index 0000000..2aa72e7
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-csp">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-csp"/>
+                <input type="hidden" id="app_id"  value="beh1csp016.DefaultPolicyByDirectivesCsp"/>
+                <input type="hidden" id="package_id" value="beh1csp016"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt
new file mode 100755 (executable)
index 0000000..4150912
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html
new file mode 100755 (executable)
index 0000000..9a0f395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-report-only">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-report-only"/>
+                <input type="hidden" id="app_id"  value="beh1csp017.DefaultPolicyByDirectivesReportOnly"/>
+                <input type="hidden" id="package_id" value="beh1csp017"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt
new file mode 100755 (executable)
index 0000000..9b6842c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html b/tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html
new file mode 100755 (executable)
index 0000000..9365374
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp015.defaultSrcAsterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt
new file mode 100755 (executable)
index 0000000..78dc060
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html b/tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html
new file mode 100755 (executable)
index 0000000..ebe5e6e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_cross_origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_cross_origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp014.defaultSrcCrossOrigin"/>
+                <input type="hidden" id="package_id" value="beh1csp014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...2, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt
new file mode 100755 (executable)
index 0000000..87ebf5c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_none.html b/tv/tct-behavior-tests/tests/CSP/res/default-src_none.html
new file mode 100755 (executable)
index 0000000..1b2d0c3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp013.defaultSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_none.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-src_none.wgt
new file mode 100755 (executable)
index 0000000..22dbfcf
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-src_none.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_self.html b/tv/tct-behavior-tests/tests/CSP/res/default-src_self.html
new file mode 100755 (executable)
index 0000000..f8eab61
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp012.defaultSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...5, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/default-src_self.wgt b/tv/tct-behavior-tests/tests/CSP/res/default-src_self.wgt
new file mode 100755 (executable)
index 0000000..936cbcb
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/default-src_self.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/movie_5.mp4 b/tv/tct-behavior-tests/tests/CSP/res/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/movie_5.mp4 differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html
new file mode 100755 (executable)
index 0000000..5479c3b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-ext">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-ext"/>
+                <input type="hidden" id="app_id"  value="beh1csp011.sandboxemptyext"/>
+                <input type="hidden" id="package_id" value="beh1csp011"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt
new file mode 100755 (executable)
index 0000000..b9e7dee
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html
new file mode 100755 (executable)
index 0000000..bb14fbb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-inline">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-inline"/>
+                <input type="hidden" id="app_id"  value="beh1csp010.sandboxemptyinline"/>
+                <input type="hidden" id="package_id" value="beh1csp010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt
new file mode 100755 (executable)
index 0000000..866c673
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html
new file mode 100755 (executable)
index 0000000..2f5f0fe
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-int">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-int"/>
+                <input type="hidden" id="app_id"  value="beh1csp009.sandboxemptyint"/>
+                <input type="hidden" id="package_id" value="beh1csp009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt
new file mode 100755 (executable)
index 0000000..6b7f905
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html b/tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html
new file mode 100755 (executable)
index 0000000..f2b474f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-same-origin-allow-scripts">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-same-origin-allow-scripts"/>
+                <input type="hidden" id="app_id"  value="beh1csp008.sandboxsameoriginallowscripts"/>
+                <input type="hidden" id="package_id" value="beh1csp008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are three "Pass" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt b/tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt
new file mode 100755 (executable)
index 0000000..618c843
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.html
new file mode 100755 (executable)
index 0000000..3d73b31
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-only-allow">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0005.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt
new file mode 100755 (executable)
index 0000000..9028f6f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-allow.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.html
new file mode 100755 (executable)
index 0000000..38b3884
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0004.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt
new file mode 100755 (executable)
index 0000000..da7c5cf
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.html
new file mode 100755 (executable)
index 0000000..82e4e67
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-constructor_only-allow">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-constructor-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0007.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt
new file mode 100755 (executable)
index 0000000..b14abe1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-allow.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.html
new file mode 100755 (executable)
index 0000000..1a41fd1
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-constructor_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-constructor-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0006.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt
new file mode 100755 (executable)
index 0000000..b37c060
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-constructor-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.html
new file mode 100755 (executable)
index 0000000..5254a26
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-interval_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-interval-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0010.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt
new file mode 100755 (executable)
index 0000000..24d8243
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-interval-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.html
new file mode 100755 (executable)
index 0000000..7ba4c5c
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-eval-timeout_only-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-eval-timeout-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0008.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt
new file mode 100755 (executable)
index 0000000..93bd674
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-eval-timeout-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.html
new file mode 100755 (executable)
index 0000000..19a799f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="CSP_02">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-allow"/>
+                <input type="hidden" id="app_id" value="WRTCSP0002.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt
new file mode 100755 (executable)
index 0000000..309ce09
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-allow.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.html
new file mode 100755 (executable)
index 0000000..61dfd96
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="CSP_02">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0003.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt
new file mode 100755 (executable)
index 0000000..d80e3e7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.html
new file mode 100755 (executable)
index 0000000..b8e90b1
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-with-uri-constructor">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-with-uri-constructor"/>
+                <input type="hidden" id="app_id" value="WRTCSP0014.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt
new file mode 100755 (executable)
index 0000000..d53cb62
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri-constructor.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.html
new file mode 100755 (executable)
index 0000000..924bf4b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-with-uri">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-with-uri"/>
+                <input type="hidden" id="app_id" value="WRTCSP0013.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt
new file mode 100755 (executable)
index 0000000..61c0c8c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-with-uri.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.html
new file mode 100755 (executable)
index 0000000..8fee5c5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-inline-without-uri">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-inline-without-uri"/>
+                <input type="hidden" id="app_id" value="WRTCSP0012.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt
new file mode 100755 (executable)
index 0000000..93bb826
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-inline-without-uri.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.html
new file mode 100755 (executable)
index 0000000..7a07405
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-self-config-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-self-config-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0019.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0019"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt
new file mode 100755 (executable)
index 0000000..cb82f13
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-config-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.html
new file mode 100755 (executable)
index 0000000..78d5437
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src-self-http-config-block">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src-self-http-config-block"/>
+                <input type="hidden" id="app_id" value="WRTCSP0018.DynamicSample"/>
+                <input type="hidden" id="package_id" value="WRTCSP0018"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt
new file mode 100755 (executable)
index 0000000..035277f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src-self-http-config-block.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html b/tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html
new file mode 100755 (executable)
index 0000000..f5f8120
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_inline_eval">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_inline_eval"/>
+                <input type="hidden" id="app_id" value="beh1csp006.scriptSrcInlineEval"/>
+                <input type="hidden" id="package_id" value="beh1csp006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt
new file mode 100755 (executable)
index 0000000..f6fc972
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src_none.html b/tv/tct-behavior-tests/tests/CSP/res/script-src_none.html
new file mode 100755 (executable)
index 0000000..b7dfbe8
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp007.scriptSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/script-src_none.wgt b/tv/tct-behavior-tests/tests/CSP/res/script-src_none.wgt
new file mode 100755 (executable)
index 0000000..9bde6c6
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/script-src_none.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSP/res/style-src_self.html b/tv/tct-behavior-tests/tests/CSP/res/style-src_self.html
new file mode 100755 (executable)
index 0000000..70c21eb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="style-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="style-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp005.styleSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" under a blue square.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSP/res/style-src_self.wgt b/tv/tct-behavior-tests/tests/CSP/res/style-src_self.wgt
new file mode 100755 (executable)
index 0000000..15df9b5
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CSP/res/style-src_self.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css b/tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css
new file mode 100755 (executable)
index 0000000..8da8d40
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        li, cici <cici.x.li@intel.com>
+
+*/
+
+@keyframes cssAnimate
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-webkit-keyframes cssAnimate /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-moz-keyframes cssAnimate /* Firefox */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-o-keyframes cssAnimate /* Opera */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@keyframes cssAnimate2
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink; }
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-webkit-keyframes cssAnimate2 /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-moz-keyframes cssAnimate2 /* Firefox */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-o-keyframes cssAnimate2 /* Opera */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+#testbox1
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate 10s 1;
+        -webkit-animation:cssAnimate 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate 10s 1; /* Firefox */
+        -o-animation:cssAnimate 10s 1; /* Opera */
+        border-radius:5px;
+        -webkit-border-radius:5px;
+}
+
+#testbox2
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate2 10s 1;
+        -webkit-animation:cssAnimate2 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate2 10s 1; /* Firefox */
+        -o-animation:cssAnimate2 10s 1; /* Opera */
+        border-radius:15px;
+        -webkit-border-radius:100px;
+}
+
+#box {
+        height: 100%;
+        width: 80%;
+        margin: 5px auto;
+        box-shadow: 10px 10px 5px #888888;
+        border:5px #92B901 outset;
+        border-radius:20px;
+        transition: border 1s linear;
+        -webkit-transition: border 1s linear;
+}
+
+#box.final {
+        border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+        width: 100%;
+        height: 300px;
+        padding: 30px 0px;
+        border: 3px  #000;
+}
diff --git a/tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html b/tv/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html
new file mode 100755 (executable)
index 0000000..ed29533
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script type="text/javascript">
+          function reloadTest() {
+                document.location.reload();
+          }
+        </script>
+
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testbox1" style="color:black; top:25%"> SQUARE </div>
+          <div id="testbox2" style="color:white; top:25%"> CIRCLE </div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS two boxes: </p>
+        <p>1. Color is changing in order of green, pink, blue, green, red, green; </p>
+        <p>2. Square/Circle move with 20 degree direction from left to right; </p>
+        <p>3. About rotate direction from left to right, square is rotate in 2D(180degree), circle is rotate in 3D(Y-axis); </p>
+        <p>4. Square/circle is transfering between square/circle when moving from right to left; </p>
+        <p>5. About font type, "SQUARE" is black, "CIRCLE" is white, both are 8 px size; </p>
+        <p>6. About frame box border, style is outset in green, with gray shadow. </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the transformation and animation function well follow above 6 rules.</p>
+      </font>
+    </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSSAnimation/css/style.css b/tv/tct-behavior-tests/tests/CSSAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..cb19b67
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+@-webkit-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@-moz-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 180px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+
+#testBox {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    position: relative;
+    margin: 20px 8px;
+    border: 3px solid yellow;
+    /* Transition */
+    -webkit-transition-duration: 5s;
+    -webkit-transition-timing-function: linear;
+
+     color: Yellow;
+     text-align: center;
+     vertical-align: middle;
+
+
+    -webkit-animation-name: sample;
+    -webkit-animation-duration: 10s;
+    -webkit-animation-timing-function: ease;
+    -webkit-animation-delay: 2s;
+    -webkit-animation-play-state: running;
+    -webkit-animation-iteration-count: 10;
+    -webkit-animation-direction: normal;
+
+    -moz-animation-name: sample;
+    -moz-animation-duration: 10s;
+    -moz-animation-timing-function: ease;
+    -moz-animation-delay: 2s;
+    -moz-animation-play-state: running;
+    -moz-animation-iteration-count: 10;
+    -moz-animation-direction: normal;
+
+    animation-name: sample;
+    animation-duration: 10s;
+    animation-timing-function: ease;
+    animation-delay: 2s;
+    animation-play-state: running;
+    animation-iteration-count: 10;
+    animation-direction: normal;
+}
+
+#testBox.final {
+    border-radius: 50px;
+    -webkit-border-radius: 50px;
+    transition-delay: 2s;
+    -webkit-transition-delay: 2s;
+}
+
+#box {
+    height: 150px;
+    width: 300px;
+    margin: 0px auto;
+    background-color: #ccc;
+    border: 0px solid rgb(0, 0, 255);
+    transition: border 1s linear;
+    -webkit-transition: border 1s linear;
+}
+
+#box.final {
+    border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+    width: 100%;
+    height: 180px;
+    padding: 30px 0px;
+    border: 1px solid #000;
+}
diff --git a/tv/tct-behavior-tests/tests/CSSAnimation/index.html b/tv/tct-behavior-tests/tests/CSSAnimation/index.html
new file mode 100755 (executable)
index 0000000..0e1c3b9
--- /dev/null
@@ -0,0 +1,118 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/transition-test-helpers.js"></script>
+    <script type="text/javascript">
+        var test_box;
+        var box_txt = "1";
+        function init() {
+            test_box = document.getElementById("testBox");
+            test_box.addEventListener("webkitAnimationIteration", start_f, true);
+            test_box.addEventListener("animationiteration", start_f, true);
+        }
+        function start_f() {
+            try {
+                box_txt = test_box.innerText;
+                test_box.innerText = parseInt(box_txt) + 1;
+                if (test_box.innerText % 2 == 0)
+                    $("#testBox").removeClass("final");
+                else
+                    $("#testBox").addClass("final");
+            } catch (err) {
+                test_box.innerText = box_txt;
+            }
+        }
+
+        function reloadTest() {
+            document.location.reload();
+        }
+
+        const expectedValues = [
+          // [time, element-id, property, expected-value, tolerance]
+          // [0.25, 'box', 'border-top-left-radius', 25, 5],
+          [0.25, 'testBox', 'border-radius', 25, 500]
+        ];
+
+        const expectedValues2 = [
+            [0.5, 'box', 'border-top-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-right-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-bottom-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-left-color', [128, 0, 128], 300],
+            [0.5, 'box', 'border-top-width', 10, 200],
+            [0.5, 'box', 'border-right-width', 10, 200],
+            [0.5, 'box', 'border-bottom-width', 10, 200],
+            [0.5, 'box', 'border-left-width', 10, 200]
+        ];
+        function setupTest() {
+            document.getElementById('testBox').className = 'testBox final';
+        }
+        function setupTest2() {
+            var box = document.getElementById('box');
+            box.className = 'final';
+        }
+        runTransitionTest(expectedValues, setupTest, usePauseAPI);
+        runTransitionTest(expectedValues2, setupTest2, usePauseAPI);
+    </script>
+  </head>
+  <body bgcolor="FFFFFF"  onload="init()">
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div class="display_box">
+        <div id="box">
+          <div id="testBox">1</div>
+        </div>
+      </div>
+      <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the CSS box is transferring between square and circle when moving from left to right, its background color is changing in the order of red, green and blue, and the counter record the times of CSS animation from 1 to 10.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and animation functions all work well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSSAnimation/js/COPYING b/tv/tct-behavior-tests/tests/CSSAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..86c307b
--- /dev/null
@@ -0,0 +1,6 @@
+The code of main.js comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/transitions/resources/transition-test-helpers.js
+without modification.
+
+These resources are under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
diff --git a/tv/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js b/tv/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js
new file mode 100755 (executable)
index 0000000..793460e
--- /dev/null
@@ -0,0 +1,296 @@
+/* This is the helper function to run transition tests:
+
+Test page requirements:
+- The body must contain an empty div with id "result"
+- Call this function directly from the <script> inside the test page
+
+Function parameters:
+    expected [required]: an array of arrays defining a set of CSS properties that must have given values at specific times (see below)
+    callback [optional]: a function to be executed just before the test starts (none by default)
+    
+    Each sub-array must contain these items in this order:
+    - the time in seconds at which to snapshot the CSS property
+    - the id of the element on which to get the CSS property value
+    - the name of the CSS property to get [1]
+    - the expected value for the CSS property
+    - the tolerance to use when comparing the effective CSS property value with its expected value
+    
+    [1] If the CSS property name is "-webkit-transform", expected value must be an array of 1 or more numbers corresponding to the matrix elements,
+    or a string which will be compared directly (useful if the expected value is "none")
+    If the CSS property name is "-webkit-transform.N", expected value must be a number corresponding to the Nth element of the matrix
+
+*/
+
+const usePauseAPI = true;
+const dontUsePauseAPI = false;
+
+const shouldBeTransitioning = true;
+const shouldNotBeTransitioning = false;
+
+function roundNumber(num, decimalPlaces)
+{
+  return Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
+}
+
+function isCloseEnough(actual, desired, tolerance)
+{
+    var diff = Math.abs(actual - desired);
+    return diff <= tolerance;
+}
+
+function isShadow(property)
+{
+  return (property == '-webkit-box-shadow' || property == 'text-shadow');
+}
+
+function getShadowXY(cssValue)
+{
+    var text = cssValue.cssText;
+    // Shadow cssText looks like "rgb(0, 0, 255) 0px -3px 10px 0px"
+    var shadowPositionRegExp = /\)\s*(-?\d+)px\s*(-?\d+)px/;
+    var result = shadowPositionRegExp.exec(text);
+    return [parseInt(result[1]), parseInt(result[2])];
+}
+
+function compareRGB(rgb, expected, tolerance)
+{
+    return (isCloseEnough(parseInt(rgb[0]), expected[0], tolerance) &&
+            isCloseEnough(parseInt(rgb[1]), expected[1], tolerance) &&
+            isCloseEnough(parseInt(rgb[2]), expected[2], tolerance));
+}
+
+function parseCrossFade(s)
+{
+    var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
+
+    if (!matches)
+        return null;
+
+    return {"from": matches[1], "to": matches[2], "percent": parseFloat(matches[3])}
+}
+
+function checkExpectedValue(expected, index)
+{
+    var time = expected[index][0];
+    var elementId = expected[index][1];
+    var property = expected[index][2];
+    var expectedValue = expected[index][3];
+    var tolerance = expected[index][4];
+    var postCompletionCallback = expected[index][5];
+
+    var computedValue;
+    var pass = false;
+    var transformRegExp = /^-webkit-transform(\.\d+)?$/;
+    if (transformRegExp.test(property)) {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).webkitTransform;
+        if (typeof expectedValue == "string")
+            pass = (computedValue == expectedValue);
+        else if (typeof expectedValue == "number") {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            pass = isCloseEnough(parseFloat(m[parseInt(property.substring(18))]), expectedValue, tolerance);
+        } else {
+            var m = computedValue.split("(");
+            var m = m[1].split(",");
+            for (i = 0; i < expectedValue.length; ++i) {
+                pass = isCloseEnough(parseFloat(m[i]), expectedValue[i], tolerance);
+                if (!pass)
+                    break;
+            }
+        }
+    } else if (property == "fill" || property == "stroke") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).rgbColor;
+        if (compareRGB([computedValue.red.cssText, computedValue.green.cssText, computedValue.blue.cssText], expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        }
+    } else if (property == "stop-color" || property == "flood-color" || property == "lighting-color") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        // The computedValue cssText is rgb(num, num, num)
+        var components = computedValue.cssText.split("(")[1].split(")")[0].split(",");
+        if (compareRGB(components, expectedValue, tolerance))
+            pass = true;
+        else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = computedValue.cssText;
+        }
+    } else if (property == "lineHeight") {
+        computedValue = parseInt(window.getComputedStyle(document.getElementById(elementId)).lineHeight);
+        pass = isCloseEnough(computedValue, expectedValue, tolerance);
+    } else if (property == "background-image"
+               || property == "border-image-source"
+               || property == "border-image"
+               || property == "list-style-image"
+               || property == "-webkit-mask-image"
+               || property == "-webkit-mask-box-image") {
+        if (property == "border-image" || property == "-webkit-mask-image" || property == "-webkit-mask-box-image")
+            property += "-source";
+        
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        computedCrossFade = parseCrossFade(computedValue);
+
+        if (!computedCrossFade) {
+            pass = false;
+        } else {
+            pass = isCloseEnough(computedCrossFade.percent, expectedValue, tolerance);
+        }
+    } else {
+        var computedStyle = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        if (computedStyle.cssValueType == CSSValue.CSS_VALUE_LIST) {
+            var values = [];
+            for (var i = 0; i < computedStyle.length; ++i) {
+                switch (computedStyle[i].cssValueType) {
+                  case CSSValue.CSS_PRIMITIVE_VALUE:
+                    values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
+                    break;
+                  case CSSValue.CSS_CUSTOM:
+                    // arbitrarily pick shadow-x and shadow-y
+                    if (isShadow) {
+                      var shadowXY = getShadowXY(computedStyle[i]);
+                      values.push(shadowXY[0]);
+                      values.push(shadowXY[1]);
+                    } else
+                      values.push(computedStyle[i].cssText);
+                    break;
+                }
+            }
+            computedValue = values.join(',');
+            pass = true;
+            for (var i = 0; i < values.length; ++i)
+                pass &= isCloseEnough(values[i], expectedValue[i], tolerance);
+        } else if (computedStyle.cssValueType == CSSValue.CSS_PRIMITIVE_VALUE) {
+            switch (computedStyle.primitiveType) {
+                case CSSPrimitiveValue.CSS_STRING:
+                case CSSPrimitiveValue.CSS_IDENT:
+                    computedValue = computedStyle.getStringValue();
+                    pass = computedValue == expectedValue;
+                    break;
+                case CSSPrimitiveValue.CSS_RGBCOLOR:
+                    var rgbColor = computedStyle.getRGBColorValue();
+                    computedValue = [rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)]; // alpha is not exposed to JS
+                    pass = true;
+                    for (var i = 0; i < 3; ++i)
+                        pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_RECT:
+                    computedValue = computedStyle.getRectValue();
+                    computedValue = [computedValue.top.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.right.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.bottom.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                                     computedValue.left.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)];
+                     pass = true;
+                     for (var i = 0; i < 4; ++i)
+                         pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    break;
+                case CSSPrimitiveValue.CSS_PERCENTAGE:
+                    computedValue = parseFloat(computedStyle.cssText);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+                    break;
+                default:
+                    computedValue = computedStyle.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+            }
+        }
+    }
+
+    if (pass)
+        result += "PASS - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s saw something close to: " + expectedValue + "<br>";
+    else
+        result += "FAIL - \"" + property + "\" property for \"" + elementId + "\" element at " + time + "s expected: " + expectedValue + " but saw: " + computedValue + "<br>";
+
+    if (postCompletionCallback)
+      result += postCompletionCallback();
+}
+
+function endTest()
+{
+    document.getElementById('result').innerHTML = result;
+
+    if (window.testRunner)
+        testRunner.notifyDone();
+}
+
+function checkExpectedValueCallback(expected, index)
+{
+    return function() { checkExpectedValue(expected, index); };
+}
+
+function runTest(expected, usePauseAPI)
+{
+    var maxTime = 0;
+    for (var i = 0; i < expected.length; ++i) {
+        var time = expected[i][0];
+        var elementId = expected[i][1];
+        var property = expected[i][2];
+        if (!property.indexOf("-webkit-transform."))
+            property = "-webkit-transform";
+
+        var tryToPauseTransition = expected[i][6];
+        if (tryToPauseTransition === undefined)
+          tryToPauseTransition = shouldBeTransitioning;
+
+        if (hasPauseTransitionAPI && usePauseAPI) {
+            if (tryToPauseTransition) {
+              var element = document.getElementById(elementId);
+              if (!internals.pauseTransitionAtTimeOnElement(property, time, element))
+                window.console.log("Failed to pause '" + property + "' transition on element '" + elementId + "'");
+            }
+            checkExpectedValue(expected, i);
+        } else {
+            if (time > maxTime)
+                maxTime = time;
+
+            window.setTimeout(checkExpectedValueCallback(expected, i), time * 1000);
+        }
+    }
+
+    if (maxTime > 0)
+        window.setTimeout(endTest, maxTime * 1000 + 50);
+    else
+        endTest();
+}
+
+function waitForAnimationStart(callback, delay)
+{
+    var delayTimeout = delay ? 1000 * delay + 10 : 0;
+    // Why the two setTimeouts? Well, for hardware animations we need to ensure that the hardware animation
+    // has started before we try to pause it, and timers fire before animations get committed in the runloop.
+    window.setTimeout(function() {
+        window.setTimeout(function() {
+            callback();
+        }, 0);
+    }, delayTimeout);
+}
+
+function startTest(expected, usePauseAPI, callback)
+{
+    if (callback)
+        callback();
+
+    waitForAnimationStart(function() {
+        runTest(expected, usePauseAPI);
+    });
+}
+
+var result = "";
+var hasPauseTransitionAPI;
+
+function runTransitionTest(expected, callback, usePauseAPI, doPixelTest)
+{
+    hasPauseTransitionAPI = 'internals' in window;
+    
+    if (window.testRunner) {
+        if (!doPixelTest)
+            testRunner.dumpAsText();
+        testRunner.waitUntilDone();
+    }
+    
+    if (!expected)
+        throw("Expected results are missing!");
+    
+    window.addEventListener("load", function() { startTest(expected, usePauseAPI, callback); }, false);
+}
diff --git a/tv/tct-behavior-tests/tests/CSSStyle/css/style.css b/tv/tct-behavior-tests/tests/CSSStyle/css/style.css
new file mode 100755 (executable)
index 0000000..1d31a68
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Align */
+.text-left{
+    text-align: left;
+}
+.text-right{
+    text-align: right;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+/* CSS text-decoration */
+.decoration1{
+    text-decoration: underline;
+}
+.decoration2{
+    text-decoration: line-through;
+}
+.decoration3{
+    text-decoration: overline;
+}
+
+/* CSS break-word */
+.break1{
+    word-break: break-all;
+    text-align: justify;
+}
+.break2{
+    word-break: break-word;
+    text-align: justify;
+}
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/tv/tct-behavior-tests/tests/CSSStyle/index.html b/tv/tct-behavior-tests/tests/CSSStyle/index.html
new file mode 100755 (executable)
index 0000000..6680e5b
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+    <style>
+        .normalSpan {
+            display:none;
+            color:red;
+        }
+        .columnSpan {
+            visibility:hidden;
+            color:red;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content" class="content">
+        <div id="d">
+          <div id="text-div">
+            <div id="p"><span class="normalSpan">A</span>
+              By&nbsp;using&nbsp;functionality&nbsp;described in this document, style sheets can declare that the content of an element is to be laid out in multiple columns.
+              <h3 id="h"><span class="columnSpan">A</span>column span</h3>
+              The main benefit of using CSS-based columns is flexibility; content can flow from one column to another.
+            </div>
+          </div>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Mulcolumn</label>
+            <a id="on" data-role="button">On</a>
+            <a id="off" data-role="button">Off</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-1">Transparency</label>
+            <input name="slider-1" id="slider-1" min="0" max="1" step=".01" value="1" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="u">
+            <label for="slider-1">Font Color</label>
+            <a id="red" data-role="button">Red</a>
+            <a id="green" data-role="button">Green</a>
+            <a id="blue" data-role="button">Blue</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Align</label>
+            <a id="left" data-role="button">Left</a>
+            <a id="right" data-role="button">Right</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Transform</label>
+            <a id="upper" data-role="button">Uppercase</a>
+            <a id="lower" data-role="button">Lowercase</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Text Shadow</label>
+            <a id="shadow1" data-role="button">Shadow1</a>
+            <a id="shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Box Shadow</label>
+            <a id="box-shadow1" data-role="button">Shadow1</a>
+            <a id="box-shadow2" data-role="button">Shadow2</a>
+        </div>
+        <div data-role="controlgroup" class="s">
+            <label for="slider-2">Outline offset</label>
+            <input name="slider-2" id="slider-2" min="0" max="15" step="1" value="5" data-highlight="true" data-show-value="true" type="range">
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Border</label>
+            <a id="border1" data-role="button">Border1</a>
+            <a id="border2" data-role="button">Border2</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="u">
+            <label for="slider-1">Text Decoration</label>
+            <a id="decoration1" data-role="button">Underline</a>
+            <a id="decoration2" data-role="button">Through</a>
+            <a id="decoration3" data-role="button">Overline</a>
+        </div>
+        <div data-role="controlgroup" data-type="horizontal" class="q">
+            <label for="slider-1">Word Break</label>
+            <a id="break1" data-role="button">Break All</a>
+            <a id="break2" data-role="button">Break Word</a>
+        </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies</p>
+        <ul>
+          <li>the dotted line box has a white background, red first letter, green dotted border.</li>
+          <li>the general description uses default font in browser.</li>
+          <li>the functionality of all the text color in red, green or blue, background transparence from 0% to 100%, outline offset from 0 to 15, multicolumn enabling and disabling.</li>
+          <li>the text align in left or right, text in uppercase or lowercase, text and box shadow in two effects, text decoration in three effects and word break in two effects.</li>
+          <li>the "column span" text shows in random code when using uppercase.</li>
+        </ul>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well in the dotted line box.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CSSStyle/js/COPYING b/tv/tct-behavior-tests/tests/CSSStyle/js/COPYING
new file mode 100755 (executable)
index 0000000..2cd9881
--- /dev/null
@@ -0,0 +1,42 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue*100)+"%");
++                $("#p").css("opacity", newValue);
++                if(newValue != 1){
++                    testFlag.Transparency = true;
++                    status();
++                }
++            }
++        }else if(ID == "slider-2"){
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue));
++                $("#text-div").css("outline-offset", newValue);
++                if(newValue != 5){
++                    testFlag.Outline = true;
++                    status();
++                }
++            }
++        }
+-        if (o.popupEnabled) {
+-            this._positionPopup();
+-            this._popup.html(Math.round(newValue));
+-        }
+-        if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
+-        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/tv/tct-behavior-tests/tests/CSSStyle/js/main.js b/tv/tct-behavior-tests/tests/CSSStyle/js/main.js
new file mode 100755 (executable)
index 0000000..3176a7e
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var testFlag={
+        Mulcolumn: false,
+        Transparency: false,
+        Color: false,
+        Align: false,
+        Transform: false,
+        TextShadow: false,
+        BoxShadow: false,
+        Outline: false,
+        Border: false,
+        Decoration: false,
+        Break: false
+    };
+
+function status(){
+    if(testFlag.Mulcolumn && testFlag.Transparency && testFlag.Color && testFlag.Align && testFlag.Transform && testFlag.TextShadow && testFlag.BoxShadow && testFlag.Outline && testFlag.Border && testFlag.Decoration && testFlag.Break)
+        EnablePassButton();
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    /** CSS Multicolumn */
+    $("#on").click(function(){
+        $("#off").removeClass("text-on");
+        $("#on").addClass("text-on");
+        $("#p").addClass("text-multi");
+        $("#h").addClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+    $("#off").click(function(){
+        $("#on").removeClass("text-on");
+        $("#off").addClass("text-on");
+        $("#p").removeClass("text-multi");
+        $("#h").removeClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+
+    /** CSS Color */
+    $("#red").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#red").toggleClass("text-on");
+        // remove text-green and text-blue style
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-red style
+        $p.toggleClass("text-red");
+        testFlag.Color = true;
+        status();
+    });
+    $("#green").click(function(){
+        var $p = $("#p");
+        $("#red").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#green").toggleClass("text-on");
+        // remove text-red and text-blue style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-green style
+        $p.toggleClass("text-green");
+        testFlag.Color = true;
+        status();
+    });
+    $("#blue").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#red").removeClass("text-on");
+        $("#blue").toggleClass("text-on");
+        // remove text-red and text-green style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        // add/remove text-blue style
+        $p.toggleClass("text-blue");
+        testFlag.Color = true;
+        status();
+    });
+
+    /** CSS Text Align */
+    $("#left").click(function(){
+        $("#right").removeClass("text-on");
+        $("#left").toggleClass("text-on");
+        $("#p").removeClass("text-right");
+        $("#p").toggleClass("text-left");
+        testFlag.Align = true;
+        status();
+    });
+    $("#right").click(function(){
+        $("#left").removeClass("text-on");
+        $("#right").toggleClass("text-on");
+        $("#p").removeClass("text-left");
+        $("#p").toggleClass("text-right");
+        testFlag.Align = true;
+        status();
+    });
+
+    /** CSS Text Transform */
+    $("#upper").click(function(){
+        $("#lower").removeClass("text-on");
+        $("#upper").toggleClass("text-on");
+        $("#p").removeClass("text-lower");
+        $("#p").toggleClass("text-upper");
+        testFlag.Transform = true;
+        status();
+    });
+    $("#lower").click(function(){
+        $("#upper").removeClass("text-on");
+        $("#lower").toggleClass("text-on");
+        $("#p").removeClass("text-upper");
+        $("#p").toggleClass("text-lower");
+        testFlag.Transform = true;
+        status();
+    });
+
+    /** CSS Text Shadow */
+    $("#shadow1").click(function(){
+        $("#shadow2").removeClass("text-on");
+        $("#shadow1").toggleClass("text-on");
+        $("#p").removeClass("text-shadow2");
+        $("#p").toggleClass("text-shadow1");
+        testFlag.TextShadow = true;
+        status();
+    });
+    $("#shadow2").click(function(){
+        $("#shadow1").removeClass("text-on");
+        $("#shadow2").toggleClass("text-on");
+        $("#p").removeClass("text-shadow1");
+        $("#p").toggleClass("text-shadow2");
+        testFlag.TextShadow = true;
+        status();
+    });
+
+    /** CSS Box Shadow */
+    $("#box-shadow1").click(function(){
+        $("#box-shadow2").removeClass("text-on");
+        $("#box-shadow1").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow2");
+        $("#text-div").toggleClass("box-shadow1");
+        testFlag.BoxShadow = true;
+        status();
+    });
+    $("#box-shadow2").click(function(){
+        $("#box-shadow1").removeClass("text-on");
+        $("#box-shadow2").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow1");
+        $("#text-div").toggleClass("box-shadow2");
+        testFlag.BoxShadow = true;
+        status();
+    });
+
+    /** CSS Border */
+    $("#border1").click(function(){
+        $("#border2").removeClass("text-on");
+        $("#border1").toggleClass("text-on");
+        $("#text-div").removeClass("border2");
+        $("#text-div").toggleClass("border1");
+        testFlag.Border = true;
+        status();
+    });
+    $("#border2").click(function(){
+        $("#border1").removeClass("text-on");
+        $("#border2").toggleClass("text-on");
+        $("#text-div").removeClass("border1");
+        $("#text-div").toggleClass("border2");
+        testFlag.Border = true;
+        status();
+    });
+
+    /** CSS Break Word */
+    $("#break1").click(function(){
+        $("#break2").removeClass("text-on");
+        $("#break1").toggleClass("text-on");
+        $("#text-div").removeClass("break2");
+        $("#text-div").toggleClass("break1");
+        testFlag.Break = true;
+        status();
+    });
+    $("#break2").click(function(){
+        $("#break1").removeClass("text-on");
+        $("#break2").toggleClass("text-on");
+        $("#text-div").removeClass("break1");
+        $("#text-div").toggleClass("break2");
+        testFlag.Break = true;
+        status();
+    });
+
+    /** CSS Text Decoration */
+    $("#decoration1").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration1").toggleClass("text-on");
+        // remove decoration2 and decoration3 style
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration1 style
+        $p.toggleClass("decoration1");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration2").click(function(){
+        var $p = $("#p");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration2").toggleClass("text-on");
+        // remove decoration1 and decoration3 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration2 style
+        $p.toggleClass("decoration2");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration3").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").toggleClass("text-on");
+        // remove decoration1 and decoration2 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        // add decoration3 style
+        $p.toggleClass("decoration3");
+        testFlag.Decoration = true;
+        status();
+    });
+
+    /* Hide input*/
+    $("#slider-1").hide();
+    $("#slider-2").hide();
+});
diff --git a/tv/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js b/tv/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..035bc67
--- /dev/null
@@ -0,0 +1,141 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue*100)+"%");
+                $("#p").css("opacity", newValue);
+                if(newValue != 1){
+                    testFlag.Transparency = true;
+                    status();
+                }
+            }
+        }else if(ID == "slider-2"){
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue));
+                $("#text-div").css("outline-offset", newValue);
+                if(newValue != 5){
+                    testFlag.Outline = true;
+                    status();
+                }
+            }
+        }
+
+               //if ( o.popupEnabled ) {
+               //      this._positionPopup();
+               //      this._popup.html( newValue );
+               //}
+
+               //if ( o.showValue ) {
+               //      this._handleText.html( newValue );
+               //}
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/tv/tct-behavior-tests/tests/Camera/index.html b/tv/tct-behavior-tests/tests/Camera/index.html
new file mode 100755 (executable)
index 0000000..5781f72
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 300px;
+            }
+            #photoShow {
+                height: 210px;
+                line-height:210px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="filename"></p>
+              <div id="photoShow" align="center"></div>
+            </div>
+            <input type="file" id="files" accept="image/*" capture="camera" class="hideButton" />
+            <div align="center">
+              <input id="button" type="button" value="Launch camera to take a photo" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of Camera. Opens a device camera, previews the image automatically, then presents the captured photo after clicking the "capture" button.</p>
+            <p>Test Step: </p>
+            <p>Click the "Launch camera to take a photo" button to launch the camera preview.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the camera preview and capture work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Camera/js/main.js b/tv/tct-behavior-tests/tests/Camera/js/main.js
new file mode 100755 (executable)
index 0000000..0169f6d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+function drawOnCanvas(file) {
+  var reader = new FileReader();
+
+  reader.onload = function (e) {
+    var dataURL = e.target.result;
+        var c = document.createElement("Canvas");
+        ctx = c.getContext('2d');
+        img = new Image();
+
+    img.onload = function() {
+      c.width = img.width;
+      c.height = img.height;
+
+      var fheight = 180;
+      var fwidth = fheight / img.height * img.width
+      ctx.drawImage(img, 0, 0, fwidth, fheight);
+    };
+    img.src = dataURL;
+    $('#photoShow').html(c);
+  };
+
+  reader.readAsDataURL(file);
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    $("#photoShow").html("No photo");
+    $("#files")[0].onchange = function(evt) {
+        try {
+            // loading
+            $.mobile.showPageLoadingMsg();
+
+            var files = evt.target.files; // FileList object
+            $("#filename").html(files[0].name);
+            drawOnCanvas(files[0]);
+
+            $.mobile.hidePageLoadingMsg();
+            EnablePassButton();
+        } catch(err) {
+            $.mobile.hidePageLoadingMsg();
+            $("#filename").html(err);
+        }
+    }
+
+    $("#button")[0].onclick = function() {
+        var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
+        if(ie){
+            $("#files")[0].click();
+            $("#button")[0].value = $("#files")[0].value;
+        }else{
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#files")[0].dispatchEvent(evt);
+        }
+    }
+
+});
diff --git a/tv/tct-behavior-tests/tests/CameraViaUserMedia/index.html b/tv/tct-behavior-tests/tests/CameraViaUserMedia/index.html
new file mode 100755 (executable)
index 0000000..dfceb39
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 330px;
+                line-height:330px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+              <p id="errormassage"></p>
+              <div align="center">
+                <video width="330px" height="330px" id="localView" autoplay="autoplay"></video>
+              </div>
+            </div>
+            <div align="center">
+              <input id="getUserMeida" type="button" value="Start camera preview" />
+              <input id="stopUserMeida" type="button" value="Stop camera preview" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of enabling and disabling the Camera preview.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Start camera preview" button to launch the preview.</li>
+              <li>Click the "Stop camera preview" button to close the preview.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Camera preview works well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js b/tv/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js
new file mode 100755 (executable)
index 0000000..5e1556a
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+$(document).ready(function(){
+    DisablePassButton();
+    $("#errormassage").html("No video");
+    //getUserMedia
+    $("#getUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia({video: true}, function(s){
+                var url = webkitURL.createObjectURL(s);
+                $("#localView")[0].src = url;
+                $("#localView").show();
+                $("#errormassage").hide();
+                EnablePassButton();
+            }, function(error){
+                $("#errormassage").show();
+                $("#errormassage").html("Get user media occur error:<font color='red'>PERMISSION DENIED</font>");
+            });
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").html("Get usr media occur error,with error message:<font color='red'>"+e.message+"</font>");
+        }
+    }
+
+    //stop getUserMedia
+    $("#stopUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        }
+    }
+});
diff --git a/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png b/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png
new file mode 100755 (executable)
index 0000000..f9bfe88
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png differ
diff --git a/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html b/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html
new file mode 100755 (executable)
index 0000000..6a1d6c2
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+        <script type="text/javascript">
+                function reloadTest() {
+                        document.location.reload();
+                }
+        </script>
+  </head>
+
+<body bgcolor="FFFFFF" >
+   <div data-role="header">
+        <h1 id="main_page_title"></h1>
+   </div>
+
+   <h3>Original Picture</p>
+   <img id="flowser" src="./flowser.png" alt="flowser" />
+
+   <p>Target Picture</p>
+   <canvas id="myCanvas" width="300" height="240" style="border:1px solid #c3c3c3;">
+        Your browser does not support the canvas element.
+   </canvas>
+
+   <script type="text/javascript">
+        var c=document.getElementById("myCanvas");
+        var cxt=c.getContext("2d");
+        var img=new Image()
+        img.src="./flowser.png"
+        cxt.drawImage(img,0,0);
+   </script>
+
+   <div data-role="content">
+        <button onclick="rotate()">Rotate Pic</button>
+        <button onclick="scale()">Scale Pic</button>
+        <button onclick="transform()">Transform Pic</button>
+        <button onclick="to_blackWhite()">Vampix Pic</button>
+        <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+   </div>
+
+
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font style="font-size:85%">
+        <p>Test Purpose: </p>
+        <p>Verifies picture management with HTML5 Canvas: </p>
+        <p>1.click "Rotate Pic" button to rotate pic with 20 degree, then click "Test Again" button; </p>
+        <p>2.click "Scale Pic" to enlarger with 1.5 scale, click 2 or many times to enlarge continuously, then click "Test Again" button; </p>
+        <p>3.click "Transform Pic" to check pic transformation, then click "Test Again" button; </p>
+        <p>4.click "Vampix Pic" to change pic to "black white", then click "Test Again" button; </p>
+        <p>5.Do combination test, click "Rotate Pic" + "Scale Pic" + "Vampix Pic" in order, then click "Test Again" button; </p>
+        <p>Expected Result: </p>
+        <p>This test PASS only if the pic could be rotated,scaled,transformed, vampixed well.</p>
+      </font>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js b/tv/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js
new file mode 100755 (executable)
index 0000000..fc82eb0
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+*/
+
+function rotate()
+{
+        cxt.rotate(20*Math.PI/180);
+        cxt.clearRect(0,0,500,500);
+        cxt.drawImage(img,0,0);
+}
+function scale()
+{
+        cxt.scale(1.5,1.5);
+        cxt.drawImage(img,0,0);
+}
+/*
+function translate()
+{
+        cxt.translate(70,70);
+        cxt.drawImage(img,0,0);
+}*/
+
+function transform()
+{
+        cxt.transform(0.8,0.5,0.5,1,10,0);
+        cxt.drawImage(img,0,0);
+}
+
+function to_blackWhite()
+{
+        cxt.drawImage(img,0,0);
+        var imgData = cxt.getImageData(0, 0, c.width, c.height);
+        var imgD = imgData.data;
+        for(var i=0, n=imgD.length; i<n; i+=4){
+                var gray = imgD[i] * 0.3 + imgD[i+1] * 0.59 + imgD[i+2] * 0.11;
+                imgD[i] = gray;
+                imgD[i+1] = gray;
+                imgD[i+2] = gray;
+        }
+        cxt.putImageData(imgData, 0, 0);
+}
+
diff --git a/tv/tct-behavior-tests/tests/Clipboard/index.html b/tv/tct-behavior-tests/tests/Clipboard/index.html
new file mode 100755 (executable)
index 0000000..8ad2a49
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+      <div data-role="header">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed">
+      </div>
+      <div data-role="popup" id="popup_info">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports clipboard to copy, cut and paste texts. Tests the functionality by long pressing the selected text, choose the "Copy", "Cut" and "Paste" in popup menu.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the copy and paste test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the copy, cut and paste functions all work well.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Clipboard/js/main.js b/tv/tct-behavior-tests/tests/Clipboard/js/main.js
new file mode 100755 (executable)
index 0000000..e887a94
--- /dev/null
@@ -0,0 +1,216 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bclipboard")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Clipboard application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                $("#install").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bclipboard", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : Clipboard application is already uninstalled or not installed");
+    }
+
+    try {
+        tizen.application.launch("bclipboard.clipboard", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "Clipboard")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/Clipboard.wgt",
+                    true,
+                    function() {
+                        console.log("Clipboard Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Clipboard/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/Clipboard/res/Clipboard b/tv/tct-behavior-tests/tests/Clipboard/res/Clipboard
new file mode 100755 (executable)
index 0000000..09e7d58
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Clipboard/res/Clipboard differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/index.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/index.html
new file mode 100755 (executable)
index 0000000..45d29b2
--- /dev/null
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test src content</li>
+                <li id="application-content">
+                    <a href="javascript:goToApp('res/application-content.html')" data-transition="slide" style="">
+                        <h2>application-content</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test auto rotation</li>
+                <li id="setting-ar-true">
+                    <a href="javascript:goToApp('res/setting-ar-true.html')" data-transition="slide" style="">
+                        <h2>setting-ar-true</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test background support</li>
+                <li id="setting-bs-disable">
+                    <a href="javascript:goToApp('res/setting-bs-disable.html')" data-transition="slide" style="">
+                        <h2>setting-bs-disable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test context menu</li>
+                <li id="setting-cm-disable">
+                    <a href="javascript:goToApp('res/setting-cm-disable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-cm-enable">
+                    <a href="javascript:goToApp('res/setting-cm-enable.html')" data-transition="slide" style="">
+                        <h2>setting-cm-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test encryption</li>
+                <li id="setting-encrypt-disable">
+                    <a href="javascript:goToApp('res/setting-encrypt-disable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-encrypt-enable">
+                    <a href="javascript:goToApp('res/setting-encrypt-enable.html')" data-transition="slide" style="">
+                        <h2>setting-encrypt-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test allow navigation</li>
+                <li id="setting-an-more">
+                    <a href="javascript:goToApp('res/setting-an-more.html')" data-transition="slide" style="">
+                        <h2>setting-an-more</h2>
+                    </a>
+                </li>
+                <li id="setting-an-one">
+                    <a href="javascript:goToApp('res/setting-an-one.html')" data-transition="slide" style="">
+                        <h2>setting-an-one</h2>
+                    </a>
+                </li>
+                <li id="setting-an-zero">
+                    <a href="javascript:goToApp('res/setting-an-zero.html')" data-transition="slide" style="">
+                        <h2>setting-an-zero</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test hwkey</li>
+                <li id="setting-hwkey-default">
+                    <a href="javascript:goToApp('res/setting-hwkey-default.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-default</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-disable">
+                    <a href="javascript:goToApp('res/setting-hwkey-disable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-disable</h2>
+                    </a>
+                </li>
+                <li id="setting-hwkey-enable">
+                    <a href="javascript:goToApp('res/setting-hwkey-enable.html')" data-transition="slide" style="">
+                        <h2>setting-hwkey-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test install location</li>
+                <li id="setting-install-location-internal-only-with-card">
+                    <a href="javascript:goToApp('res/setting-install-location-internal-only-with-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-internal-only-with-card</h2>
+                    </a>
+                </li>
+                <li id="setting-install-location-prefer-external-no-card">
+                    <a href="javascript:goToApp('res/setting-install-location-prefer-external-no-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-prefer-external-no-card</h2>
+                    </a>
+                </li>
+                <li id="setting-install-location-prefer-external-with-card">
+                    <a href="javascript:goToApp('res/setting-install-location-prefer-external-with-card.html')" data-transition="slide" style="">
+                        <h2>setting-install-location-prefer-external-with-card</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of tizen-specific widget configuration extension and w3c widget configuration extension.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support additional configuration elements that are not included in W3C Widget Packaging and XML Configuration, like "&lt;tizen:application&gt;", "&lt;tizen:privilege&gt;", "&lt;tizen:setting&gt;" etc.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/js/main.js b/tv/tct-behavior-tests/tests/ConfigurationExtension/js/main.js
new file mode 100755 (executable)
index 0000000..3a5c517
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt2apc001',
+                    'wrt2sam045',
+                    'wrt2sao044',
+                    'wrt2saz043',
+                    'wrt2sod031',
+                    'wrt2sbd024',
+                    'wrt2scd026',
+                    'wrt2sce027',
+                    'wrt2sil053',
+                    'wrt2sil054',
+                    'wrt2sil055',
+                    'wrt2shd044',
+                    'wrt2skd041',
+                    'wrt2ske042',
+                    'wrt2sed028',
+                    'wrt2see029');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ConfigurationExtension";
+var RESULT_FILE_NAME = "tct-behavior-child.ce.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js b/tv/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js
new file mode 100755 (executable)
index 0000000..8f6a128
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var nolaunch_wgt = new Array('setting-encrypt-enable','setting-encrypt-disable');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    }
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ConfigurationExtension/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html
new file mode 100755 (executable)
index 0000000..bc2e44e
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-content">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-content"/>
+                <input type="hidden" id="app_id"  value="wrt2apc001.ApplicationContent"/>
+                <input type="hidden" id="package_id" value="wrt2apc001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget redirect the start page to "http://www.google.com".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt
new file mode 100755 (executable)
index 0000000..abff3e5
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html
new file mode 100755 (executable)
index 0000000..edd6cfa
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-more">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-more"/>
+                <input type="hidden" id="app_id"  value="wrt2sam045.settinganmore"/>
+                <input type="hidden" id="package_id" value="wrt2sam045"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "baidu" and "baike.baidu" links cannot be opened in Web App, they will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt
new file mode 100755 (executable)
index 0000000..28adbd6
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html
new file mode 100755 (executable)
index 0000000..d9e04fe
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-one">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-one"/>
+                <input type="hidden" id="app_id"  value="wrt2sao044.settinganone"/>
+                <input type="hidden" id="package_id" value="wrt2sao044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "google" link cannot be opened in Web App, it will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt
new file mode 100755 (executable)
index 0000000..6513c59
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html
new file mode 100755 (executable)
index 0000000..67c810c
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-zero">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-zero"/>
+                <input type="hidden" id="app_id"  value="wrt2saz043.settinganzero"/>
+                <input type="hidden" id="package_id" value="wrt2saz043"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "google" and "tizen" links are displayed on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt
new file mode 100755 (executable)
index 0000000..4e3e02d
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html
new file mode 100755 (executable)
index 0000000..480491c
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-ar-true">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-ar-true"/>
+                <input type="hidden" id="app_id"  value="wrt2sod031.settingartrue"/>
+                <input type="hidden" id="package_id" value="wrt2sod031"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Set the auto rotate enable in Setting > Display> Auto rotate screen.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget application can rotate with the device orientation change.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt
new file mode 100755 (executable)
index 0000000..f9e5138
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html
new file mode 100755 (executable)
index 0000000..a76768c
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-bs-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-bs-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sbd024.SettingBsDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sbd024"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the counter on the page doesn't change when the widget is running background.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt
new file mode 100755 (executable)
index 0000000..42500ce
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html
new file mode 100755 (executable)
index 0000000..da79881
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2scd026.SettingCmDisable"/>
+                <input type="hidden" id="package_id" value="wrt2scd026"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>No popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt
new file mode 100755 (executable)
index 0000000..84064b4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html
new file mode 100755 (executable)
index 0000000..b8c164f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2sce027.SettingCmEnable"/>
+                <input type="hidden" id="package_id" value="wrt2sce027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt
new file mode 100755 (executable)
index 0000000..fd771ce
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html
new file mode 100755 (executable)
index 0000000..ed512b1
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sed028.SettingEncryptDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sed028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is not encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2sed028/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2sed028/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is a normal text.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt
new file mode 100755 (executable)
index 0000000..0c6922f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html
new file mode 100755 (executable)
index 0000000..934a9a7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2see029.SettingEncryptEnable"/>
+                <input type="hidden" id="package_id" value="wrt2see029"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2see029/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2see029/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is messy code.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt
new file mode 100755 (executable)
index 0000000..8dbcfbb
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html
new file mode 100755 (executable)
index 0000000..e52b061
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-default">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-default"/>
+                <input type="hidden" id="app_id"  value="wrt2shd044.settinghwkeydefault"/>
+                <input type="hidden" id="package_id" value="wrt2shd044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt
new file mode 100755 (executable)
index 0000000..cc600e7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html
new file mode 100755 (executable)
index 0000000..2db22bf
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2skd041.settinghwkeydisable"/>
+                <input type="hidden" id="package_id" value="wrt2skd041"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are two "Pass" displayed and no change on the screen when click the menu or back key.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt
new file mode 100755 (executable)
index 0000000..7ba8c67
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html
new file mode 100755 (executable)
index 0000000..a776b29
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2ske042.settinghwkeyenable"/>
+                <input type="hidden" id="package_id" value="wrt2ske042"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt
new file mode 100755 (executable)
index 0000000..a090050
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html
new file mode 100755 (executable)
index 0000000..c3364b7
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-internal-only-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-internal-only-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil053.settinginstalllocationinternalonlywithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil053"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a "PASS" after launch the widget.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt
new file mode 100755 (executable)
index 0000000..852f514
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html
new file mode 100755 (executable)
index 0000000..12587a3
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-no-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-no-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil054.settinginstalllocationpreferexternalnocard"/>
+                <input type="hidden" id="package_id" value="wrt2sil054"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure there is no memory card inserted into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt
new file mode 100755 (executable)
index 0000000..eb011ad
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt differ
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html
new file mode 100755 (executable)
index 0000000..574ec66
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil055.settinginstalllocationpreferexternalwithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil055"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt
new file mode 100755 (executable)
index 0000000..6ecaa44
Binary files /dev/null and b/tv/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CordovaSupport/index.html b/tv/tct-behavior-tests/tests/CordovaSupport/index.html
new file mode 100755 (executable)
index 0000000..cb1461e
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cordovaList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Cordova Support</li>
+                <li id="cordova-support">
+                    <a href="javascript:goToApp('res/cordova-support.html')" data-transition="slide" style="">
+                        <h2>cordova-support</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of cordova support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies cordova support tizen APIs.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/CordovaSupport/js/main.js b/tv/tct-behavior-tests/tests/CordovaSupport/js/main.js
new file mode 100755 (executable)
index 0000000..0367042
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var allId=new Array('G4rvZJzDIa');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CordovaSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.cordova.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cordovaList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/CordovaSupport/js/tests.js b/tv/tct-behavior-tests/tests/CordovaSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..0d1b966
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CordovaSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+document.write('<script src="../webrunner/jquery-1.10.2.min.js"></script>');
diff --git a/tv/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt b/tv/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt
new file mode 100755 (executable)
index 0000000..6edc30b
Binary files /dev/null and b/tv/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt differ
diff --git a/tv/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html b/tv/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html
new file mode 100755 (executable)
index 0000000..081c526
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="cordova-support">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TizenCordovaMobileSpec"/>
+                <input type="hidden" id="app_id"  value="G4rvZJzDIa.TizenCordovaMobileSpec"/>
+                <input type="hidden" id="package_id" value="G4rvZJzDIa"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all cordova test cases pass".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DataSync/NOTICE b/tv/tct-behavior-tests/tests/DataSync/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/DataSync/index.html b/tv/tct-behavior-tests/tests/DataSync/index.html
new file mode 100755 (executable)
index 0000000..f1b200b
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview">
+            <li data-role="list-divider">OMA DS(Data Synchronization) Server</li>
+            <li>
+                <input type="url" id="url" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server ID</li>
+            <li>
+                <input type="text" id="account" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Password</li>
+            <li>
+                <input type="password" id="passwd" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Database URI</li>
+            <li>
+                <input type="text" id="database" value="" />
+            </li>
+            <li data-role="list-divider">OMA DS Server Connect</li>
+            <li>
+                <div data-role="button" onclick="addProfile();">Add Profile</div>
+            </li>
+            <li data-role="list-divider">Contacts Sync</li>
+            <li>
+                <div data-role="button" onclick="startSync();">Start Sync</div>
+            </li>
+            <li data-role="list-divider">Contacts List</li>
+        </ul>
+        <ul data-role="listview" id="contactsList"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if data is successfully synchronized with an OMA DS server</p><br>
+            <p>Precondition: Pick one in &lt;Sample OMA DS Server List&gt; and add test contacts</p>
+            <p>&lt;Sample OMA DS Server List&gt;</p>
+            <p>- https://onemediahub.com/sync</p>
+            <p>- https://www.everdroid.com/web</p>
+            <p>- OMA DS 1.2 protocol Server</p><br>
+            <p>1. Fill in preset OMA DS Server, ID, Password and Database URI containing data to sync.<br>
+For the Database URI field "OMA DS Server Database URI",<br>
+- if you choose funambol OMA DS Server for this test, a tester needs to fill "card" string to the URI field.<br>
+- if you choose everdroid OMA DS Server for this test, a tester needs to fill "con" string to the URI field.<br>
+- if you are using other OMA DS Servers, then you need to go to the web page of the OMA DS Server which you use for the test.</p>
+            <p>2. Click Add Profile</p>
+            <p>3. Click Start Sync</p>
+            <p>4. Check the contacts are synchronized with the OMA DS server</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DataSync/js/main.js b/tv/tct-behavior-tests/tests/DataSync/js/main.js
new file mode 100755 (executable)
index 0000000..c5343db
--- /dev/null
@@ -0,0 +1,150 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var profileId = null;
+var account, passwd, url, database;
+
+var init = function () {
+    serverGuide();
+};
+
+function serverGuide() {
+    //alert("<Sample OMA DS Server List>\n1. https://onemediahub.com/sync \n2. https://www.everdroid.com/web  \n3. OMA DS 1.2 protocol Server\n*Recommend the 1st server");
+}
+
+function addProfile() {
+    try {
+        account = $("#account").val();
+        passwd = $("#passwd").val();
+        url = $("#url").val();
+        database = $("#database").val();
+
+        // Create a sync info.
+        var syncInfo = new tizen.SyncInfo(url, account, passwd, "MANUAL", "REFRESH_FROM_SERVER");
+
+        // Sync both contacts and events.
+        var contactInfo = new tizen.SyncServiceInfo(true, "CONTACT", database);
+        var serviceInfo = [contactInfo];
+
+        // Adds a profile to sync.
+        var profile = new tizen.SyncProfileInfo("MyProfile", syncInfo, serviceInfo);
+        tizen.datasync.add(profile);
+
+        profileId = profile.profileId;
+        alert("Add Profile ID : " + profileId);
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function startSync() {
+    var total;
+    var syncProgressCallback = {
+            onprogress: function (profileId, serviceType, isFromServer, totalPerType, syncedPerType) {
+                console.log('Total: ' + totalPerType + ', synced: ' + syncedPerType + ', for the sync type: ' + serviceType);
+                total = totalPerType;
+            },
+            onstopped: function (profileId) {
+                removeProfile();
+            },
+            onfailed: function (profileId, error) {
+                alert('Please try again in a few minutes.');
+                console.log('Failed with id: ' + profileId + ', error name: ' + error.name);
+            },
+            oncompleted: function (profileId) {
+                console.log("Completed with id" + profileId);
+                alert("Sync Completed - " + total + " Contacts");
+                contactList();
+            }
+    };
+
+    try {
+        tizen.datasync.startSync(profileId, syncProgressCallback);
+        alert("Contact sync start\n(OMA DS Server - Device)");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function removeProfile() {
+    try {
+        tizen.datasync.remove(profileId);
+        console.log("Removed ProfileId.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+function stopSync() {
+    try {
+        tizen.datasync.stopSync(profileId);
+        console.log("Stopped.");
+    } catch(err) {
+        alert(err.message);
+    }
+}
+
+/*function getLastSyncStatistics() {
+    try {
+        // Gets the sync statistics information with the given id.
+        var statistics = tizen.datasync.getLastSyncStatistics(profileId);
+        alert("Num statistics: " + statistics.length);
+        for(i in statistics) {
+            alert("syncStatus: " + statistics[i].syncStatus + ", serviceType: " + statistics[i].serviceType + ", lastSyncTime: " + statistics[i].lastSyncTime);
+            alert("serverToClientTotal: " + statistics[i].serverToClientTotal + ", serverToClientAdded: " + statistics[i].serverToClientAdded + ", serverToClientUpdated: " + statistics[i].serverToClientUpdated + ", serverToClientRemoved: " + statistics[i].serverToClientRemoved);
+            alert("clientToServerTotal: " + statistics[i].clientToServerTotal + ", clientToServerAdded: " + statistics[i].clientToServerAdded + ", clientToServerUpdated: " + statistics[i].clientToServerUpdated + ", clientToServerRemoved: " + statistics[i].clientToServerRemoved);
+        }
+    } catch(err) {
+        console.log(err.message);
+    }
+}*/
+
+function contactList() {
+    function successCallback(contacts) {
+        var str = "";
+
+        if(contacts.length > 0)
+        {
+            for (var i = 0; i < contacts.length; i++)
+            {
+                str += '<li>' + contacts[i].name.displayName + ' (' + contacts[i].phoneNumbers[0].number + ')</li>';
+            }
+            $("#contactsList").html(str).trigger("create").listview("refresh");
+        }
+        else
+        {
+            alert("Not found Contacts");
+        }
+        removeProfile();
+    }
+
+    function errorCallback(err) {
+        alert("An error occurred: " + err.message);
+    }
+
+    var filter = new tizen.AttributeFilter("lastUpdated", "EXISTS", null);
+
+    try {
+        tizen.contact.getDefaultAddressBook().find(successCallback, errorCallback, filter);
+    } catch(err) {
+        alert('The following error occurred while finding: ' +  err.name);
+    }
+}
+$(document).bind('pageinit', init);
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/index.html b/tv/tct-behavior-tests/tests/DeviceAPISecurity/index.html
new file mode 100755 (executable)
index 0000000..0392b39
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test DeviceAPI access by external</li>
+                <li id="deviceapi-access-by-external">
+                    <a href="javascript:goToApp('res/deviceapi-access-by-external.html')" data-transition="slide" style="">
+                        <h2>deviceapi-access-by-external</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies support identification of the sensitive API Privileges.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support access to sensitive API</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js b/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js
new file mode 100755 (executable)
index 0000000..7523e46
--- /dev/null
@@ -0,0 +1,332 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt5san005',
+                    'wrt5sar019',
+                    'wrtkill002',
+                    'wrt5sal017',
+                    'wrt5sbr079',
+                    'wrt5sbr080',
+                    'wrt5sba023',
+                    'wrt5sbg025',
+                    'wrt5sbs027',
+                    'wrt5scr031',
+                    'wrt5scw033',
+                    'wrt5sch039',
+                    'wrt5sch041',
+                    'wrt5scr047',
+                    'wrt5scw049',
+                    'wrt5con147',
+                    'wrt5con145',
+                    'wrt5sbr081',
+                    'wrt5sbr082',
+                    'wrt5dow143',
+                    'wrt5sfr053',
+                    'wrt5sfw055',
+                    'wrt5smr069',
+                    'wrt5smw073',
+                    'wrt5sbr084',
+                    'wrt5sna075',
+                    'wrt5nfc139',
+                    'wrt5snp079',
+                    'wrt5snt081',
+                    'wrt5not137',
+                    'wrt5sbr085',
+                    'wrt5sbr086',
+                    'wrt5pow135',
+                    'wrt5sbr087',
+                    'wrt5sbr088',
+                    'wrt5sse083',
+                    'wrt5sse087',
+                    'wrt5sys131',
+                    'wrt5ste091',
+                    'wrt1nj0034');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js b/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js
new file mode 100755 (executable)
index 0000000..993b0d8
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt5sed003',
+                    'wrt5sar018',
+                    'wrtkill001',
+                    'wrt5sal016',
+                    'wrt5sbr089',
+                    'wrt5sbr090',
+                    'wrt5sad022',
+                    'wrt5sbg024',
+                    'wrt5sbs026',
+                    'wrt5scr030',
+                    'wrt5scw032',
+                    'wrt5sch038',
+                    'wrt5sch040',
+                    'wrt5scr046',
+                    'wrt5scw048',
+                    'wrt5con148',
+                    'wrt5con146',
+                    'wrt5sbr091',
+                    'wrt5sbr092',
+                    'wrt5dow144',
+                    'wrt5sfr052',
+                    'wrt5sfw054',
+                    'wrt5smr068',
+                    'wrt5smw072',
+                    'wrt5sbr094',
+                    'wrt5sna074',
+                    'wrt5nfc140',
+                    'wrt5snp078',
+                    'wrt5snt080',
+                    'wrt5not138',
+                    'wrt5sbr095',
+                    'wrt5sbr096',
+                    'wrt5pow136',
+                    'wrt5sbr097',
+                    'wrt5sbr098',
+                    'wrt5ssd082',
+                    'wrt5ssd089',
+                    'wrt5sys132',
+                    'wrt5std090');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js b/tv/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js
new file mode 100755 (executable)
index 0000000..410c96d
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DeviceAPISecurity/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html b/tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html
new file mode 100755 (executable)
index 0000000..de1def1
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="deviceapi-access-by-external">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="deviceapi-access-by-external"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0034.deviceapiAccessByExternal"/>
+                <input type="hidden" id="package_id" value="wrt1nj0034"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"deviceapi-access-by-external-application" test Step: </p>
+            <ol>
+              <li>Choose application.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse application html successfully.</li>
+              <li>Browser launched and open application.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-bluetooth" test Step: </p>
+            <ol>
+              <li>Choose bluetooth.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse bluetooth html successfully.</li>
+              <li>Browser launched and open bluetooth.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-download" test Step: </p>
+            <ol>
+              <li>Choose download.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse download html successfully.</li>
+              <li>Browser launched and open download.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-systeminfo" test Step: </p>
+            <ol>
+              <li>Choose systeminfo.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse systeminfo html successfully.</li>
+              <li>Browser launched and open systeminfo.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt b/tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt
new file mode 100755 (executable)
index 0000000..5ea4cfb
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt differ
diff --git a/tv/tct-behavior-tests/tests/Download/NOTICE b/tv/tct-behavior-tests/tests/Download/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/Download/css/style.css b/tv/tct-behavior-tests/tests/Download/css/style.css
new file mode 100755 (executable)
index 0000000..6759e4c
--- /dev/null
@@ -0,0 +1,27 @@
+/* progress bar container */
+#progressbar {
+    border: 1px solid black;
+    width: 328px;
+    height: 18px;
+    position: relative;
+    text-align: center;
+    color: white;
+    -webkit-border-radius: 8px;
+}
+/* color bar */
+#progressbar div.progress {
+    position: absolute;
+    width: 0;
+    height: 100%;
+    overflow: hidden;
+    background-color: #369;
+    -webkit-border-radius: 8px;
+}
+/* text off bar */
+#progressbar div.text {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    text-align: center;
+    -webkit-border-radius: 8px;
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/Download/index.html b/tv/tct-behavior-tests/tests/Download/index.html
new file mode 100755 (executable)
index 0000000..226fe60
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<link rel="stylesheet" type="text/css" href="css/style.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="js/jqueryprogressbar.js" type="text/javascript"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Download URL</li>
+                <li>
+                    <input type="url" id="url" value="http://download.tizen.org/tct/tct-download-tizen-tests-image-hq.png" />
+                </li>
+                <li data-role="list-divider">Progress Bar</li>
+                <li>
+                    <div data-role="none" id="progressbar"></div>
+                </li>
+                <li data-role="list-divider">Download</li>
+                <li>
+                    <div data-role="button" id="download">Download</div>
+                    <div data-role="button" id="pause">Pause</div>
+                    <div data-role="button" id="resume">Resume</div>
+                    <div data-role="button" id="cancel">Cancel</div>
+                </li>
+                <li data-role="list-divider">Download folder</li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Download list delete</li>
+                <li>
+                    <div data-role="button" id="delete">Delete all</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the file is successfully downloaded</p><br>
+                <p>1. Fill in Download URL field (or use the default)</p>
+                <p>2. Click Download button and check the Progress Bar updated</p>
+                <p>3. Click Cancel, Pause, Download buttons to verify the functionalities</p>
+                <p>4. Check a download directory if the file successfully downloaded</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js b/tv/tct-behavior-tests/tests/Download/js/jqueryprogressbar.js
new file mode 100755 (executable)
index 0000000..457b54a
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2007 Josh Bush (digitalbush.com)
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * Progress Bar Plugin for jQuery
+ * Version: Alpha 2
+ * Release: 2007-02-26
+ */
+
+(function($) {
+    //Main Method
+    $.fn.reportprogress = function(val,maxVal) {
+        var max=100;
+        if(maxVal)
+            max=maxVal;
+        return this.each(
+            function(){
+                var div=$(this);
+                var innerdiv=div.find(".progress");
+
+                if(innerdiv.length!=1){
+                    innerdiv=$("<div class='progress'></div>");
+                    div.append("<div class='text'>&nbsp;</div>");
+                    $("<span class='text'>&nbsp;</span>").css("width",div.width()).appendTo(innerdiv);
+                    div.append(innerdiv);
+                }
+                var width=Math.round(val/max*100);
+                innerdiv.css("width",width+"%");
+                div.find(".text").html(width+" %");
+            }
+        );
+    };
+})(jQuery);
diff --git a/tv/tct-behavior-tests/tests/Download/js/main.js b/tv/tct-behavior-tests/tests/Download/js/main.js
new file mode 100755 (executable)
index 0000000..869a2f8
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gDownloadId, gDocumentsDir, gFiles;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#list").delegate("div", "vclick", function() {
+        deleteFileFromFolder($(this).parent().data("id"));
+        return false;
+    });
+
+    $("#download").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "DOWNLOADING") {
+                alert("Already downloading");
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            download();
+        }
+        return false;
+    });
+
+    $("#resume").bind("vclick", function() {
+        if (gDownloadId != undefined) {
+            var state = tizen.download.getState(gDownloadId);
+
+            if (state == "PAUSED") {
+                try {
+                    tizen.download.resume(gDownloadId);
+                    alert("Resumed");
+                } catch (exc) {
+                    alert("download.resume failed: " + exc.message);
+                }
+            } else {
+                alert("Another download in progress");
+            }
+        } else {
+            alert("No download in progress");
+        }
+        return false;
+    });
+
+    $("#pause").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        var state = tizen.download.getState(gDownloadId);
+
+        if (state == "PAUSED") {
+            alert("Already paused");
+        } else {
+            try {
+                tizen.download.pause(gDownloadId);
+                alert("Paused");
+            } catch (exc) {
+                alert("download.pause failed: " + exc.message);
+            }
+        }
+        return false;
+    });
+
+    $("#cancel").bind("vclick", function() {
+        if (gDownloadId == undefined) {
+            alert("No download in progress");
+            return false;
+        }
+
+        try {
+            tizen.download.cancel(gDownloadId);
+        } catch (exc) {
+            alert("download.cancel failed: " + exc.message);
+        }
+        return false;
+    });
+
+    $("#delete").bind("vclick", function() {
+        deleteAllFile();
+        return false;
+    });
+    prepareDirsAndFiles();
+});
+
+function onError(err) {
+    alert("Error: " + err.message);
+}
+
+function prepareDirsAndFiles() {
+    try {
+        tizen.filesystem.resolve("downloads", function(dir) {
+            gDocumentsDir = dir;
+            showFileList();
+        }, onError, "rw");
+    } catch (exc) {
+        alert("tizen.filesystem.resolve(\"downloads\") exc: " + exc.message);
+    }
+}
+
+function makeFileList(files) {
+    var str = "";
+
+    gFiles = files;
+    $("#list>li[data-id]").remove();
+
+    for (var i = 0; i < files.length; i++) {
+        if (files[i].isDirectory == false) {
+            str += '<li class="ui-li-text-ellipsis" data-id="'
+                + i
+                + '">'
+                + files[i].name
+                + '<div data-role="button" data-inline="true">Delete</div></li>';
+        }
+    }
+    $("#list").append(str).trigger("create").listview("refresh");
+}
+
+function showFileList() {
+    if(gDocumentsDir) {
+        gDocumentsDir.listFiles(function(files) {
+            makeFileList(files);
+        }, onError);
+    }
+}
+
+function deleteFileFromFolder(id) {
+    if (id == null) {
+        return;
+    }
+
+    try {
+        gDocumentsDir.deleteFile(gFiles[Number(id)].fullPath, showFileList, onError);
+        alert("Download delete");
+    } catch (exc) {
+        alert("deleteFile exc: " + exc.message);
+    }
+}
+
+function deleteAllFile() {
+    alert("Download delete all");
+    if(gFiles.length > 0)
+        for(var i = 0; i < gFiles.length; i++)
+            if(gFiles[i].isFile == true)
+                gDocumentsDir.deleteFile(gFiles[i].fullPath, showFileList, onError);
+}
+
+function download() {
+    var url = $("#url").val();
+
+    if (url == "") {
+        alert("Input target URL");
+        return;
+    }
+
+    var downloadRequest = new tizen.DownloadRequest(url, "downloads"),
+    listener = {
+        onprogress: function(id, receivedSize, totalSize) {
+            //$("#progressbar").progressbar("option", "value", receivedSize/totalSize*100);
+            if(receivedSize > 0)
+                $("#progressbar").reportprogress(receivedSize/totalSize*100);
+            console.log('Received with id: ' + id + ', ' + receivedSize + '/' + totalSize);
+        },
+        onpaused: function(id) {
+            console.log('Paused with id: ' + id);
+            //showFileList();
+        },
+        oncanceled: function(id) {
+            alert("Canceled");
+            //showFileList();
+            console.log(id);
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        },
+        oncompleted: function(id, fullPath) {
+            alert("Completed! Full path: " + fullPath);
+            showFileList();
+            gDownloadId = undefined;
+        },
+        onfailed: function(id, error) {
+            alert("Failed! Err: " + error.name);
+            //showFileList();
+            gDownloadId = undefined;
+            $("#progressbar").reportprogress(0);
+        }
+    };
+
+    //$("#progressbar").progressbar("option", "value", 0);
+    $("#progressbar").reportprogress(0);
+
+    try {
+        gDownloadId = tizen.download.start(downloadRequest, listener);
+        alert("Download");
+    } catch (exc) {
+        alert("download.start failed : " + exc.message);
+    }
+}
+
+var pct=0;
+var handle=0;
+function update(){
+    $("#progressbar").reportprogress(++pct);
+    if(pct==100){
+        clearInterval(handle);
+        $("#run").val("start");
+        pct=0;
+    }
+}
+jQuery(function($){
+    $("#run").click(function(){
+        if(this.value=="start"){
+            handle=setInterval("update()",100);
+            this.value="stop";
+        }else{
+            clearInterval(handle);
+            this.value="start";
+        }
+    });
+    $("#reset").click(function(){
+        pct=0;
+        $("#progressbar").reportprogress(0);
+    });
+});
diff --git a/tv/tct-behavior-tests/tests/DragandDrop/index.html b/tv/tct-behavior-tests/tests/DragandDrop/index.html
new file mode 100755 (executable)
index 0000000..071deae
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+      <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+      </div>
+      <div id="content">
+        <ul data-role="listview">
+          <li data-role="list-divider">Package Install</li>
+          <li>
+              <div data-role="button" id="install" class="wgtButton">Install</div>
+          </li>
+          <li data-role="list-divider">Package Launch</li>
+          <li>
+              <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+          </li>
+          <li data-role="list-divider">Package Uninstall</li>
+          <li>
+              <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+          </li>
+        </ul>
+      </div>
+      <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+      </div>
+      <div data-role="popup" id="popup_info" data-theme="a">
+        <font class="fontSize">
+          <p>Test Purpose: </p>
+          <p>Verifies the device supports drag and drop functions.</p>
+          <p>Pre-condition: </p>
+          <p>Ensure the drag and drop test widget is installed successfully.</p>
+          <p>Test Step: </p>
+          <ol>
+            <li>Click the "Install" button to install the widget.</li>
+            <li>Click the "Launch" button to launch the widget.</li>
+            <li>Click the "Uninstall" button to uninstall the widget.</li>
+          </ol>
+          <p>Expected Result: </p>
+          <p>Test passes if the blue rectangle could be drag and drop to the white box.</p>
+        </font>
+      </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DragandDrop/js/main.js b/tv/tct-behavior-tests/tests/DragandDrop/js/main.js
new file mode 100755 (executable)
index 0000000..0dd8e11
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+       $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhdragdrop")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The application DragandDrop is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(checkInstalledPkg("bhdragdrop")) {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                showProcess();
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhdragdrop", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : DragandDrop application is already uninstalled or not installed");
+    }
+    try {
+        tizen.application.launch("bhdragdrop.DragandDrop", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "DragandDrop")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/DragandDrop.wgt",
+                    true,
+                    function() {
+                        console.log("DragandDrop Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DragandDrop/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/tv/tct-behavior-tests/tests/DragandDrop/res/DragandDrop b/tv/tct-behavior-tests/tests/DragandDrop/res/DragandDrop
new file mode 100755 (executable)
index 0000000..556b836
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DragandDrop/res/DragandDrop differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/index.html b/tv/tct-behavior-tests/tests/DynamicBox/index.html
new file mode 100755 (executable)
index 0000000..c24d960
--- /dev/null
@@ -0,0 +1,127 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of DynamicBox application: mouse event and visibility event for DynamicBox.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button, test step passes if all app widgets installed successfully.</li>
+              <li>Click the "Launch" button to launch the DynamicBox Viewer. After each step below, press "Back" key (soft or hard key) to go forward next step:</li>
+              <ol>
+                <li>Click the "Mouse event false"; press the filled blue square; test step passes if the blue square doesn't change;</li>
+                <li>Click the "Sample"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Dynamic Box"; press the menu button to select size 354x354; then drag down the box; test step passes if there apears a button "Send message to Box", and click the button, "Hello, Dynamic Box" appends into the box;</li>
+                <li>Click the "AppWidget Content mouse event"; press the filled blue square; test step passes if the blue square changes to green;</li>
+                <li>Click the "AppWidget Load event"; test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "Visibility widget"; test step passes if there is a green 'Pass' text, and after drag down the 'Pass' there appears 'PD index.html';</li>
+                <li>Click the "Size Decoration"; press the menu button to select box size; test step passes if the box in '354x354' size has different frame decoration from those in '175x175' and '345x175' sizes;</li>
+                <li>Click the "Size Preview"; press the menu button; test step passes if there are icons in the size list.</li>
+                <li>Click the "Dynamicbox reload backgorund"; press test button(it will open another screen); then press Home key to back home screen and waitting 60s; test step passes if the number which show in the screen will recount immediately when click behavior tool/launch again.</li>
+                <li>Click the "Dynamicbox reload foregorund"; press test button(it will open another screen); then press Home key to back home screen and entry behavior tool/launch again; test step passes if the number which show in the screen will recount after a few seconds</li>
+                <li>Click the "AppWidget Unload event",  test step passes if there is a green 'Pass' text;</li>
+                <li>Click the "AppWidget alive time after load event fired", test step passes if there is a green 'Pass' text.</li>
+                <li>Click the "Install Web DynamicBox when DynamicBox's resources are not packaged in the web application.", test step passes if It should not be listed as dynamic box.</li>
+                <li>Click the "The deletion of Dynamic box in home screen does not uninstall the app.", test step passes if The Dynamic box present in the home screen should be removed. But the Widget installed should be still available within the app tray with name 'WDB_WGT_2'.</li>
+                <li>Click the "Installation missing mandatory attribute ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Installation missing primary attribute.", test step passes if it should install this file.</li>
+                <li>Click the "Installation without TIZEN_APPLICATION_ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Installation with having ID same as TIZEN_APPLICATION_ID.", test step passes if it should display Unable to install this file.</li>
+                <li>Click the "Reloading of dynamic box.", test step passes if the time difference should be exactly 30 min.</li>
+                <li>Click the "Behaviour with auto-launch attribute setting to true.", test step passes if the web application should be launched and should display a page with message 'APP Index Page'.</li>
+                <li>Click the "Behaviour with auto-launch attribute setting to false.", test step passes if the web application should be launched and should display a page with message 'APP Index Page'.</li>
+                <li>Click the "Behaviour without auto-launch attribute.", test step passes if the web application should not be launched.</li>
+                <li>Click the "Installation without app-widget child elements.", test step passes if Error pop up should appear stating "unable to install this file.The format is invalid.".</li>
+                <li>Click the "Installation without box-label elements.", test step passes if Error pop up should appear stating "unable to install this file.The format is invalid.".</li>
+                <li>Click the "Behaviour with box-label having valid value.", test step passes if Dynamic box should be available wihin the dynamic box selection list and should be added to Home Screen.".</li>
+                <li>Click the "Behaviour with multiple box-label element present.", test step passes if widget installation should be successful.".</li>
+                <li>Click the "Localization with lang support for box-label.", test step passes if the Dynamic Box selection list should have a dynamic box with name "WDB_EN_DName_27"and "WDB_FR_DName_27.".</li>
+                <li>Click the "Installation without box-icon.", test step passes if The widget should get installed and pass icon with size 1*1,2*1 and 2*2 should be displayed.".</li>
+                <li>Click the "Behavior with box-icon having path relative to Web Application directory.", test step passes if "PASS" Icon should be displayed with Size 1*1,2*1 and 2*2.".</li>
+                <li>Click the "Behavior with box-icon missing src attribute.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Installation missing box-content attributes.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Behavior with box-content src attribute valid path relative to Web Application directory.", test step passes if A index page with message "Web Dynamics Box Index Page." should be loaded within the dynamic box.".</li>
+                <li>Click the "Behavior with box-content missing src attribute.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Behavior with box-content src pointing to an existing remote http URL with allow-navigation element.", test step passes if It should load the 'w3.org' site within the dynamic box, load the 'w3.org' site within the drop view and The ' w3.org'  should be rendered within the APP view.".</li>
+                <li>Click the "Behavior with box-content src pointing to an existing remote http URL without allow-navigation element.", test step passes if It should block loading of 'w3c.org' within dynamic box, drop view,launch the APP and should load the link with Browser and browser should move to background.".</li>
+                <li>Click the "Behavior with box-content  src  pointing to an existing remote https URL with allow-navigation and access.", test step passes if load linkedin site within the dynamic box.".</li>
+                <li>Click the "Behavior with box-content  src  pointing to an existing remote https URL with allow-navigation and access different.", test step passes if It should block loading linkedin site within the dynamic box, drop view.".</li>
+                <li>Click the "Behavior with touch-event true.", test step passes if The special UI effect should be displayed for the dynamic box.".</li>
+                <li>Click the "Behavior with touch-event false.", test step passes if The special UI effect should not be displayed for the dynamic box.".</li>
+                <li>Click the "Behavior without box-size child element.", test step passes if Error pop up should appear stating "unable to install this file.".</li>
+                <li>Click the "Verify sending messages between the Box and the Drop View.", test step passes if message 'Hello, Dynamic Box should be displayed within the dynamic box and message "Hello, Drop View" should be displayed within the drop view.".</li>
+                <li>Click the "Verify web dynamic box runtime should keep the content of the Dynamic Box Drop View alive until the Drop View is closed.", test step passes if  The counter within the drop view should get updated in each 5 sec interval till the drop view is opened.".</li>
+              </ol>
+              <li>Click the "Uninstall" button, test step passes if all app widgets uninstalled successfully.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test steps pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/js/main.js b/tv/tct-behavior-tests/tests/DynamicBox/js/main.js
new file mode 100755 (executable)
index 0000000..0d81c34
--- /dev/null
@@ -0,0 +1,476 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "";
+var wgt_names = new Array('app-widget-mouse-event-false.wgt',
+                          'app-widget-sample.wgt',
+                          'app-widget-box-appwidgetready-event.wgt',
+                          'app-widget-mouse-event-true.wgt',
+                          'app-widget-load-event.wgt',
+                          'app-widget-visibility-event.wgt',
+                          'app-widget-box-size-decoration.wgt',
+                          'app-widget-box-size-preview.wgt',
+                          'app-widget-sign-author.wgt',
+                          'app-widget-sign-author-distributor.wgt',
+                          'app-widget-sign-distributor.wgt',
+                          'app-widget-sign-invalid.wgt',
+                          'app-widget-sign-none.wgt',
+                          'app-device-api-security-alarm.wgt',
+                          'app-device-api-security-application-info.wgt',
+                          'app-device-api-security-application-launch.wgt',
+                          'app-device-api-security-appmanager-certificate.wgt',
+                          'app-device-api-security-bluetooth-health.wgt',
+                          'app-device-api-security-bluetooth-manager.wgt',
+                          'app-device-api-security-negative.wgt',
+                          'app-device-api-security-system.wgt',
+                          'app-device-api-security-systemmanager.wgt',
+                          'app-device-api-security-websetting.wgt',
+                          'app-device-api-security-secureelement.wgt',
+                          'app-device-api-security-setting.wgt',
+                          'dynamicbox-reload-background.wgt',
+                          'dynamicbox-reload-foreground.wgt',
+                          'app-widget-unload-event.wgt',
+                          'app-widget-load-event-alive-time.wgt',
+                          'WebDynamicBox_1.wgt',
+                          'WebDynamicBox_2.wgt',
+                          'WebDynamicBox_7.wgt',
+                          'WebDynamicBox_8.wgt',
+                          'WebDynamicBox_9.wgt',
+                          'WebDynamicBox_10.wgt',
+                          'WebDynamicBox_13.wgt',
+                          'WebDynamicBox_17.wgt',
+                          'WebDynamicBox_18.wgt',
+                          'WebDynamicBox_19_3.wgt',
+                          'WebDynamicBox_20.wgt',
+                          'WebDynamicBox_21.wgt',
+                          'WebDynamicBox_22.wgt',
+                          'WebDynamicBox_25.wgt',
+                          'WebDynamicBox_27.wgt',
+                          'WebDynamicBox_28.wgt',
+                          'WebDynamicBox_30.wgt',
+                          'WebDynamicBox_37.wgt',
+                          'WebDynamicBox_39.wgt',
+                          'WebDynamicBox_41.wgt',
+                          'WebDynamicBox_44.wgt',
+                          'WebDynamicBox_45.wgt',
+                          'WebDynamicBox_45_1.wgt',
+                          'WebDynamicBox_55_4.wgt',
+                          'WebDynamicBox_55_5.wgt',
+                          'WebDynamicBox_65.wgt',
+                          'WebDynamicBox_66.wgt',
+                          'WebDynamicBox_75.wgt',
+                          'WebDynamicBox_106.wgt',
+                          'WebDynamicBox_114.wgt');
+
+var package_ids = new Array('wrt6awi014',
+                            'wrt6app001',
+                            'wrt6awb006',
+                            'wrt6awi013',
+                            'wrt6aws016',
+                            'wrt6aws018',
+                            'wrt6awb003',
+                            'wrt6awb005',
+                            'wrt6sig001',
+                            'wrt6sig003',
+                            'wrt6sig004',
+                            'wrt6sig002',
+                            'wrt6sig005',
+                            'wrt6api003',
+                            'wrt6api004',
+                            'wrt6api005',
+                            'wrt6api006',
+                            'wrt6api010',
+                            'wrt6api012',
+                            'wrt6api050',
+                            'wrt6api041',
+                            'wrt6api042',
+                            'wrt6api043',
+                            'wrt6api039',
+                            'wrt6api040',
+                            'tctdyna009',
+                            'tctdyna010',
+                            'wrt6aws020',
+                            'wrt6aws021',
+                            'GOlxQoIL8p',
+                            'YJj0WRVaJL',
+                            'Zyj5WRVa07',
+                            'Zyj5W00008',
+                            'Zyj5WRVa09',
+                            'Zyj5WRVa10',
+                            'Zyj5WRVa13',
+                            'Zyj5WRVa17',
+                            'Zyj5WRVa18',
+                            'Zyj5WRV319',
+                            'Zyjn7RVa20',
+                            'Zyj5WRVa21',
+                            'Zyj5WRVa22',
+                            'Zyj5WRVa25',
+                            'Zyj5WRVa27',
+                            'Zyj5gRVa28',
+                            'Zyj5WRVa30',
+                            'Zyj5WRVa37',
+                            'ol75WRVa39',
+                            'Zyj5WRVa41',
+                            'Zyj5WRVa44',
+                            'Zyj5WRaa45',
+                            'Zyj5WR1045',
+                            'Zyj5WR4055',
+                            'Zyj5WR5055',
+                            'Zyj5WRVa65',
+                            'Zyj5WRVa66',
+                            'Zyj5WRVa75',
+                            'Zyj5WRV106',
+                            'Zyj5WR0114');
+
+var id_maps = {'rMLtTXzQr2-2.0.0-arm.tpk':                           'rMLtTXzQr2',
+               'SD2nFxbyeA-2.0.0-i386.tpk':                          'SD2nFxbyeA',
+               'app-widget-mouse-event-false.wgt':                   'wrt6awi014',
+               'app-widget-sample.wgt':                              'wrt6app001',
+               'app-widget-box-appwidgetready-event.wgt':            'wrt6awb006',
+               'app-widget-mouse-event-true.wgt':                    'wrt6awi013',
+               'app-widget-load-event.wgt':                          'wrt6aws016',
+               'app-widget-visibility-event.wgt':                    'wrt6aws018',
+               'app-widget-box-size-decoration.wgt':                 'wrt6awb003',
+               'app-widget-box-size-preview.wgt':                    'wrt6awb005',
+               'app-widget-sign-author.wgt':                         'wrt6sig001',
+               'app-widget-sign-author-distributor.wgt':             'wrt6sig003',
+               'app-widget-sign-distributor.wgt':                    'wrt6sig004',
+               'app-widget-sign-invalid.wgt':                        'wrt6sig002',
+               'app-widget-sign-none.wgt':                           'wrt6sig005',
+               'app-device-api-security-alarm.wgt':                  'wrt6api003',
+               'app-device-api-security-application-info.wgt':       'wrt6api004',
+               'app-device-api-security-application-launch.wgt':     'wrt6api005',
+               'app-device-api-security-appmanager-certificate.wgt': 'wrt6api006',
+               'app-device-api-security-bluetooth-health.wgt':       'wrt6api010',
+               'app-device-api-security-bluetooth-manager.wgt':      'wrt6api012',
+               'app-device-api-security-negative.wgt':               'wrt6api050',
+               'app-device-api-security-system.wgt':                 'wrt6api041',
+               'app-device-api-security-systemmanager.wgt':          'wrt6api042',
+               'app-device-api-security-websetting.wgt':             'wrt6api043',
+               'app-device-api-security-secureelement.wgt':          'wrt6api039',
+               'app-device-api-security-setting.wgt':                'wrt6api040',
+               'dynamicbox-reload-background.wgt':                   'tctdyna009',
+               'dynamicbox-reload-foreground.wgt':                   'tctdyna010',
+               'app-widget-unload-event.wgt':                        'wrt6aws020',
+               'app-widget-load-event-alive-time.wgt':               'wrt6aws021',
+               'WebDynamicBox_1.wgt':                                'GOlxQoIL8p',
+               'WebDynamicBox_2.wgt':                                'YJj0WRVaJL',
+               'WebDynamicBox_7.wgt':                                'Zyj5WRVa07',
+               'WebDynamicBox_8.wgt':                                'Zyj5W00008',
+               'WebDynamicBox_9.wgt':                                'Zyj5WRVa09',
+               'WebDynamicBox_10.wgt':                               'Zyj5WRVa10',
+               'WebDynamicBox_13.wgt':                               'Zyj5WRVa13',
+               'WebDynamicBox_17.wgt':                               'Zyj5WRVa17',
+               'WebDynamicBox_18.wgt':                               'Zyj5WRVa18',
+               'WebDynamicBox_19_3.wgt':                             'Zyj5WRV319',
+               'WebDynamicBox_20.wgt':                               'Zyjn7RVa20',
+               'WebDynamicBox_21.wgt':                               'Zyj5WRVa21',
+               'WebDynamicBox_22.wgt':                               'Zyj5WRVa22',
+               'WebDynamicBox_25.wgt':                               'Zyj5WRVa25',
+               'WebDynamicBox_27.wgt':                               'Zyj5WRVa27',
+               'WebDynamicBox_28.wgt':                               'Zyj5gRVa28',
+               'WebDynamicBox_30.wgt':                               'Zyj5WRVa30',
+               'WebDynamicBox_37.wgt':                               'Zyj5WRVa37',
+               'WebDynamicBox_39.wgt':                               'ol75WRVa39',
+               'WebDynamicBox_41.wgt':                               'Zyj5WRVa41',
+               'WebDynamicBox_44.wgt':                               'Zyj5WRVa44',
+               'WebDynamicBox_45.wgt':                               'Zyj5WRaa45',
+               'WebDynamicBox_45_1.wgt':                             'Zyj5WR1045',
+               'WebDynamicBox_55_4.wgt':                             'Zyj5WR4055',
+               'WebDynamicBox_55_5.wgt':                             'Zyj5WR5055',
+               'WebDynamicBox_65.wgt':                               'Zyj5WRVa65',
+               'WebDynamicBox_66.wgt':                               'Zyj5WRVa66',
+               'WebDynamicBox_75.wgt':                               'Zyj5WRVa75',
+               'WebDynamicBox_106.wgt':                              'Zyj5WRV106',
+               'WebDynamicBox_114.wgt':                              'Zyj5WR0114'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DynamicBox/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora b/tv/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora
new file mode 100755 (executable)
index 0000000..4a0af40
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices
+     within Derivative Works that You distribute, alongside or as an addendum
+     to the NOTICE text from the Work, provided that such additional attribution
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk b/tv/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..8241fb8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt
new file mode 100755 (executable)
index 0000000..c27c57f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt
new file mode 100755 (executable)
index 0000000..d84b5a8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_10.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt
new file mode 100755 (executable)
index 0000000..3f24f33
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_106.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt
new file mode 100755 (executable)
index 0000000..1b55f92
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_114.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt
new file mode 100755 (executable)
index 0000000..73d81c7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_13.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt
new file mode 100755 (executable)
index 0000000..65d529a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_17.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt
new file mode 100755 (executable)
index 0000000..94975f8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_18.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt
new file mode 100755 (executable)
index 0000000..3906309
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_19_3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt
new file mode 100755 (executable)
index 0000000..7de26a4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt
new file mode 100755 (executable)
index 0000000..7f50ca4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_20.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt
new file mode 100755 (executable)
index 0000000..8bfedb1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_21.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt
new file mode 100755 (executable)
index 0000000..d9d14cf
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_22.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt
new file mode 100755 (executable)
index 0000000..acb231c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_25.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt
new file mode 100755 (executable)
index 0000000..5c84341
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_27.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt
new file mode 100755 (executable)
index 0000000..f731bbe
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_28.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt
new file mode 100755 (executable)
index 0000000..196e5aa
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_30.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt
new file mode 100755 (executable)
index 0000000..f87705c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_37.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt
new file mode 100755 (executable)
index 0000000..17686e9
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_39.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt
new file mode 100755 (executable)
index 0000000..e6f8be8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_41.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt
new file mode 100755 (executable)
index 0000000..7dcf0da
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_44.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt
new file mode 100755 (executable)
index 0000000..c851f29
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt
new file mode 100755 (executable)
index 0000000..1737470
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_45_1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt
new file mode 100755 (executable)
index 0000000..e493981
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_4.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt
new file mode 100755 (executable)
index 0000000..d69a272
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_55_5.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt
new file mode 100755 (executable)
index 0000000..87fa4c1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_65.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt
new file mode 100755 (executable)
index 0000000..9d5bc37
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_66.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt
new file mode 100755 (executable)
index 0000000..336b704
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_7.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt
new file mode 100755 (executable)
index 0000000..c5b57b3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_75.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt
new file mode 100755 (executable)
index 0000000..fbc3b01
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_8.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt
new file mode 100755 (executable)
index 0000000..977d7f0
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/WebDynamicBox_9.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt
new file mode 100755 (executable)
index 0000000..4250891
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt
new file mode 100755 (executable)
index 0000000..6817bea
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt
new file mode 100755 (executable)
index 0000000..f937937
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt
new file mode 100755 (executable)
index 0000000..69ef56d
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt
new file mode 100755 (executable)
index 0000000..e4234af
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt
new file mode 100755 (executable)
index 0000000..5eb6f86
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt
new file mode 100755 (executable)
index 0000000..f57fb12
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt
new file mode 100755 (executable)
index 0000000..05b82a7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt
new file mode 100755 (executable)
index 0000000..253afbd
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt
new file mode 100755 (executable)
index 0000000..03a4c24
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt
new file mode 100755 (executable)
index 0000000..c6db6e1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt
new file mode 100755 (executable)
index 0000000..9c358b8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt
new file mode 100755 (executable)
index 0000000..0897346
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-appwidgetready-event.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt
new file mode 100755 (executable)
index 0000000..8e97297
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-decoration.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt
new file mode 100755 (executable)
index 0000000..774a7c3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-box-size-preview.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt
new file mode 100755 (executable)
index 0000000..9e7f78e
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event-alive-time.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt
new file mode 100755 (executable)
index 0000000..2a220c4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-load-event.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt
new file mode 100755 (executable)
index 0000000..a274947
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-false.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt
new file mode 100755 (executable)
index 0000000..1991dba
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-mouse-event-true.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt
new file mode 100755 (executable)
index 0000000..3ce54bf
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sample.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt
new file mode 100755 (executable)
index 0000000..77d0f8f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt
new file mode 100755 (executable)
index 0000000..010e00d
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt
new file mode 100755 (executable)
index 0000000..85d7140
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt
new file mode 100755 (executable)
index 0000000..5924aa6
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt
new file mode 100755 (executable)
index 0000000..46874f3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt
new file mode 100755 (executable)
index 0000000..5c76493
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-unload-event.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt
new file mode 100755 (executable)
index 0000000..23750ca
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/app-widget-visibility-event.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt
new file mode 100755 (executable)
index 0000000..b82d2a2
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt
new file mode 100755 (executable)
index 0000000..fbb29f7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt b/tv/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt
new file mode 100755 (executable)
index 0000000..2a2aaf8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt differ
diff --git a/tv/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk b/tv/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..777a62a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk differ
diff --git a/tv/tct-behavior-tests/tests/FileReader/css/style.css b/tv/tct-behavior-tests/tests/FileReader/css/style.css
new file mode 100755 (executable)
index 0000000..9ffb372
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+*/
+
+/* Message Div */
+#messageInfo {
+   margin: 10px;
+}
+.errorMessage {
+    color: red;
+}
+
+/* File List */
+#filesList {
+    table-layout: fixed;
+}
+
+#filesList tr td {
+    padding: 5px;
+    font-size: large;
+    word-break: break-all;
+    word-wrap:break-word;
+}
+
+#filePreview {
+    margin-top: 10px;
+    text-align: center;
+    border: 1px solid black;
+    width: 100%;
+    height: 300px;
+    overflow: auto;
+}
+
+#fileContent {
+    position:relative;
+    top:40%;
+}
+
+#uploadButton {
+    margin-top: 20px;
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/FileReader/index.html b/tv/tct-behavior-tests/tests/FileReader/index.html
new file mode 100755 (executable)
index 0000000..ced077e
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <input id="fileUpload" type="file" multiple size="80" onchange="getFileList()" hidden/>
+            <div id="messageInfo">Upload: 0 file</div>
+            <table id="filesList" border="1" width="100%" align="center">
+                <tr id="example"><td width='70%'>No file selected</td><td width='30%'>0KB</td></tr>
+            </table>
+            <div align="center"><div id="filePreview"><p id="fileContent">No file data</p></div></div>
+            <div id="uploadButton" data-role="button">Open files</div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of File Reader. Tests the functionality of loading one or multiple files, opening the files one by one by clicking the hyperlink in file name.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure at least one txt file is located in the device.</p>
+            <p>Expected Result: </p>
+            <ul>
+              <li>File upload successfully.</li>
+              <li>File size show correctly.</li>
+              <li>File content print on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/FileReader/js/main.js b/tv/tct-behavior-tests/tests/FileReader/js/main.js
new file mode 100755 (executable)
index 0000000..aa8cbe1
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+*/
+$(document).ready(function(){
+    $("#uploadButton").on("click", function() {
+        if (document.createEvent) {
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#fileUpload")[0].dispatchEvent(evt);
+        }
+    });
+    DisablePassButton();
+});
+
+
+function getFileList() {
+    try{
+        // get FileList through input element
+        var filesList = document.getElementById("fileUpload").files;
+        // FileList.length
+        if(filesList && filesList.length > 0){
+            $("#example").remove();
+            $("#messageInfo").html("Upload: " + filesList.length + " file/s");
+            var filesStr = "";
+            for(var i= 0; i < filesList.length; i++) {
+                // FileList.item() to get file items
+                var file = filesList.item(i);
+                // Blob.slice testing
+                file.slice = file.slice || file.webkitSlice || file.mozSlice;
+                var fileBlob = file.slice(0, file.size);
+                // This fileBlob should be the same with the file
+                if(fileBlob.size == file.size){
+                    filesStr = filesStr + "<tr><td width='70%'><a href='javascript:startRead(" + i + ")'>" + file.name + "</a></td><td width='30%'>" + Math.round(file.size/1024) + "KB</td>" + "</tr>";
+                }
+            }
+            $("#filesList").show();
+            $("#filesList").html(filesStr);
+        }
+    } catch (err) {
+        $("#messageInfo").addClass("errorMessage");
+        $("#messageInfo").html("Error: " + err.code + " - " + err.message);
+    }
+}
+
+var filetype = "";
+function startRead(index) {
+
+    var file = document.getElementById("fileUpload").files[index];
+    if (file) {
+        var reader = new FileReader();
+        if(file.type.indexOf("text") >= 0) {
+            // readAsText
+            // Read file into memory as UTF-8
+            reader.readAsText(file, "UTF-8");
+            filetype = "text";
+        } else if (file.type.indexOf("image") >= 0) {
+            // readAsDataURL
+            reader.readAsDataURL(file);
+            filetype = "image";
+        } else {
+            try {
+                //try to read other types of file as text.
+                reader.readAsText(file, "UTF-8");
+                filetype = "text";
+            } catch(e) {
+                $.mobile.hidePageLoadingMsg();
+                $("#filePreview").html("Cannot pre-view this type of file!");
+            }
+        }
+        EnablePassButton();
+        // Handle progress, success, and errors
+        reader.onloadstart = loadstart;
+        reader.onload = loaded;
+        reader.onloadend = loadend;
+        reader.onerror = errorHandler;
+    }
+}
+function loadstart(evt) {
+    // loading
+    $.mobile.showPageLoadingMsg();
+}
+
+function loaded(evt) {
+    var reader = evt.target;
+    if (reader && reader.result) {
+        if(filetype == "text") {
+            $("#filePreview").html(reader.result);
+        } else if (filetype == "image") {
+            $("#filePreview").html("<image src='" + reader.result + "'></image>");
+        }
+    }
+}
+
+function loadend(evt) {
+    $.mobile.hidePageLoadingMsg();
+}
+
+function errorHandler(evt) {
+   $("#messageInfo").addClass("errorMessage");
+   $("#messageInfo").html(evt.target.error.name);
+}
diff --git a/tv/tct-behavior-tests/tests/FullScreen/index.html b/tv/tct-behavior-tests/tests/FullScreen/index.html
new file mode 100755 (executable)
index 0000000..4188aa8
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <style>
+        div:full-screen {
+            opacity: 0;
+        }
+        div:-webkit-full-screen {
+            opacity: 0;
+        }
+        :full-screen-ancestor {
+            opacity: 1;
+            background: green;
+        }
+        :-webkit-full-screen-ancestor {
+            background: green;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider" id="labelFullScreen">FullScreen</li>
+        <li id ="buttonFullScreen">
+          <div data-role="button" id="requestFullScreen">Request</div>
+          <div data-role="button" id="cancelFullScreen" class="hideButton">Cancle FullScreen</div>
+        </li>
+        <li data-role="list-divider" id="labelcssFullScreen">CSS FullScreen</li>
+        <li id ="buttoncssFullScreen">
+          <div data-role="button" id="cssFullScreen">Request</div>
+          <div data-role="button" id="cancelCssFullScreen" class="hideButton">Cancle CSS FullScreen</div>
+        </li>
+      </ul>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the full screen mode and CSS full screen mode could be enabled and cancelled. The CSS full screen mode is filled with green color in background.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if full screen mode and CSS full screen mode functions all work well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/FullScreen/js/main.js b/tv/tct-behavior-tests/tests/FullScreen/js/main.js
new file mode 100755 (executable)
index 0000000..cfb4371
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+$(document).ready(function () {
+    DisablePassButton();
+    $("#requestFullScreen").on(
+        "click",
+        function(evt) {
+            document.documentElement.webkitRequestFullScreen();
+            requestElement("cancelFullScreen");
+            EnablePassButton();
+     });
+
+     $("#cancelFullScreen").on(
+        "click",
+        function(evt) {
+            document.webkitCancelFullScreen();
+            requestElement("");
+     });
+
+     $("#cssFullScreen").on(
+        "click",
+        function(evt) {
+            if (!document.webkitIsFullScreen) {
+                var element = evt.originalEvent.srcElement;
+                requestElement("cancelCssFullScreen");
+                element.webkitRequestFullScreen();
+                setTimeout(function() {
+                    document.documentElement.webkitRequestFullScreen();
+                }, 50);
+            }
+            EnablePassButton();
+     });
+
+     $("#cancelCssFullScreen").on(
+        "click",
+        function(evt) {
+            window.location.reload();
+            /**if (document.webkitIsFullScreen) {
+                document.webkitCancelFullScreen();
+                if ($(document)["context"].styleSheets.length == 2) {
+                    $(document)["context"].styleSheets[1].deleteRule(1);
+                }
+                document.documentElement.webkitRequestFullScreen();
+                window.location.reload();
+            }*/
+     });
+});
+
+function requestElement(ID) {
+    var IDs = ["requestFullScreen", "cancelFullScreen", "cssFullScreen", "cancelCssFullScreen", "labelFullScreen", "labelcssFullScreen", "buttonFullScreen", "buttoncssFullScreen"];
+    IDs.forEach(function(entry) {
+        if (ID != entry) {
+            if (ID == "cancelFullScreen" && entry != "labelFullScreen" && entry != "buttonFullScreen") {
+                $("#" + entry).hide();
+            } else if (ID == "cancelCssFullScreen" && entry != "labelcssFullScreen" && entry != "buttoncssFullScreen") {
+                $("#" + entry).hide();
+            }
+        } else {
+            $("#" + entry).css("display", "");
+            $("#" + entry).show();
+        }
+        if (ID == "") {
+            if (entry == IDs[1] || entry == IDs[3]) {
+                $("#" + entry).hide();
+            } else {
+                $("#" + entry).show();
+            }
+        }
+    });
+}
diff --git a/tv/tct-behavior-tests/tests/HTML5Forms/css/style.css b/tv/tct-behavior-tests/tests/HTML5Forms/css/style.css
new file mode 100755 (executable)
index 0000000..1d31a68
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Align */
+.text-left{
+    text-align: left;
+}
+.text-right{
+    text-align: right;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+/* CSS text-decoration */
+.decoration1{
+    text-decoration: underline;
+}
+.decoration2{
+    text-decoration: line-through;
+}
+.decoration3{
+    text-decoration: overline;
+}
+
+/* CSS break-word */
+.break1{
+    word-break: break-all;
+    text-align: justify;
+}
+.break2{
+    word-break: break-word;
+    text-align: justify;
+}
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/tv/tct-behavior-tests/tests/HTML5Forms/index.html b/tv/tct-behavior-tests/tests/HTML5Forms/index.html
new file mode 100755 (executable)
index 0000000..1b8e252
--- /dev/null
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title">HTML5 Forms</h1>
+    </div>
+    <div data-role="content" class="content">
+      <form action="index.html" method="get" id="the-form">
+        <div>
+          <p>input type="color"</p>
+          <input style="width: 50px;height: 50px;" value="#000000" name="color" type="color">
+        </div>
+<!-- comment due to vd product issue, it will be opened from tizen 4.0
+        <div>
+          <p>input type="date"</p>
+          <input name="date" type="date">
+        </div>
+        <div>
+          <p>input type="datetime"</p>
+          <input name="datetime" type="datetime">
+        </div>
+        <div>
+          <p>input type="datetime_local"</p>
+          <input name="datetime-local" type="datetime-local">
+        </div>
+-->
+        <div>
+          <p>input type="email"</p>
+          <input name="email" type="email">
+        </div>
+<!-- comment due to vd product issue, it will be opened from tizen 4.0
+        <div>
+          <p>input type="month"</p>
+          <input name="month" type="month">
+        </div>
+-->
+        <div>
+          <p>input type="number"</p>
+          <input name="number" type="number">
+        </div>
+        <div data-role="rangeslider">
+          <p>input type="range"</p>
+          <label for="range"></label>
+          <input name="range" id="range-1a" min="0" max="100" value="50" type="range" />
+        </div>
+        <div>
+          <p>input type="search"</p>
+          <input name="search" results="5" autosave="saved-searches" type="search">
+        </div>
+        <div>
+          <p>input type="tel"</p>
+          <input name="tel" type="tel">
+        </div>
+<!-- comment due to vd product issue, it will be opened from tizen 4.0
+        <div>
+          <p>input type="time"</p>
+          <input name="time" type="time">
+        </div>
+-->
+        <div>
+          <p>input type="url"</p>
+          <input name="url" type="url">
+        </div>
+<!-- comment due to vd product issue, it will be opened from tizen 4.0
+        <div>
+          <p>input type="week"</p>
+          <input name="week" type="week">
+        </div>
+-->
+        <div>
+          <input value="Send" type="submit">
+        </div>
+      </form>
+      <script>
+      (function () {
+          var theForm = document.getElementById("the-form");
+          if ("oninput" in theForm) {
+              theForm.addEventListener("input", function () {
+                  output.value = range.value;
+                  alert(range.value);
+              }, false);
+          }
+      })();
+      </script>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies all kind of form work properly</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/HTML5Forms/js/COPYING b/tv/tct-behavior-tests/tests/HTML5Forms/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/tv/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js b/tv/tct-behavior-tests/tests/HTML5Forms/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/index.html b/tv/tct-behavior-tests/tests/HybridApplication/index.html
new file mode 100755 (executable)
index 0000000..c28cda2
--- /dev/null
@@ -0,0 +1,94 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <title>HybridApplication</title>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" class="wgtButton">Update</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+                <li>
+                    <div data-role="button" id="launch3" class="wgtButton">Try to Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of hybrid application. Tests the functionality of two hybrid applications installation, uninstallation, launching and update.</p>
+            <ol>
+              <li>Click the "Install" button to install the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Update" button to update the Hybrid app.</li>
+              <li>Click the "Launch" button to launch the Hybrid app.</li>
+              <li>Click the "Uninstall" button to uninstall the Hybrid app.</li>
+              <li>Click the "Try to Launch" button to launch the Hybrid app, it will get an error msg.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test points work well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/js/main.js b/tv/tct-behavior-tests/tests/HybridApplication/js/main.js
new file mode 100755 (executable)
index 0000000..8a69f8b
--- /dev/null
@@ -0,0 +1,286 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Wei, Ji <wei.ji@samsung.com>
+
+*/
+
+var installUrl, updateUrl, platformName, packagePath;
+var opened_flag = false;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        if (!opened_flag) {
+            opened_flag = true;
+            $("#update").removeClass("ui-disabled");
+        }
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+        EnablePassButton();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("bhtchybrid")) {
+        $("#install").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            hideProcess();
+            alert("The application " + packageInfo.name + " is updated");
+            $("#update").removeClass("ui-disabled");
+        },
+        onuninstalled: function(packageId) {
+            hideProcess();
+            alert("The Hybrid application is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "HybridApp2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if (type == "install") {
+                    $("#install").addClass("ui-disabled");
+                    $("#launch1").removeClass("ui-disabled");
+                }
+                if (type == "update") {
+                    $("#update").addClass("ui-disabled");
+                    $("#launch2").removeClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                showProcess();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $("#launch1").addClass("ui-disabled");
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                $("#launch3").removeClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        console.log("Error occured on installation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall("bhtchybrid", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhtchybrid.HybridApp", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "HybridApp2.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/" + "HybridApp2.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp2 Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "HybridApp1.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/" + "HybridApp1.wgt",
+                    true,
+                    function() {
+                        console.log("HybridApp1 Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    //add corssplatform support
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    platformName = deviceCapabilities.platformCoreCpuArch;
+    if (platformName.indexOf("armv7") >= 0) {
+        packagePath = "wgt-package/tests/HybridApplication/res/armv7/";
+    } else if (platformName.indexOf("x86") >= 0) {
+        packagePath = "wgt-package/tests/HybridApplication/res/x86/";
+    } else {
+        alert("Error: Unsupported platform");
+        return;
+    }
+
+    tizen.filesystem.resolve(
+        packagePath,
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function hideProcess() {
+    $.mobile.hidePageLoadingMsg();
+    $("#popup_info-screen").addClass("ui-screen-hidden");
+    $("#popup_info-screen").removeClass("in");
+}
+
+function showProcess() {
+    $.mobile.showPageLoadingMsg();
+    $("#popup_info-screen").removeClass("ui-screen-hidden");
+    $("#popup_info-screen").addClass("in");
+}
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt b/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt
new file mode 100755 (executable)
index 0000000..6ee159a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt b/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt
new file mode 100755 (executable)
index 0000000..ef5d970
Binary files /dev/null and b/tv/tct-behavior-tests/tests/HybridApplication/res/armv7/HybridApp2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt b/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt
new file mode 100755 (executable)
index 0000000..be0e9e0
Binary files /dev/null and b/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt b/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt
new file mode 100755 (executable)
index 0000000..cfd4928
Binary files /dev/null and b/tv/tct-behavior-tests/tests/HybridApplication/res/x86/HybridApp2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/LocationGPS/css/style.css b/tv/tct-behavior-tests/tests/LocationGPS/css/style.css
new file mode 100755 (executable)
index 0000000..11effe4
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+
+.position_font {
+    color: #3399FF;
+    font-size: 20px;
+}
+
+.attribute_show {
+    margin: 2px;
+    margin-left: 5px;
+    margin-right: 5px;
+    height: 40px;
+    line-height:40px;
+    border: #666666 solid thin;
+    background-color: #CCCCCC;
+}
+td {
+    background-color: #996633;
+}
diff --git a/tv/tct-behavior-tests/tests/LocationGPS/index.html b/tv/tct-behavior-tests/tests/LocationGPS/index.html
new file mode 100755 (executable)
index 0000000..a36ae23
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .observate {
+                border: #000 solid 1px;
+                height: 220px;
+                margin-bottom: 10px;
+            }
+            .display {
+                margin: 3px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF"  onload="initialize()">
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" class="observate">
+              <ul id="coordinate">
+                <li id="latitudeDiv" class="display">Latitude: n/a</li>
+                <li id="longitudeDiv" class="display">Longitude: n/a</li>
+                <li id="speedDiv" class="display">Speed: n/a</li>
+              </ul>
+              <p id="errormessage"></p>
+            </div>
+            <p class="ui-li-desc">* Make sure GPS is enabled.</p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the location information of latitude and longitude position can be fetched through GPS.</p>
+            <p>Test Pre-configuration: </p>
+            <p>Ensure device networking is disabled and GPS is enabled.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if both the latitude and longitude return the correct position data.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/LocationGPS/js/main.js b/tv/tct-behavior-tests/tests/LocationGPS/js/main.js
new file mode 100755 (executable)
index 0000000..9e1748f
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, Liu <xinx.liu@intel.com>
+
+*/
+var html_log;
+html_log = "<b>Html Console:</b><br>";
+
+function html_console(message) {
+    html_log += message + "<br>";
+    jQuery("#htmlConsole").html(html_log);
+}
+// -------------------------------------------
+
+function initialize() {
+    $.mobile.showPageLoadingMsg();
+    DisablePassButton();
+    try {
+        navigator.geolocation.watchPosition(successCallback, errorCallback, { maximumAge: 60000});
+    } catch (err) {
+        $.mobile.hidePageLoadingMsg();
+        jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + err.message + "</font></p>");
+    }
+}
+
+function successCallback (position) {
+    $.mobile.hidePageLoadingMsg();
+    EnablePassButton();
+    var coordinates = position.coords;
+    jQuery("#latitudeDiv").text("Latitude: " + coordinates.latitude);
+    jQuery("#longitudeDiv").text("Longitude: " + coordinates.longitude);
+    jQuery("#speedDiv").text("Speed: " + coordinates.speed);
+}
+
+function errorCallback (error) {
+    $.mobile.hidePageLoadingMsg();
+    var positionError_const =["PERMISSION DENIED", "POSITION UNAVAILABLE", "TIMEOUT"];
+    var index = error.code-0-1;
+    jQuery("#errormessage").html("<p>Error Message: <font color='red'>" + positionError_const[index] + "</font></p>");
+}
diff --git a/tv/tct-behavior-tests/tests/MediaPlayback/css/style.css b/tv/tct-behavior-tests/tests/MediaPlayback/css/style.css
new file mode 100755 (executable)
index 0000000..c2ee1ee
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:100%;
+}
+
+div.ui-slider-bg {
+border: none;
+height: 100%;
+}
diff --git a/tv/tct-behavior-tests/tests/MediaPlayback/index.html b/tv/tct-behavior-tests/tests/MediaPlayback/index.html
new file mode 100755 (executable)
index 0000000..a4fd972
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <link rel="stylesheet" type="text/css" href="css/style.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+    <script src="js/slider.tooltip.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role="content">
+      <div id="contentdiv">
+        <video id="MediaPlayback" width="340" height="200" src="" poster="../../res/images/PNG_512x512_318Kb_BBB.png" controls="controls" loop>Not Support ...</video>
+      </div>
+      <div id="volumediv" data-role="controlgroup">
+        <label for="slider-1">Volume</label>
+        <input name="slider-1" id="slider-1" min="0" max="1" step="0.01" value="0.60" data-highlight="true" data-show-value="true" type="range">
+      </div>
+      <div id="buttondiv">
+        <a href="javascript:Previous()" id="previous" data-role="button">Retest Previous Video</a>
+        <a href="javascript:Next()" id="next" data-role="button">Test Next Video</a>
+      </div>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the video playback of 3GP and MP4 files works correctly. And tests the functionality of playback operations including play and pause, volume up and down, time bar sliding forward and backward, full screen and normal screen switching on every video files.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points work well during the video playback.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/MediaPlayback/js/COPYING b/tv/tct-behavior-tests/tests/MediaPlayback/js/COPYING
new file mode 100755 (executable)
index 0000000..ecf954c
--- /dev/null
@@ -0,0 +1,25 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+        if (o.popupEnabled) {
+             this._positionPopup();
+-            this._popup.html(Math.round(newValue));
++            this._popup.html(Math.round(newValue*100)+"%" );
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+         if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
++            this._handleText.html(Math.round(newValue*100)+"%");
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/tv/tct-behavior-tests/tests/MediaPlayback/js/main.js b/tv/tct-behavior-tests/tests/MediaPlayback/js/main.js
new file mode 100755 (executable)
index 0000000..03066f7
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var videoFileList = new Array("3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp", "MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4", "MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4");
+var testTarget='';
+
+$(document).ready(function(){
+    $("#previous").addClass("ui-disabled");
+
+    //add contentdiv style
+    $("#contentdiv").css({"width":"340px","margin":"0px auto"});
+    //set default video.src
+    $("#MediaPlayback").attr("src", "../../res/media/" + videoFileList[0]);
+    document.getElementById("MediaPlayback").play();
+
+    document.getElementById("MediaPlayback").volume = 0.6;
+    $("#slider-1").hide();
+    DisablePassButton();
+});
+
+function Previous() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i > 1) {
+        testTarget.src="../../res/media/"+videoFileList[i-1];
+        testTarget.play();
+        $("#next").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/"+videoFileList[i-1];
+        testTarget.play();
+        $("#previous").addClass("ui-disabled");
+        $("#next").removeClass("ui-disabled");
+    }
+}
+
+function Next() {
+    testTarget=document.getElementById("MediaPlayback");
+    var fileName = getFileName(testTarget.src);
+    for(i=0;i<3;i++) {
+        if(fileName != videoFileList[i])
+            continue;
+        else
+            break;
+    }
+    if(i < 1) {
+        testTarget.src="../../res/media/"+videoFileList[i+1];
+        testTarget.play();
+        $("#previous").removeClass("ui-disabled");
+    }else {
+        testTarget.src="../../res/media/"+videoFileList[i+1];
+        testTarget.play();
+        $("#next").addClass("ui-disabled");
+        $("#previous").removeClass("ui-disabled");
+        EnablePassButton();
+    }
+}
+
+function getFileName(o){
+    var pos=o.lastIndexOf("/");
+    return o.substring(pos+1);
+}
diff --git a/tv/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js b/tv/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..7f37a88
--- /dev/null
@@ -0,0 +1,122 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+            this._popup.html(Math.round(newValue*100)+"%" );
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+
+               if ( o.showValue ) {
+            this._handleText.html(Math.round(newValue*100)+"%");
+            document.getElementById("MediaPlayback").volume = newValue;
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/tv/tct-behavior-tests/tests/MessagingEmail/NOTICE b/tv/tct-behavior-tests/tests/MessagingEmail/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/MessagingEmail/index.html b/tv/tct-behavior-tests/tests/MessagingEmail/index.html
new file mode 100755 (executable)
index 0000000..fa2bac2
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="page">
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+
+    <div id="content">
+        <ul data-role="listview">
+            <!-- <li data-role="list-divider">Email Precondition</li>
+            <li>
+                <div data-role="button" onclick="account();">Email Account Set</div>
+            </li> -->
+            <li data-role="list-divider">Recipient</li>
+            <li>
+                <input id="email" type="email" value="" />
+            </li>
+            <li data-role="list-divider">CC</li>
+            <li>
+                <input id="cc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">BCC</li>
+            <li>
+                <input id="bcc" type="email" value="" />
+            </li>
+            <li data-role="list-divider">Title</li>
+            <li>
+                <input type="text" id="title" value="Behavior_Test E-mail" />
+            </li>
+            <li data-role="list-divider">Email Content</li>
+            <li>
+                <textarea id="emailContent" style="min-height:200px; width:99%;">Behavior_Test_Messaging_Email</textarea>
+            </li>
+            <li data-role="list-divider">Attachments</li>
+            <li>
+                <div data-role="button" id="addAttach">Add attachment</div>
+            </li>
+        </ul>
+        <ul data-role="listview" id="attachmentsList" style="font-size:12pt; word-wrap:break-word;"></ul>
+        <ul data-role="listview">
+            <li data-role="list-divider">Email Send</li>
+            <li>
+                <div data-role="button" id="send">Email Send</div>
+            </li>
+        </ul>
+    </div>
+
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the email is successfully sent</p><br>
+            <p>1. Fill in Recipient, CC, BCC, Title, Email Content fields</p>
+            <p>2. Select Add attachment and pick an attachment</p>
+            <p>3. Select Email Send</p>
+            <p>4. Check if the email is successfully sent(Check Recipient, CC, BCC accounts to varify the delivery)</p>
+        </font>
+    </div>
+</div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/MessagingEmail/js/main.js b/tv/tct-behavior-tests/tests/MessagingEmail/js/main.js
new file mode 100755 (executable)
index 0000000..3df867d
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var errorMessage = '',
+    emailReg = /^([\w\-\.]+@([\w\-]+\.)+[\w\-]{2,4})?$/,
+    emailArray = [],
+    numberOfBadEmails = 0,
+    app = {
+        attach: []
+    };
+
+function replaceAll(txt, replace, with_this) {
+    return txt.replace(new RegExp(replace, 'g'), with_this);
+}
+
+function verifyEmail() {
+    var result = false, i, tempEmail, email = $('#email').val(), tab = null;
+
+    if (email === '') {
+        errorMessage = 'Enter email address';
+    } else {
+        numberOfBadEmails = 0;
+        emailArray = [];
+        tab = email.split(/[,; ]/);
+        for (i = 0; i < tab.length; i += 1) {
+            tempEmail = $.trim(tab[i]);
+            if (tempEmail !== '') {
+                if (emailReg.test(tempEmail)) {
+                    emailArray.push(tempEmail);
+                } else {
+                    numberOfBadEmails += 1;
+                }
+            }
+        }
+        if (emailArray.length > 0 && numberOfBadEmails === 0) {
+            result = true;
+        } else {
+            if (numberOfBadEmails === 1) {
+                errorMessage = 'one email address is incorrect';
+            } else {
+                errorMessage = numberOfBadEmails + ' email addresses are incorrect';
+            }
+        }
+    }
+
+    return result;
+}
+
+function verifyTitle() {
+    var result = false,
+        title = $('#title').val();
+
+    if (title === '') {
+        errorMessage = 'enter email title';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function verifyContent() {
+    var result = false,
+        content = $('#emailContent').val();
+
+    if (content === '') {
+        errorMessage = 'Enter email content';
+    } else {
+        result = true;
+    }
+
+    return result;
+}
+
+function createAttachList(element) {
+    return ('<li><div>' + element + '</div></li>');
+}
+
+function attachListUpdate() {
+    var fileName = 'filename', size = '0kB', i, len;
+    $('#attachmentsList').replaceWith($('<ul data-role="listview" id="attachmentsList"></ul>'));
+
+    for (i = 0, len = app.attach.length; i < len; i += 1) {
+        $('#attachmentsList').append(createAttachList(app.attach[i]));
+    }
+
+    $('#attachmentsList').trigger('create');
+}
+
+// Define the success callback.
+function messageSent() {
+    app.attach = [];
+    attachListUpdate();
+    alert('Email was sent');
+}
+
+// Define the error callback.
+function messageFailed(error) {
+    alert('Error occured while sending the message!');
+}
+
+// workaround for launch accounts settings;
+function runEmailService() {
+    var apps = "";
+    function onGetInfo(data) {
+        for (var i = 0; i < data.length; i++)
+        {
+            if(data[i].id == "setting-myaccount-efl")
+                apps = data[i].id;
+        }
+        if (apps) {
+            tizen.application.launch(apps);
+        } else {
+            alert('Account settings cannot be launched. Please configure email account by system options.');
+        }
+    }
+    tizen.application.getAppsInfo(onGetInfo);
+}
+
+function virtualAttachmentPath(absolutePath) {
+    absolutePath = absolutePath.replace(/^\/opt\/usr\/media\//, "");
+    var parts = absolutePath.split("/");
+    switch (parts[0]) {
+    case "Images":
+        parts[0] = "images";
+        break;
+    case "Videos":
+        parts[0] = "videos";
+        break;
+    case "Sounds":
+        parts[0] = "music";
+        break;
+    case "Documents":
+        parts[0] = "documents";
+        break;
+    case "Downloads":
+        parts[0] = "downloads";
+        break;
+    default:
+        return null;
+    }
+    return parts.join("/");
+}
+
+// Define the success callback.
+function serviceListCB(services) {
+    var i, len, msgService, email, tmpArray = [], name, vname;
+    function split(str) {
+        return str.split(/[,; ]/).filter(function (item) {
+            return (item.trim() !== '');
+        });
+    }
+
+    if (services.length > 0) {
+        msgService = services[0];
+        alert('Sending an Email(takes about 1 minute)');
+
+        email = new tizen.Message('messaging.email');
+        email.subject = $('#title').val();
+        email.to = split($('#email').val());
+        email.cc = split($('#cc').val());
+        email.bcc = split($('#bcc').val());
+        email.body.plainBody = $('#emailContent').val();
+        email.body.htmlBody = "<div>" + $("#emailContent").val();
+
+        for (i = 0, len = app.attach.length; i < len; i += 1) {
+            name = app.attach[i];
+            vname = virtualAttachmentPath(name);
+            try {
+                tmpArray.push(new tizen.MessageAttachment(vname));
+            } catch (err) {
+                alert("Attachment could not be added:\n" + name);
+            }
+        }
+        email.attachments = tmpArray;
+
+        // Send request
+        msgService.sendMessage(email, messageSent, messageFailed);
+    } else {
+        if (confirm('This application for proper running requires configure email account.\n Do you want configure account now?')) {
+            runEmailService();
+        }
+    }
+}
+
+function serviceListError(e) {
+    alert('err: ' + e.message);
+}
+
+function sendMessage() {
+    try {
+        tizen.messaging.getMessageServices("messaging.email", serviceListCB, serviceListError);
+    } catch (e) {
+        alert('err: ' + e.message);
+    }
+}
+
+function startFileManager() {
+    function getDataFromFileManager(data) {
+        app.attach.push(data[0].value[0]);
+        attachListUpdate();
+    }
+
+    var serviceRequest = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/pick', null, '*/*');
+
+    var appControlReplyCB = {
+            onsuccess: getDataFromFileManager,
+            onfailure: function() {}
+    };
+
+    try {
+    tizen.application.launchAppControl(serviceRequest, null,
+    function() {
+        console.log("launch appControl succeeded");
+    },
+    function(e) {
+        alert("launch appControl failed. Reason: " + e.message);
+    },
+    appControlReplyCB);
+    } catch(e) {
+        alert("launch appControl error: " + e.message);
+    }
+}
+
+function init() {
+    $('#send').bind('click', function (event) {
+        if (verifyEmail() && verifyTitle() && verifyContent()) {
+            sendMessage();
+        } else {
+            alert(errorMessage);
+        }
+    });
+    $('#addAttach').bind('click', function (event) {
+        startFileManager();
+    });
+}
+
+$(document).ready(init);
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE b/tv/tct-behavior-tests/tests/MessagingSMSMMS/NOTICE
new file mode 100755 (executable)
index 0000000..81b6824
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/image.png :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/MessagingSMSMMS/index.html b/tv/tct-behavior-tests/tests/MessagingSMSMMS/index.html
new file mode 100755 (executable)
index 0000000..8714342
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Recipient</li>
+                <li><input type="tel" id="tel" value="" /></li>            
+                <li data-role="list-divider">Send Message</li>
+                <li><div data-role="button" id="sms">SMS</div></li>
+                <li><div data-role="button" id="mms">MMS</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if SMS/MMS is sent properly</p><br>
+                <p>1. Fill in Recipient</p>
+                <p>2. Select SMS Send</p>
+                <p>3. Select MMS Send</p>
+                <p>4. Check if the SMS/MMS is successfully sent</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js b/tv/tct-behavior-tests/tests/MessagingSMSMMS/js/main.js
new file mode 100755 (executable)
index 0000000..faecc92
--- /dev/null
@@ -0,0 +1,162 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var h, m, s, day, year, month, date;
+var deviceCapabilities;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#sms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.sms", smsSuccessCallback, errorCallback);
+    });
+    $("#mms").bind("vclick", function() {
+        tizen.messaging.getMessageServices("messaging.mms", mmsSuccessCallback, errorCallback);
+    });
+    deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(!deviceCapabilities.telephonyMms) {
+        $("#mms").addClass("ui-disabled");
+    }
+});
+
+function checkTime(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function checkDay(i) {
+    switch(i)
+    {
+    case 0:
+        i = "Sunday";
+        break;
+    case 1:
+        i = "Monday";
+        break;
+    case 2:
+        i = "Tuesday";
+        break;
+    case 3:
+        i = "Wednesday";
+        break;
+    case 4:
+        i = "Thursday";
+        break;
+    case 5:
+        i = "Friday";
+        break;
+    case 6:
+        i = "Saturday";
+        break;
+    }
+    return i;
+}
+
+function checkMonth(i) {
+    switch(i)
+    {
+    case 0:
+        i = "January";
+        break;
+    case 1:
+        i = "February";
+        break;
+    case 2:
+        i = "March";
+        break;
+    case 3:
+        i = "April";
+        break;
+    case 4:
+        i = "May";
+        break;
+    case 5:
+        i = "June";
+        break;
+    case 6:
+        i = "July";
+        break;
+    case 7:
+        i = "August";
+        break;
+    case 8:
+        i = "September";
+        break;
+    case 9:
+        i = "October";
+        break;
+    case 10:
+        i = "November";
+        break;
+    case 11:
+        i = "December";
+        break;
+    }
+    return i;
+}
+
+function currentTime() {
+    h = new Date().getHours();
+    m = new Date().getMinutes();
+    s = new Date().getSeconds();
+    day = new Date().getDay();
+    month = new Date().getMonth();
+    date = new Date().getDate();
+    year = new Date().getFullYear();
+    h = checkTime(h);
+    m = checkTime(m);
+    s = checkTime(s);
+    day = checkDay(day);
+    month = checkMonth(month);
+}
+
+function smsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var sms = new tizen.Message("messaging.sms");
+        sms.body.plainBody = "BehaviorTC SMS Messaging Test\n" + h + ":" + m + ":" + s;
+        sms.to = [$("#tel").val()];
+        services[0].sendMessage(sms, messageSent, messageFailed);
+    }
+}
+
+function mmsSuccessCallback(services) {
+    currentTime();
+    if (services.length > 0) {
+        var mms = new tizen.Message("messaging.mms");
+        mms.body.plainBody = "BehaviorTC MMS Messaging Test\n" + day + ", " + month + " " + date + ", " + year + ". " + h + ":" + m + ":" + s;
+        mms.to = [$("#tel").val()];
+        mms.subject = "BehaviorTC Messaging Test";
+        mms.attachments = [new tizen.MessageAttachment("wgt-package/tests/MessagingSMSMMS/res/image.png", "image/png")];
+        services[0].sendMessage(mms, messageSent, messageFailed);
+    }
+}
+
+function messageSent(recipients) {
+    alert("Message sent successfully to " + recipients.length + " recipients.");
+}
+
+function messageFailed(error) {
+    alert('Error occured while sending the message! ' + error.message);
+}
+
+function errorCallback(error) {
+    alert("Cannot get messaging service " + error.message);
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png b/tv/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png
new file mode 100755 (executable)
index 0000000..983c883
Binary files /dev/null and b/tv/tct-behavior-tests/tests/MessagingSMSMMS/res/image.png differ
diff --git a/tv/tct-behavior-tests/tests/NFC/NOTICE b/tv/tct-behavior-tests/tests/NFC/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/NFC/index.html b/tv/tct-behavior-tests/tests/NFC/index.html
new file mode 100755 (executable)
index 0000000..560ab46
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">NFC Write Message</li>
+                <li><input type="text" id="wmsg" value="BehaviorNFC"/></li>
+                <li data-role="list-divider">NFC Tag Test</li>
+                <li><div data-role="button" id="write">Write to card</div></li>
+                <li><div data-role="button" id="read">Read from card</div></li>
+                <li data-role="list-divider">NFC Read Message</li>
+                <li><label id="rmsg">Receive : </label></li>
+                <li data-role="list-divider">NFC Peer Test</li>
+                <li><div data-role="button" id="communicate">Communicate with another device</div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check NFC communication</p><br>
+                <p>1. Fill in NFC Write Message</p>
+                <p>2. Click Write to card and Place the NFC Tag to device</p>
+                <p>3. Check the Write Message</p>
+                <p>4. Click Read from card and Place the NFC Tag to device</p>
+                <p>5. Check the Read Message</p>
+                <p>6. Click Communicate with another device and Connected two device which are operated NFC</p>
+                <p>7. Check the Receive Message</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/NFC/js/main.js b/tv/tct-behavior-tests/tests/NFC/js/main.js
new file mode 100755 (executable)
index 0000000..0aeef2c
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var writeMessage = "", readMessage = "", newMessage = "";
+var nfcFlag;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#read").bind("vclick", function() {
+        nfcFlag = false;
+        alert("Read NFC Tag\nPlace the NFC Tag to device");
+    });
+    $("#write").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "") {
+            nfcFlag = true;
+            alert("Write NFC Tag\nPlace the NFC Tag to device");
+        }
+    });
+    $("#communicate").bind("vclick", function() {
+        writeMsg();
+        if(writeMessage != "")
+            alert("Peer to Peer NFC\nConnected two device which are operated NFC");
+    });
+    try {
+        tizen.nfc.setExclusiveMode(true) ;
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+    setPower(function(){
+        setTagListener();
+        setPeerListener();    
+    });
+});
+
+function writeMsg() {
+    newMessage = new tizen.NDEFMessage();
+    writeMessage = $("#wmsg").val();
+    if(writeMessage == "") {
+        alert("Fill in NFC Write Message");
+        nfcFlag = null;
+    }
+    else
+        newMessage.records[0] = new tizen.NDEFRecordText(writeMessage, "en-US");
+}
+
+function setPower(onpowered) {
+    var gNfcAdapter;
+    try {
+        gNfcAdapter = tizen.nfc.getDefaultAdapter();
+        if (!gNfcAdapter.powered) {
+            gNfcAdapter.setPowered(
+                    true,
+                    function () {onpowered();console.log("Power on succeed");},
+                    function () {console.log("Power on failed")});
+        } else {
+            onpowered();
+        }
+    } catch (err) {
+        console.log (err.name + ": " + err.message);
+    }
+}
+
+function setTagListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcTag) {
+                console.log("NFC Tag's type is " + nfcTag.type);
+                if(nfcFlag == false)
+                {
+                    try {
+                        nfcTag.readNDEF(
+                                function(message){
+                                    readMessage = message.records[0].text;
+                                    alert("Read message : " + readMessage);
+                                    document.getElementById("rmsg").innerHTML = readMessage;
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+                if(nfcFlag == true)
+                {
+                    try {
+                        nfcTag.writeNDEF(
+                                newMessage,
+                                function(){
+                                    alert("Write message : " + writeMessage);
+                                },
+                                function(e){
+                                    console.log(e.message);
+                                });
+                    } catch (err) {
+                        console.log (err.name + ": " + err.message);
+                    }
+                }
+            },
+            ondetach : function() {
+                console.log("NFC Tag is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetTagListener();
+    }
+    adapter.setTagListener(onSuccessCB);
+}
+
+function setPeerListener() {
+    var adapter = tizen.nfc.getDefaultAdapter();
+    var onSuccessCB = {
+            onattach : function(nfcPeer) {
+                console.log("NFC Target is detected");
+
+                nfcPeer.setReceiveNDEFListener(
+                        function(message){
+                            readMessage = message.records[0].text;
+                            alert("Receive message : " + readMessage);
+                            document.getElementById("rmsg").innerHTML = readMessage;
+                            nfcPeer.unsetReceiveNDEFListener();
+                        });
+                nfcPeer.sendNDEF(
+                        newMessage,
+                        function(){
+                            console.log("Send message");
+                        },
+                        function(e){
+                            console.log(e.message);
+                        });
+            },
+            ondetach : function() {
+                console.log("NFC Target is detached");
+            }};
+    function unsetListen() {
+        adapter.unsetPeerListener();
+    }
+    adapter.setPeerListener(onSuccessCB);
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/Notification/NOTICE b/tv/tct-behavior-tests/tests/Notification/NOTICE
new file mode 100755 (executable)
index 0000000..366d59e
--- /dev/null
@@ -0,0 +1,18 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestNotification,
+res/noti.png,
+res/noti1,png,
+res/noti2.png,
+res/noti3.png,
+res/noti4.png,
+res/notification.wav :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/Notification/index.html b/tv/tct-behavior-tests/tests/Notification/index.html
new file mode 100755 (executable)
index 0000000..ae4ebbd
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">NotificationTest Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">NotificationTest Install</div>
+                </li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Add</li>
+                <li>
+                    <div data-role="button" id="noti-type-simple">SIMPLE Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-ongoing">ONGOING Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-progress">PROGRESS Notification</div>
+                </li>
+                <li>
+                    <div data-role="button" id="noti-type-thumbnail">THUMBNAIL Notification</div>
+                </li>
+                <li data-role="list-divider">Notification List</li>
+            </ul>
+            <ul data-role="listview" id="noti-list"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Notification Delete</li>
+                <li>
+                    <div data-role="button" id="delete-all">Delete All</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if a notification is successfully posted</p><br>
+                <p># Simple Notification</p>
+                <p>1. Install NotificationTest</p>
+                <p>(This application is used to verify AppControl in Notification.)</p>
+                <p>2. Click SIMPLE Notification</p>
+                <p>3. Check notification tray if a simple notification is posted</p>
+                <p>4. Clicks the simple notification and check if a NotificationTest application is launched</p>
+                <p>5. In the mean time, check if the notification is disappeared</p><br>
+                <p># Ongoing Notification</p>
+                <p>1. Click ONGOING Notification</p>
+                <p>2. Check notification tray if a ongoing notification is posted</p>
+                <p>3. Clicks the ongoing notification and check if it is NOT disappeared</p>
+                <p>4. Remove the ongoing notification by clicking Delete in the Notification List</p><br>
+                <p># Progress Notification</p>
+                <p>1. Click PROGRESS Notification</p>
+                <p>2. Check notification tray if a progress notification is posted</p>
+                <p>(The progress notification shows a bar that shows the current progress)</p>
+                <p>3. Clicks the progress notification and check if it is NOT disappeared</p>
+                <p>4. Remove the progress notification by clicking Delete in the Notification List</p><br>
+                <p># Thumbnail Notification</p>
+                <p>1. Click THUMBNAIL Notification</p>
+                <p>2. Check notification tray if a thumbnail notification is posted</p>
+                <p>3. Clicks the thumbnail notification and check if it is disappeared</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Notification/js/main.js b/tv/tct-behavior-tests/tests/Notification/js/main.js
new file mode 100755 (executable)
index 0000000..a45edd1
--- /dev/null
@@ -0,0 +1,293 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var gCurrentNoti;
+var iconPath, soundPath, thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4;
+
+var init = function () {
+    showNotifications();
+    setTimeout(init, 500);
+};
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#noti-list").delegate("div", "vclick", function() {
+        var id = $(this).parent().data("id");
+
+        try {
+            tizen.notification.remove(id);
+            alert("Notification delete");
+        } catch (exc) {
+            alert("notification.remove failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#delete-all").bind("vclick", function() {
+        try {
+            tizen.notification.removeAll();
+            alert("Notification delete all");
+        } catch (exc) {
+            alert("notification.removeAll failed: " + exc.message);
+        }
+        showNotifications();
+        return false;
+    });
+    $("#noti-type-simple").bind("vclick", function() {
+        postNotification("SIMPLE");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-ongoing").bind("vclick", function() {
+        postNotification("ONGOING");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-progress").bind("vclick", function() {
+        postNotification("PROGRESS");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-thumbnail").bind("vclick", function() {
+        postNotification("THUMBNAIL");
+        showNotifications();
+        $("#delete-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#noti-type-simple").removeClass("ui-disabled");
+        $("#noti-type-ongoing").removeClass("ui-disabled");
+        $("#noti-type-progress").removeClass("ui-disabled");
+        $("#noti-type-thumbnail").removeClass("ui-disabled");
+        return false;
+    });
+    $("#noti-type-simple").addClass("ui-disabled");
+    $("#noti-type-ongoing").addClass("ui-disabled");
+    $("#noti-type-progress").addClass("ui-disabled");
+    $("#noti-type-thumbnail").addClass("ui-disabled");
+    $("#delete-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    notificationPre();
+});
+
+function showNotifications() {
+    var notiArray, str = "";
+
+    try {
+        notiArray = tizen.notification.getAll();
+    } catch (exc) {
+        alert("notification.getAll failed");
+        return;
+    }
+
+    for (var i = 0; i < notiArray.length; i++) {
+        str += '<li data-id="'
+            + notiArray[i].id
+            + '">'
+            + notiArray[i].title
+            //+ ' ('
+            //+ notiArray[i].statusType
+            //+ ')'
+            + '<div data-role="button" data-inline="true">Delete</div></li>';
+    }
+    $("#noti-list").html(str).trigger("create").listview("refresh");
+}
+
+function postNotification(type) {
+    var title = "";
+    var appControl = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view", null, null, null);
+    var notiDict = {
+            iconPath : iconPath,
+            soundPath : soundPath,
+            vibration : true,
+            ledColor : "#4B0082",
+            ledOnPeriod : 1000,
+            ledOffPeriod : 500
+        };
+    if (type == "SIMPLE") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "SIMPLE_Notification";
+        notiDict.appId = "bhvtcnotif.NotificationTest";
+    }
+    if (type == "PROGRESS") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "PROGRESS_Notification";
+        notiDict.progressValue = 20;
+    }
+    if (type == "ONGOING") {
+        notiDict.content = "A touch to the notification does not make it disappeared";
+        title = "ONGOING_Notification";
+    }
+    if (type == "THUMBNAIL") {
+        notiDict.content = "A touch to the notification makes it disappeared";
+        title = "THUMBNAIL_Notification";
+        notiDict.thumbnails = [thumbnailPath1, thumbnailPath2, thumbnailPath3, thumbnailPath4];
+    }
+    try {
+        var noti = new tizen.StatusNotification(type, title, notiDict);
+        tizen.notification.post(noti);
+        alert(type + " Notification Add");
+        setTimeout(update, 3000);
+    } catch (exc) {
+        alert("notification.post failed: " + exc.message);
+    }
+
+    function update() {
+        noti.progressValue = 63;
+        tizen.notification.update(noti);
+    }
+}
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">NotificationTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function notificationPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestNotification")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestNotification.wgt",
+                    true,
+                    function() {
+                        console.log("Notification Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "notification.wav")
+            {
+                soundPath = files[i].toURI();
+                soundPath = soundPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti.png")
+            {
+                iconPath = files[i].toURI();
+                iconPath = iconPath.replace("file:///", "/");
+            }
+            if(files[i].name == "noti1.png")
+            {
+                thumbnailPath1 = files[i].toURI();
+                thumbnailPath1 = thumbnailPath1.replace("file:///", "/");
+            }
+            if(files[i].name == "noti2.png")
+            {
+                thumbnailPath2 = files[i].toURI();
+                thumbnailPath2 = thumbnailPath2.replace("file:///", "/");
+            }
+            if(files[i].name == "noti3.png")
+            {
+                thumbnailPath3 = files[i].toURI();
+                thumbnailPath3 = thumbnailPath3.replace("file:///", "/");
+            }
+            if(files[i].name == "noti4.png")
+            {
+                thumbnailPath4 = files[i].toURI();
+                thumbnailPath4 = thumbnailPath4.replace("file:///", "/");
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Notification/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
+$(document).bind('pageinit', init);
diff --git a/tv/tct-behavior-tests/tests/Notification/res/TestNotification b/tv/tct-behavior-tests/tests/Notification/res/TestNotification
new file mode 100755 (executable)
index 0000000..ddd951f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/TestNotification differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/noti.png b/tv/tct-behavior-tests/tests/Notification/res/noti.png
new file mode 100755 (executable)
index 0000000..0f054f8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/noti.png differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/noti1.png b/tv/tct-behavior-tests/tests/Notification/res/noti1.png
new file mode 100755 (executable)
index 0000000..e31d360
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/noti1.png differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/noti2.png b/tv/tct-behavior-tests/tests/Notification/res/noti2.png
new file mode 100755 (executable)
index 0000000..cfcb812
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/noti2.png differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/noti3.png b/tv/tct-behavior-tests/tests/Notification/res/noti3.png
new file mode 100755 (executable)
index 0000000..6ee6ba1
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/noti3.png differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/noti4.png b/tv/tct-behavior-tests/tests/Notification/res/noti4.png
new file mode 100755 (executable)
index 0000000..0327b7e
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/noti4.png differ
diff --git a/tv/tct-behavior-tests/tests/Notification/res/notification.wav b/tv/tct-behavior-tests/tests/Notification/res/notification.wav
new file mode 100755 (executable)
index 0000000..6b0cca4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Notification/res/notification.wav differ
diff --git a/tv/tct-behavior-tests/tests/Package/NOTICE b/tv/tct-behavior-tests/tests/Package/NOTICE
new file mode 100755 (executable)
index 0000000..d9be9d0
--- /dev/null
@@ -0,0 +1,13 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPackage1,
+res/TestPackage2 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/Package/index.html b/tv/tct-behavior-tests/tests/Package/index.html
new file mode 100755 (executable)
index 0000000..b4b6f32
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">TestPackage1 Install</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch1">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="update" style="height:40px; line-height:20px;">TestPackage2 Update</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch2">Launch</div>
+                </li>
+                <li data-role="list-divider">Package UnInstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" style="height:40px; line-height:20px;">TestPackage UnInstall</div>
+                </li>
+                <li data-role="list-divider">TestPackage Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch3">Launch</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if Package is successfully installed, updated and uninstalled</p><br>
+                <p>1. Install TestPackage1</p>
+                <p>2. Launch TestPackage1</p>
+                <p>3. Check if TestPackage is launched successfully</p>
+                <p>4. Automatically write the text('Package_Test') and click the OK button</p>
+                <p>5. Check the PASS text
+                <p>6. Update TestPackage2</p>
+                <p>7. Launch TestPackage2</p>
+                <p>8. Check if TestPackage is updated and launched successfully</p>
+                <p>9. Automatically read the text('Package_Test') and click the OK button</p>
+                <p>10. Check the PASS text
+                <p>11. Uninstall TestPackage</p>
+                <p>12. Launch TestPackage and check it fails</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Package/js/main.js b/tv/tct-behavior-tests/tests/Package/js/main.js
new file mode 100755 (executable)
index 0000000..f8b2ed7
--- /dev/null
@@ -0,0 +1,231 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+
+var installUrl, updateUrl;
+var flag = false;
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+        $("#launch1").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+        $("#launch3").removeClass("ui-disabled");
+        $("#launch2").addClass("ui-disabled");
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+        $("#launch2").removeClass("ui-disabled");
+        $("#launch1").addClass("ui-disabled");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        $("#update").removeClass("ui-disabled");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+            flag = true;
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            flag = false;
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "TestPackage2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                if(type == "install")
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+                if(type == "update")
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">Updating... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(type == "install"){
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">TestPackage1 Install</div>';
+                    $("#install").addClass("ui-disabled");
+                }
+                if(type == "update") {
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">TestPackage2 Update</div>';
+                    $("#update").addClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+    var onUninstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">UnInstalling... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">TestPackage UnInstall</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        if(flag == false)
+            alert("TestPackage is already Uninstalled or not Installed");
+        else
+            tizen.package.uninstall("bhvtcpacka", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpacka.TestPackage", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage2")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPackage2.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "TestPackage1")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPackage1.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Package/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/Package/res/TestPackage1 b/tv/tct-behavior-tests/tests/Package/res/TestPackage1
new file mode 100755 (executable)
index 0000000..5653ff4
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Package/res/TestPackage1 differ
diff --git a/tv/tct-behavior-tests/tests/Package/res/TestPackage2 b/tv/tct-behavior-tests/tests/Package/res/TestPackage2
new file mode 100755 (executable)
index 0000000..5358823
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Package/res/TestPackage2 differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/index.html b/tv/tct-behavior-tests/tests/PackageManagement/index.html
new file mode 100755 (executable)
index 0000000..aad3a99
--- /dev/null
@@ -0,0 +1,108 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test PKManagement installation</li>
+                <li id="Sample-widget1">
+                    <a href="javascript:goToApp('res/Sample-widget1.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-app-installed</h2>
+                    </a>
+                </li>
+                <li id="Sample-widget2">
+                    <a href="javascript:goToApp('res/Sample-widget2.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-powerfailure-install</h2>
+                    </a>
+                </li>
+                <!--<li id="Sample-widget3">
+                    <a href="javascript:goToApp('res/Sample-widget3.html')" data-transition="slide" style="">
+                        <h2>webapp-filebrowser-install</h2>
+                    </a>
+                </li>-->
+                <li id="Sample-widget4">
+                    <a href="javascript:goToApp('res/Sample-widget4.html')" data-transition="slide" style="">
+                        <h2>webapp-get-information</h2>
+                    </a>
+                </li>
+                <li id="widget-version-1">
+                    <a href="javascript:goToApp('res/widget-version-1.html')" data-transition="slide" style="">
+                        <h2>pkmanagement-offlineupdate-closeupdate</h2>
+                    </a>
+                </li>
+           <!--     <li id="npruntime-all-on-arm">
+                    <a href="javascript:goToApp('res/npruntime-all-on-arm.html')" data-transition="slide" style="">
+                        <h2>npruntime-all-on-arm</h2>
+                    </a>
+                </li>
+                <li id="npruntime-arm-on-x86">
+                    <a href="javascript:goToApp('res/npruntime-arm-on-x86.html')" data-transition="slide" style="">
+                        <h2>npruntime-arm-on-x86</h2>
+                    </a>
+                </li>   
+
+deprecated in tizen_web_2.4  -->
+                <li data-role="list-divider" role="heading">Clean all the Installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of installing, updating and uninstalling web applications.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT can manage web applications by installing, updating and uninstalling web applications.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/js/main.js b/tv/tct-behavior-tests/tests/PackageManagement/js/main.js
new file mode 100755 (executable)
index 0000000..b6863b5
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt1wvt006',
+                    'wrt1smt007',
+                    'wrt1smt008',
+                    'wrt1smt009',
+                    'wrt1smt010',
+                    'UZmPMhuMeO',
+                    'ZkMSjQuYt8');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/js/tests.js b/tv/tct-behavior-tests/tests/PackageManagement/js/tests.js
new file mode 100755 (executable)
index 0000000..71ad069
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var update_wgt = new Array('widget-version-1');
+var nolaunch_wgt = new Array('Sample-widget3','Sample-widget4');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install("install");
+    });
+    if(jQuery.inArray(wgt_name, update_wgt) != -1){
+        $("#launch").bind("vclick", function() {
+            packagePre("widget-version-1-1");
+            install("update");
+        });
+    } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(type) {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, update_wgt) != -1 && type == "update"){
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').removeClass("ui-disabled");
+            } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/PackageManagement/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html
new file mode 100755 (executable)
index 0000000..41b7a67
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget1"/>
+                <input type="hidden" id="app_id"  value="wrt1smt007.Samplewidget1"/>
+                <input type="hidden" id="package_id" value="wrt1smt007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is a widget named "Sample-widget1" on the device screen after the widget installed.</li>
+              <li>When click the "Launch" button, a "PASS" is displayed.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt
new file mode 100755 (executable)
index 0000000..0311573
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html
new file mode 100755 (executable)
index 0000000..f34b3f1
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget2"/>
+                <input type="hidden" id="app_id"  value="wrt1smt008.Samplewidget2"/>
+                <input type="hidden" id="package_id" value="wrt1smt008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the "Sample-widget2" app is not installed.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget, during the installing power off(e.g,takre off battery) and power on the device, and make sure the "Sample-widget2" is not installed.</li>
+              <li>Re-open the "pkmanagement-powerfailure-install" test.</li>
+              <li>Click the "Install" button to install the widget again.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation of "Sample-widget2" app can run correctly.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt
new file mode 100755 (executable)
index 0000000..5f7cea8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html
new file mode 100755 (executable)
index 0000000..63e64d3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget3"/>
+                <input type="hidden" id="app_id"  value="wrt1smt009.Samplewidget3"/>
+                <input type="hidden" id="package_id" value="wrt1smt009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Copy the "Sample-widget3.wgt" to "Downloads" folder. For example, use the command 1: admin user: "sdb pull /opt/usr/globalapps/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt", local user: "sdb pull /home/{user}/apps_rw/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt" command 2: admin user: "sdb push Sample-widget3.wgt /opt/usr/share/Downloads/", local user: "sdb push Sample-widget3.wgt /home/{user}/share/Downloads/"</li>
+              <li>Open the file browser and select "Sample-widget3" webapp to install.</li>
+              <li>Click the "Uninstall" button to uninstall the widget "Sample-widget3".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Sample-widget3" webapp is installed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt
new file mode 100755 (executable)
index 0000000..669d4df
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html
new file mode 100755 (executable)
index 0000000..0068432
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget4">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget4"/>
+                <input type="hidden" id="app_id"  value="wrt1smt010.Samplewidget4"/>
+                <input type="hidden" id="package_id" value="wrt1smt010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Check the widget details information with command: "wrt-launcher -l" in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the command line displays: "Name: Sample-widget4", "App ID: wrt1smt010.Samplewidget4".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt
new file mode 100755 (executable)
index 0000000..ee62750
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.html
new file mode 100755 (executable)
index 0000000..c308508
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="npruntime-all-on-arm">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="npruntime-all-on-arm"/>
+                <input type="hidden" id="app_id"  value="ZkMSjQuYt8.npruntimeAllOnArm"/>
+                <input type="hidden" id="package_id" value="ZkMSjQuYt8"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected result:</p>
+            <ul>
+              <li>If this is a ARM device, test passes if Javascript and NPRuntime multiplication time displayed above the button "Get the multiplication time". </li>
+              <li>If this is a X86 device, test passes if a popup displayed on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt
new file mode 100755 (executable)
index 0000000..8fc8594
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-all-on-arm.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.html
new file mode 100755 (executable)
index 0000000..e5fecfa
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="npruntime-arm-on-x86">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="npruntime-arm-on-x86"/>
+                <input type="hidden" id="app_id"  value="UZmPMhuMeO.npruntimeArmOnX86"/>
+                <input type="hidden" id="package_id" value="UZmPMhuMeO"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected result:</p>
+            <ul>
+              <li>If this is a X86 device, test passes if Javascript and NPRuntime multiplication time displayed above the button "Get the multiplication time". </li>
+              <li>If this is a ARM device, test passes if a popup displayed on the screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt
new file mode 100755 (executable)
index 0000000..bb2a160
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/npruntime-arm-on-x86.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt
new file mode 100755 (executable)
index 0000000..65ecc6f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html b/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html
new file mode 100755 (executable)
index 0000000..9496f73
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="widget-version-1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="widget-version-1"/>
+                <input type="hidden" id="app_id"  value="wrt1wvt006.widgetversion"/>
+                <input type="hidden" id="package_id" value="wrt1wvt006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Update</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Update" button to update the widget, during the updating close the terminal.</li>
+              <li>Re-open this TC, click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is <strong>no error message</strong>.</li>
+              <li>There is <strong>no system crash</strong>.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt b/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt
new file mode 100755 (executable)
index 0000000..afff886
Binary files /dev/null and b/tv/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt differ
diff --git a/tv/tct-behavior-tests/tests/PageVisibility/index.html b/tv/tct-behavior-tests/tests/PageVisibility/index.html
new file mode 100755 (executable)
index 0000000..f1a725c
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Ma, Yue <yuex.ma@intel.com>
+
+-->
+<html>
+<head>
+  <meta charset="utf-8" />
+  <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+  <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+  <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+  <script src="../../js/thirdparty/jquery.js"></script>
+  <script src="../../js/thirdparty/jquery.mobile.js"></script>
+  <script src="../../js/tests.js"></script>
+  <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div data-role="collapsible-set" data-inset="false" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-theme="b">
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList1">Screen-lock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="lock"></li>
+                    </ul>
+                </div>
+                <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                    <h3 id="homeList2">Screen-unlock State</h3>
+                    <ul data-role="listview" data-inset="false">
+                        <li class="ui-li ui-li-static" id="unlock"></li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device is able to handle pageVisible event when lock and unlock the screen by gesture.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen lock and unlock information displayed correctly on screen.</p>
+          </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/PageVisibility/js/main.js b/tv/tct-behavior-tests/tests/PageVisibility/js/main.js
new file mode 100755 (executable)
index 0000000..e1eb13f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2013 Intel Corporation.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of works must retain the original copyright notice, this list
+ of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the original copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this work without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Authors:
+   Ma,Yue <yuex.ma@intel.com>
+
+*/
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    document.addEventListener(visibilitychange, notification);
+    DisablePassButton();
+});
+
+function notification() {
+    EnablePassButton();
+    var doc_hidden = document.hidden | document.webkitHidden | document.oHidden | document.mozHidden | document.msHidden;
+    var visibilitystate = document.visibilityState || document.webkitVisibilityState || document.oVisibilityState || document.mozVisibilityState || document.msVisibilityState;
+    var hidden = doc_hidden == 0 ? false : true;
+    var date = new Date().toString().substr(4, 20);
+    if(visibilitystate === "hidden" && hidden) {
+        $("#lock").html(function(i, origText) {return origText  + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    } else if (visibilitystate === "visible" && !hidden) {
+         $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    }else {
+        $("#lock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+        $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+    }
+}
diff --git a/tv/tct-behavior-tests/tests/Power/NOTICE b/tv/tct-behavior-tests/tests/Power/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/Power/index.html b/tv/tct-behavior-tests/tests/Power/index.html
new file mode 100755 (executable)
index 0000000..99e11b6
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="list">
+            <li data-role="list-divider">Request Screen</li>
+            <li>
+                <input type="button" value="Request SCREEN_DIM" onclick="request('SCREEN_DIM');" />
+            </li>
+            <li>
+                <input type="button" value="Request SCREEN_NORMAL" onclick="request('SCREEN_NORMAL');" />
+            </li>
+            <li data-role="list-divider">Release Screen</li>
+            <li>
+                <input type="button" value="Release SCREEN" onclick="release();" />
+            </li>
+            <li data-role="list-divider">Turn Off</li>
+            <li>
+                <input type="button" value="Turn SCREEN_OFF" onclick="turnScreenOff();" />
+            </li>
+        </ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if the screen status is successfully changed</p>
+            <p>(Note: Response time varies depends on the system setting)</p><br>
+            <p>* Setting -> Display -> Backlight time : 15 Seconds<p>
+            <p>1. Click Request SCREEN_DIM(After 15 second) : Check if the screen is dim. But Screen doesn't turn off</p>
+            <p>2. Click Request SCREEN_NORMAL(After 15 second) : Check if the screen doesn't dim and turn off</p>
+            <p>3. Click Release SCREEN(After 15 second) : Check the screen resource release(Screen is dim and turn off)</p>
+            <p>4. Click Turn SCREEN_OFF and check the screen is off immediately</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Power/js/main.js b/tv/tct-behavior-tests/tests/Power/js/main.js
new file mode 100755 (executable)
index 0000000..6494db4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+//request
+function request(screenState){
+    tizen.power.release("SCREEN");
+    try{
+        alert(screenState);
+        tizen.power.request("SCREEN", screenState);
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+// release
+function release(){
+    try{
+        alert("SCREEN_RELEASE");
+        tizen.power.release("SCREEN");
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+//turnScreenOff
+function turnScreenOff(){
+    try{
+        alert("SCREEN_OFF");
+        tizen.power.turnScreenOff();
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
diff --git a/tv/tct-behavior-tests/tests/Push/NOTICE b/tv/tct-behavior-tests/tests/Push/NOTICE
new file mode 100755 (executable)
index 0000000..5e09644
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPush :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/tv/tct-behavior-tests/tests/Push/index.html b/tv/tct-behavior-tests/tests/Push/index.html
new file mode 100755 (executable)
index 0000000..9b642b4
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">PushClient(TestPush) Application Install</li>
+                <li>
+                    <div data-role="button" id="install" style="height:40px; line-height:20px;">PushClient Install</div>
+                </li>
+                <li data-role="list-divider">PushClient(TestPush) Application Launch</li>
+                <li>
+                    <div data-role="button" id="launch">PushClient Launch</div>
+                </li>
+                <li data-role="list-divider">Push Message</li>
+                <li>
+                    <input type="text" id="message" value="Behavior_Test_Push"/>
+                </li>
+                <li data-role="list-divider">Send Message</li>
+                <li>
+                    <div data-role="button" id="push">Push</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if PushClient gets messages from the push server</p>
+                <p>A network connection capable of accessing the Internet MUST be established </p><br>
+                <p>1. Install and launch PushClient(TestPush) Application</p>
+                <p>   (Make sure the device is online and the applications shows registration success popup.)
+                <p>2. Press Hide in the PushClient</p>
+                <p>3. Back to this page and fill in a push message and click Push button</p>
+                <p>4. Check PushClient becomes foreground showing PASS text</p>
+                <p>5. Exit PushClient</p>
+                <p>6. Back to this page and fill in another message and click Push button</p>
+                <p>7. Check a notification pops up and PushClient launchs with PASS text when the notification is clicked</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Push/js/main.js b/tv/tct-behavior-tests/tests/Push/js/main.js
new file mode 100755 (executable)
index 0000000..bb73af7
--- /dev/null
@@ -0,0 +1,274 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var installUrl;
+var reg;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl);
+        $("#launch").removeClass("ui-disabled");
+        $("#push").removeClass("ui-disabled");
+        return false;
+    });
+    $("#launch").bind("vclick", function() {
+        launch();
+        return false;
+    });
+    $("#push").bind("vclick", function() {
+        regID();
+        return false;
+    });
+    $("#launch").addClass("ui-disabled");
+    $("#push").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    pushPre();
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">PushClient Install</div>';
+                $("#install").addClass("ui-disabled");
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpush0.PushClient", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function regID() {
+    var documentsDir;
+    var flag = false;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "PushRegId.txt")
+            {
+                flag = true;
+                files[i].readAsText(
+                    function(str){
+                        reg = str;
+                        send();
+                        }, function(e){
+                            alert("Error " + e.message);
+                        }, "UTF-8"
+                );
+                break;
+            }
+            else
+                flag = false;
+        }
+        if(flag == false)
+            alert("Not found Registration ID.\nPlease TestPush(PushClient) app install and launch or Check network connection.");
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        "documents",
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkNum(i) {
+    if (i < 10) {
+        i = "0" + i;
+    }
+    return i;
+}
+
+function send() {
+    var appId = "bhvtcpush0";
+    var msg = $("#message").val();
+    var sec = "27A91C190007B2E7987627A9392C6291";
+    var h = new Date().getHours();
+    var m = new Date().getMinutes();
+    var s = new Date().getSeconds();
+    h = checkNum(h);
+    m = checkNum(m);
+    s = checkNum(s);
+
+    if(msg == "")
+    {
+        alert("Message is empty");
+    }
+    else if(reg == "")
+    {
+        alert("Registration ID is empty")
+    }
+    else
+    {
+        var request = new XMLHttpRequest();
+        var data = {"regID":reg, "requestID":"000001", "message":"action=ALERT&alertMessage="+msg, "appData":msg+"("+h+":"+m+":"+s+")"};
+        var regID = reg.substring(0, 2);
+        switch(regID)
+        {
+        case "00":
+            request.open("POST", "https://useast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "01":
+            request.open("POST", "https://uswest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "02":
+            request.open("POST", "https://apsoutheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "03":
+            request.open("POST", "https://euwest.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "04":
+            request.open("POST", "https://apnortheast.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "05":
+            request.open("POST", "https://apkorea.push.samsungosp.com:8088/spp/pns/api/push", true);
+            break;
+        case "06":
+            request.open("POST", "https://apchina.push.samsungosp.com.cn:8088/spp/pns/api/push", true);
+            break;
+        case "7c":
+            request.open("POST", "https://175.41.248.50:8088/spp/pns/api/push", true);
+        }
+        request.setRequestHeader("Content-Type", "application/json");
+        request.setRequestHeader("appID", appId);
+        request.setRequestHeader("appSecret", sec);
+        request.onreadystatechange = function() {
+            if (request.readyState == 4 && request.status == 200) {
+                console.log(request.responseText);
+                alert("Push Success");
+            }
+        };
+        request.send(JSON.stringify(data));
+    }
+}
+
+function pushPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPush")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/TestPush.wgt",
+                    true,
+                    function() {
+                        console.log("TestPush Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("Error " + error.message);
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Push/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/Push/res/TestPush b/tv/tct-behavior-tests/tests/Push/res/TestPush
new file mode 100755 (executable)
index 0000000..220a81e
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Push/res/TestPush differ
diff --git a/tv/tct-behavior-tests/tests/SVGTransformation/index.html b/tv/tct-behavior-tests/tests/SVGTransformation/index.html
new file mode 100755 (executable)
index 0000000..c9bcd2b
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <style>
+        /* Test Display Box */
+        .display_box {
+            width: 100%;
+            border: 1px solid #000;
+        }
+    </style>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div data-role= "content">
+      <svg width="330" height="400" class="display_box">
+        <circle cx="100" cy="50" r="20" fill="blue">
+          <animateTransform attributeName='transform' attributeType='XML' type='rotate' from='180 170 200' to='-360 100 50' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='scale' from='1' to='2' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+          <animateTransform attributeName='transform' attributeType='XML' type='skewX' by="30" dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+        </circle>
+      </svg>
+      <p><a href="javascript: document.location.reload();" data-role="button">Test Again</a></p>
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the blue circle could be transferred to ellipse, and rotate along with elliptical patch at the same time.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if the transformation and rotate function well.</p>
+      </font>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Security/css/style.css b/tv/tct-behavior-tests/tests/Security/css/style.css
new file mode 100755 (executable)
index 0000000..9148460
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+#content ul ul {
+    padding: 5px 15px;
+}
+
+.containing-element .ui-slider-switch { width: 8em }
+
+/*over write*/
+ul .ui-corner-all {
+    -moz-border-radius: 0 /*{global-radii-blocks}*/;
+    -webkit-border-radius: 0 /*{global-radii-blocks}*/;
+    border-radius: 0 /*{global-radii-blocks}*/;
+}
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/Security/index.html b/tv/tct-behavior-tests/tests/Security/index.html
new file mode 100755 (executable)
index 0000000..e3eec1a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Shared Media Directory</li>
+                <li><div data-role="button" id="openMediaBtn">If local user, open /home/{user}/apps_rw/share directory. If admin user, open /opt/usr/globalapps/share directory.</div></li>
+                <li><div data-role="button" id="createFileBtn">Create file</div></li>
+                <li data-role="list-divider">File List</li>
+                <ul data-role="listview" id="media" data-inset="true" hidden="true"></ul>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies that (1) this applicaton is running by non-root ID and, (2) it is allowed to read and write files in the shared media directory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Get the "USER" info via cmdline "ps aux|awk 'NR==1;/tctbhtests\.TCTBehaviorTests/'" in console.</li>
+              <li>Open shared media directory.</li>
+              <li>Create and remove files in shared media directory.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The "USRER" info is NOT root user.</li>
+              <li>There is <strong>no error message</strong> when click buttons under "Shared Media Directory".</li>
+              <li>Only new created files can be removed; opened files in step 2 cannot.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Security/js/main.js b/tv/tct-behavior-tests/tests/Security/js/main.js
new file mode 100755 (executable)
index 0000000..1aaaabd
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+*/
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var SHARED_MEDIA_DIR = "file://" + RESOURCE_DIR,
+    MEDIA_ID = "#media";
+var count = 0, mediaDir;
+var gFiles = [], createdId = [];
+
+$(document).ready(function(){
+    DisablePassButton();
+    $('#createFileBtn').addClass("ui-disabled");
+
+    function onError(err) {
+        alert("Error: " + err.message);
+    }
+
+    function makeFileList(files, selector) {
+        var str = "";
+
+        for (var i = 0; i < files.length; i++) {
+            if (files[i].isDirectory == false) {
+                str += '<li id="'
+                    + files[i].name
+                    + '"><a href="#"><h4>'
+                    + files[i].name
+                    + '</h4></a><a href="'
+                    + 'javascript:deleteFile('
+                    + count
+                    + ')" data-icon="delete" data-theme="c">'
+                    + '</a></li>';
+                gFiles[count++] = files[i];
+            }
+        }
+        if (str) {
+            $(selector).append(str).trigger("create").listview("refresh");
+        }
+
+        $('#createFileBtn').removeClass("ui-disabled");
+        $('#openMediaBtn').addClass("ui-disabled");
+    }
+
+    function openDirectory(str, selector) {
+        try {
+            tizen.filesystem.resolve(str, function(dir) {
+                dir.listFiles(function(files) {
+                    $(MEDIA_ID).show();
+                    makeFileList(files, selector);
+                    mediaDir = dir;
+                    alert("Open Success");
+                }, function(err) {
+                    alert("Open Fail: " + err.message);
+                });
+            }, onError, "rw");
+        } catch (exc) {
+            alert("tizen.filesystem.resolve(" + str + ") exc: " + exc.message);
+        }
+    }
+
+    function createFile(dir, selector) {
+        if (!dir) {
+            alert("Create File Error: The directory can not be opened");
+            return;
+        }
+
+        try {
+            var newFile, str = "";
+            var time = new Date().getTime();
+            newFile = dir.createFile("newFile" + time);
+            str += '<li id="'
+                + newFile.name
+                + '"><a href="#"><h4>'
+                + newFile.name
+                + '</h4></a><a href="'
+                + 'javascript:deleteFile('
+                + count
+                + ')" data-icon="delete" data-theme="c">'
+                + '</a></li>';
+            createdId.push(count);
+            gFiles[count++] = newFile;
+            if (str) {
+                $(selector).append(str).trigger("create").listview("refresh");
+            }
+        } catch (exc) {
+            alert("Create File Error: " + exc.message);
+        }
+    }
+
+    $("#openMediaBtn").on("click",function() {
+        if (!mediaDir) {
+            openDirectory(SHARED_MEDIA_DIR, MEDIA_ID);
+        }
+    });
+    $("#createFileBtn").on("click",function() {
+        createFile(mediaDir, MEDIA_ID);
+        EnablePassButton();
+    });
+});
+
+function deleteFile(id) {
+    var dir, selector, index;
+
+    if (id == null) {
+        return;
+    }
+    //Only delete the file by user created.
+    index = createdId.indexOf(id);
+    if (index == -1) {
+        return;
+    }
+
+    try {
+        dir = mediaDir;
+        selector = MEDIA_ID;
+        dir.deleteFile(gFiles[Number(id)].fullPath, function() {
+            //Delete the id in createdId array.
+            createdId.splice(index, 1);
+            $("#" + gFiles[Number(id)].name).remove();
+            $(selector).trigger("create").listview("refresh");
+        }, function (err) {
+            alert("Error: " + err.message);
+        });
+    } catch (exc) {
+        alert("Delete File Error: " + exc.message);
+    }
+}
+
+function backAppsHome() {
+    createdId.forEach(function(id) {
+        deleteFile(id);
+    });
+    window.close();
+}
diff --git a/tv/tct-behavior-tests/tests/Stability/index.html b/tv/tct-behavior-tests/tests/Stability/index.html
new file mode 100755 (executable)
index 0000000..15adeed
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <!--<li data-role="list-divider" role="heading">Test half memory</li>
+                <li id="test-half-memory">
+                    <a href="javascript:goToApp('res/test-half-memory.html')" data-transition="slide" style="">
+                        <h2>wrt-install-large-webapp</h2>
+                    </a>
+                </li>-->
+                <li data-role="list-divider" role="heading">Test hd image</li>
+                <li id="test-hd-image">
+                    <a href="javascript:goToApp('res/test-hd-image.html')" data-transition="slide" style="">
+                        <h2>wrt-high-resolution-picture</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the stability of the device.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies the stability of the device. The device should not crash when install a large widget or display a high resolution picture.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the large widget installed successfully and high resolution picture displayed well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Stability/js/main.js b/tv/tct-behavior-tests/tests/Stability/js/main.js
new file mode 100755 (executable)
index 0000000..168bb24
--- /dev/null
@@ -0,0 +1,289 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrttest003',
+                    'wrttest001');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "Stability";
+var RESULT_FILE_NAME = "tct-behavior-child.sta.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/Stability/js/tests.js b/tv/tct-behavior-tests/tests/Stability/js/tests.js
new file mode 100755 (executable)
index 0000000..eb8b87a
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('test-half-memory');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    if(jQuery.inArray(wgt_name, install_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, install_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                if(jQuery.inArray(wgt_name, install_wgt) != -1){
+                    $('#uninstall').removeClass("ui-disabled");
+                } else {
+                    $('#launch').removeClass("ui-disabled");
+                }
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Stability/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/Stability/res/test-half-memory.html b/tv/tct-behavior-tests/tests/Stability/res/test-half-memory.html
new file mode 100755 (executable)
index 0000000..164859f
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-half-memory">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-half-memory"/>
+                <input type="hidden" id="app_id"  value="wrttest003.testhalfmemory"/>
+                <input type="hidden" id="package_id" value="wrttest003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the free storage is more than half memory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Change the "test-half-memory.wgt".</li>
+              <ol type="a">
+                <li>Open the folder of "test-half-memory"(suppose you have the "test-half-memory.wgt" or you can find it in the behavior rpm, unzip the wgt as "test-half-memory").</li>
+                <li>Push a file that the size is larger than half memory into the folder and rename the file as "zipzip.png".</li>
+                <li>Use the command :"zip -rq ../test-half-memory.wgt *" to create a "test-half-memory.wgt".</li>
+                <li>Push the created widget to device with the command: admin user: "sdb push 'path'/test-half-memory.wgt /opt/usr/globalapps/tctbhtests/res/wgt/tests/Stability/res/", local user: "sdb push 'path'/test-half-memory.wgt /home/{user}/apps_rw/tctbhtests/res/wgt/tests/Stability/res/".</li>
+              </ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation is successful.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt b/tv/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt
new file mode 100755 (executable)
index 0000000..92a1a65
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt differ
diff --git a/tv/tct-behavior-tests/tests/Stability/res/test-hd-image.html b/tv/tct-behavior-tests/tests/Stability/res/test-hd-image.html
new file mode 100755 (executable)
index 0000000..abd4326
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-hd-image">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-hd-image"/>
+                <input type="hidden" id="app_id"  value="wrttest001.testhdimage"/>
+                <input type="hidden" id="package_id" value="wrttest001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the image display normally.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt b/tv/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt
new file mode 100755 (executable)
index 0000000..6668469
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt differ
diff --git a/tv/tct-behavior-tests/tests/SystemInfo/NOTICE b/tv/tct-behavior-tests/tests/SystemInfo/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/SystemInfo/index.html b/tv/tct-behavior-tests/tests/SystemInfo/index.html
new file mode 100755 (executable)
index 0000000..31337df
--- /dev/null
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="header" data-position="fixed" data-tap-toggle="false">
+        <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+        <ul data-role="listview" id="info-list1"></ul>
+        <ul data-role="listview" id="info-list2"></ul>
+        <ul data-role="listview" id="info-list3"></ul>
+        <ul data-role="listview" id="info-list4"></ul>
+        <ul data-role="listview" id="info-list5"></ul>
+        <ul data-role="listview" id="info-list6"></ul>
+        <ul data-role="listview" id="info-list7"></ul>
+        <ul data-role="listview" id="info-list8"></ul>
+        <ul data-role="listview" id="info-list9"></ul>
+        <ul data-role="listview" id="info-list10"></ul>
+        <ul data-role="listview" id="info-list11"></ul>
+        <ul data-role="listview" id="info-list12"></ul>
+    </div>
+    <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+    </div>
+    <div data-role="popup" id="popup_info">
+        <font style="font-size:85%">
+            <p>Check if a SystemInfo reflects current device status</p><br>
+            <p>1. Check WiFi Network Status if it reflects the current device Wi-Fi status</p>
+            <p>2. Change device WiFi status and Check WiFi Network Status again</p>
+            <p>3. Check Device Orientation Status if it displays correct value that fits the current device position</p>
+            <p>4. Rotate the device per 90 degrees and check Device Orientation shows the correct status</p>
+            <p>5. Check Battery Status</p>
+            <p>6. Check the Brightness if it changes the current device brightness</p>
+            <p>7. Check the Resolution</p>
+            <p>8. Check the Dots per inch</p>
+            <p>9. Check the Physical size</p>
+            <p>10. Check the Storage Status</p>
+            <p>11. Check the CPU Status</p>
+            <p>12. Check the Build Status</p>
+            <p>13. Check the Locale Status</p>
+            <p>14. Check the Network Status</p>
+            <p>15. Check the Cellular Network Status</p>
+            <p>16. Check the Sim Status</p>
+            <p>17. Check the Peripheral Status</p>
+        </font>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/SystemInfo/js/main.js b/tv/tct-behavior-tests/tests/SystemInfo/js/main.js
new file mode 100755 (executable)
index 0000000..a9dc880
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var gInfo;
+var init = function () {
+    try {
+        tizen.systeminfo.addPropertyValueChangeListener("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BATTERY", onBatterySuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("STORAGE", onStorageSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CPU", onCpuSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("BUILD", onBuildSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("SIM", onSimSuccess);
+        tizen.systeminfo.addPropertyValueChangeListener("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    getPropertyValue();
+};
+
+function getPropertyValue() {
+    try {
+        tizen.systeminfo.getPropertyValue("WIFI_NETWORK", onWifiNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("DEVICE_ORIENTATION", onDeviceOrientationSuccess);
+        tizen.systeminfo.getPropertyValue("DISPLAY", onDisplaySuccess);
+        tizen.systeminfo.getPropertyValue("BATTERY", onBatterySuccess);
+        tizen.systeminfo.getPropertyValue("STORAGE", onStorageSuccess);
+        tizen.systeminfo.getPropertyValue("CPU", onCpuSuccess);
+        tizen.systeminfo.getPropertyValue("BUILD", onBuildSuccess);
+        tizen.systeminfo.getPropertyValue("LOCALE", onLocaleSuccess);
+        tizen.systeminfo.getPropertyValue("NETWORK", onNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("CELLULAR_NETWORK", onCellularNetworkSuccess);
+        tizen.systeminfo.getPropertyValue("SIM", onSimSuccess);
+        tizen.systeminfo.getPropertyValue("PERIPHERAL", onPeripheralSuccess);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function make1lineListItem(value) {
+    return '<li>' + value + '</li>';
+}
+
+function makeDividerListItem(value) {
+    return '<li data-role="list-divider">' + value + '</li>';
+}
+
+function onWifiNetworkSuccess(wifi) {
+    gInfo = makeDividerListItem("WIFI_NETWORK Status")
+            + make1lineListItem("Stauts : " + wifi.status)
+            + make1lineListItem("SSID : " + wifi.ssid)
+            + make1lineListItem("IPAddress : " + wifi.ipAddress)
+            + make1lineListItem("IPv6Address : " + wifi.ipv6Address)
+            + make1lineListItem("SignalStrength : " + wifi.signalStrength);
+    $("#info-list1").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDeviceOrientationSuccess(orientation) {
+    gInfo = makeDividerListItem("DEVICE_ORIENTATION Status")
+            + make1lineListItem("Status : " + orientation.status)
+            + make1lineListItem("AutoRotation : " + (orientation.isAutoRotation == true ? "Yes" : "No"));
+    $("#info-list2").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDisplaySuccess(display) {
+    gInfo = makeDividerListItem("DISPLAY Status")
+            + make1lineListItem("Brightness : " + (display.brightness * 100) + "%")
+            + makeDividerListItem("Resolution")
+            + make1lineListItem("Width : " + display.resolutionWidth)
+            + make1lineListItem("Height : " + display.resolutionHeight)
+            + makeDividerListItem("Dots per inch")
+            + make1lineListItem("Horizontal : " + display.dotsPerInchWidth)
+            + make1lineListItem("Vertical : " + display.dotsPerInchHeight)
+            + makeDividerListItem("Physical size")
+            + make1lineListItem("Width : " + display.physicalWidth)
+            + make1lineListItem("Height : " + display.physicalHeight);
+    $("#info-list4").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBatterySuccess(battery) {
+    gInfo = makeDividerListItem("BATTERY Status")
+            + make1lineListItem("Level : " + (battery.level * 100) + "%")
+            + make1lineListItem("Charging : " + (battery.isCharging == true ? "Yes" : "No"));
+    $("#info-list3").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onStorageSuccess(storages) {
+    gInfo = makeDividerListItem("STORAGE Status")
+          + make1lineListItem("Storage : " + storages.units.length);
+    for (var i = 0; i < storages.units.length; i++) {
+        gInfo += makeDividerListItem("Type : " + storages.units[i].type)
+               + make1lineListItem("Capacity : " + Math.floor(storages.units[i].capacity / 1000000) + " MB")
+               + make1lineListItem("Available capacity : " + Math.floor(storages.units[i].availableCapacity / 1000000) + " MB")
+               + make1lineListItem("Removable : " + (storages.units[i].isRemovable == true ? "Yes" : "No"));
+    }
+    $("#info-list5").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCpuSuccess(cpu) {
+    gInfo = makeDividerListItem("CPU Status")
+            + make1lineListItem("Load : " + cpu.load);
+    $("#info-list6").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBuildSuccess(build) {
+    gInfo = makeDividerListItem("BUILD Status")
+            + make1lineListItem("Model : " + build.model)
+            + make1lineListItem("Manufacturer : " + build.manufacturer)
+            + make1lineListItem("BuildVersion : " + build.buildVersion);
+    $("#info-list7").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onLocaleSuccess(locale) {
+    gInfo = makeDividerListItem("LOCALE Status")
+            + make1lineListItem("Language : " + locale.language)
+            + make1lineListItem("Country : " + locale.country);
+    $("#info-list8").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onNetworkSuccess(network) {
+    gInfo = makeDividerListItem("NETWORK Status")
+            + make1lineListItem("NetworkType : " + network.networkType);
+    $("#info-list9").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCellularNetworkSuccess(cellular) {
+    gInfo = makeDividerListItem("CELLULAR_NETWORK Status")
+            + make1lineListItem("Status : " + cellular.status)
+            + make1lineListItem("Apn : " + cellular.apn)
+            + make1lineListItem("IPAddress : " + cellular.ipAddress)
+            + make1lineListItem("IPv6Address : " + cellular.ipv6Address)
+            + make1lineListItem("Mcc : " + cellular.mcc)
+            + make1lineListItem("Mnc : " + cellular.mnc)
+            + make1lineListItem("CellId : " + cellular.cellId)
+            + make1lineListItem("Lac : " + cellular.lac)
+            + make1lineListItem("IsRoaming : " + cellular.isRoaming)
+            + make1lineListItem("IsFlightMode : " + cellular.isFlightMode)
+            + make1lineListItem("IMEI : " + cellular.imei);
+    $("#info-list10").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onSimSuccess(sim) {
+    gInfo = makeDividerListItem("SIM Status")
+            + make1lineListItem("State : " + sim.state)
+            + make1lineListItem("OperatorName : " + sim.operatorName)
+            + make1lineListItem("Msisdn : " + sim.msisdn)
+            + make1lineListItem("Iccid : " + sim.iccid)
+            + make1lineListItem("Mcc : " + sim.mcc)
+            + make1lineListItem("Mnc : " + sim.mnc)
+            + make1lineListItem("Msin : " + sim.msin)
+            + make1lineListItem("Spn : " + sim.spn);
+    $("#info-list11").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onPeripheralSuccess(peripheral) {
+    gInfo = makeDividerListItem("PERIPHERAL Status")
+            + make1lineListItem("IsVideoOutputOn : " + peripheral.isVideoOutputOn);
+    $("#info-list12").html(gInfo).trigger("create").listview("refresh");
+}
+
+$(document).bind("pageinit", init);
diff --git a/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE b/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html b/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/index.html
new file mode 100755 (executable)
index 0000000..d01d417
--- /dev/null
@@ -0,0 +1,60 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set Call Ringtone</li>
+            </ul>
+            <ul data-role="listview" id="ringtone"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get Call Ringtone</li>
+                <li><div data-role="button" id="tone">Get Ringtone & Play Sound</div></li>
+            </ul>
+            <audio data-controls="true" style="width:100%;" id="MyAudio"></audio>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the ringtone is successfully changed</p><br>
+                <p>1. Click Set ringtone</p>
+                <p>2. Make a call to the device and check if the ringtone is successfully changed</p>
+                <p>3. Proceed the checking for other ringtones</p>
+                <p>Note. you may want to add more ringtone files in 'ringtones' virtual root</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js b/tv/tct-behavior-tests/tests/SystemSettingIncomingCall/js/main.js
new file mode 100755 (executable)
index 0000000..4056ca7
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#ringtone").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("INCOMING_CALL", path, onIncomingCallSetSuccess);
+        return false;
+    });
+    $("#tone").bind("vclick", function() {
+        getSystemProperty("INCOMING_CALL", onIncomingCallGetSuccess);
+        return false;
+    });
+    fileAudio();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onIncomingCallSetSuccess() {
+    alert("Change of INCOMING_CALL ringtone");
+}
+
+function onIncomingCallGetSuccess(value) {
+    alert("Sound(Get) path : " + value);
+    var audio = document.getElementById("MyAudio");
+    audio.src = value;
+    audio.type = "audio/*";
+    audio.play();
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        console.log("Exception: " + e.message);
+    }
+}
+
+function fileAudio() {
+    var documentsDir, length = 0, str = "";
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                var Url = files[i].toURI();
+                Url = Url.replace("file:///", "/");
+                str += '<li data-url="' + Url + '">' + files[i].name + '</li>';
+                length++;
+                if(length >= 9)
+                    break;
+            }
+        }
+        if(length == 0)
+            alert("Not found Sound files\nPlease add sound files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#ringtone").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'ringtones',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/SystemSettingScreen/NOTICE b/tv/tct-behavior-tests/tests/SystemSettingScreen/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/tv/tct-behavior-tests/tests/SystemSettingScreen/index.html b/tv/tct-behavior-tests/tests/SystemSettingScreen/index.html
new file mode 100755 (executable)
index 0000000..080abd7
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+<link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+<script src="../../js/thirdparty/jquery.js"></script>
+<script src="../../js/thirdparty/jquery.mobile.js"></script>
+<script src="../../js/tests.js"></script>
+<script src="js/main.js"></script>
+<style type="text/css">
+#imageHS ul, li {list-style:none;}
+#imageLS ul, li {list-style:none;}
+#imageHS img {margin:5px; width:65px; height:70px}
+#imageLS img {margin:5px; width:65px; height:70px}
+</style>
+</head>
+<body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Set HomeScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageHS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Set LockScreen Image</li>
+            </ul>
+            <ul data-role="listview" id="imageLS"></ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">Get HomeScreen Image</li>
+                <li><div data-role="button" id="imageHG">HomeScreen Image</div></li>
+                <li data-role="list-divider">Get LockScreen Image</li>
+                <li><div data-role="button" id="imageLG">LockScreen Image</div></li>
+                <li data-role="list-divider">Canvas Image</li>
+            </ul>
+            <canvas id="canvas" style="width:100%; height:200px;"></canvas>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <font style="font-size:85%">
+                <p>Check if the home/lock screen image is successfully changed</p><br>
+                <p>1. Click Home/LockScreen Image</p>
+                <p>2. Select an image for the home/lock screen background</p>
+                <p>3. Check if your selection is set as a home/lock screen background with the naked eye</p>
+                <p>4. Click HomeScreen Image and LockScreen Image to verify the background images are retrieved.</p>
+            </font>
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/SystemSettingScreen/js/main.js b/tv/tct-behavior-tests/tests/SystemSettingScreen/js/main.js
new file mode 100755 (executable)
index 0000000..f56c268
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+var path;
+
+$(document).delegate("#main", "pageinit", function() {
+    $("#imageHS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("HOME_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageLS").delegate("li", "vclick", function() {
+        path = $(this).data("url");
+        setSystemProperty("LOCK_SCREEN", path, onScreenSetSuccess);
+    });
+    $("#imageHG").bind("vclick", function() {
+        getSystemProperty("HOME_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    $("#imageLG").bind("vclick", function() {
+        getSystemProperty("LOCK_SCREEN", onScreenGetSuccess);
+        return false;
+    });
+    fileImage();
+});
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function onScreenSetSuccess() {
+    alert("Change of SCREEN image");
+}
+
+function onScreenGetSuccess(value) {
+    alert("Image(Get) path : " + value);
+    var canvas = document.getElementById("canvas");
+    var cx = canvas.getContext("2d");
+    var image = new Image();
+    image.src = value;
+    cx.drawImage(image, 0, 0, 350, 200);
+}
+
+function setSystemProperty(property, path, onSuccess) {
+    try {
+        tizen.systemsetting.setProperty(property, path, onSuccess, onError);
+        console.log(path);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function getSystemProperty(property, onSuccess) {
+    try {
+        tizen.systemsetting.getProperty(property, onSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+}
+
+function fileImage() {
+    var documentsDir, length = 0, str = "";
+    var len, last, ext;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].isFile == true)
+            {
+                len = files[i].name.length;
+                last = files[i].name.lastIndexOf(".");
+                ext = files[i].name.substring(last, len);
+                if(ext == ".jpg" || ext == ".jpeg" || ext == ".bmp" || ext == ".png" || ext == ".gif")
+                {
+                    var Url = files[i].toURI();
+                    Url = Url.replace("file:///", "/");
+                    str += '<li data-url="' + Url + '"><img src="' + files[i].toURI() + '" alt="" />' + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + files[i].name + '</li>';
+                    length++;
+                    if(length >= 6)
+                        break;
+                }
+            }
+        }
+        if(length == 0)
+            alert("Not found Image files.\nPlease add image files.\nAdd Path: " + documentsDir.toURI() + "/");
+        $("#imageHS").html(str).trigger("create").listview("refresh");
+        $("#imageLS").html(str).trigger("create").listview("refresh");
+    }
+
+    function onerror(error) {
+        console.log("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'images',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
diff --git a/tv/tct-behavior-tests/tests/Template/index.html b/tv/tct-behavior-tests/tests/Template/index.html
new file mode 100755 (executable)
index 0000000..3f1f20c
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <div id="content">
+        Hello World !
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+            <p>Test Info</p>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Touch/css/style.css b/tv/tct-behavior-tests/tests/Touch/css/style.css
new file mode 100755 (executable)
index 0000000..5417630
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+
+.scroll_eare {
+    background: #eee;
+    border: 1px solid #ccc;
+    height: 230px;
+    font-weight: bold;
+    text-shadow: 0 1px 0 #fff;
+    margin-bottom: 10px;
+    background-image: -webkit-gradient(linear,left top,left bottom,from( #fff ),to( #f1f1f1 ));
+    background-image: -webkit-linear-gradient( #fff,#f1f1f1 );
+    background-image: -moz-linear-gradient( #fff,#f1f1f1 );
+    background-image: -ms-linear-gradient( #fff,#f1f1f1 );
+    background-image: -o-linear-gradient( #fff,#f1f1f1 );
+    background-image: linear-gradient( #fff,#f1f1f1 );
+}
+
diff --git a/tv/tct-behavior-tests/tests/Touch/img/btn_down.png b/tv/tct-behavior-tests/tests/Touch/img/btn_down.png
new file mode 100755 (executable)
index 0000000..981d624
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Touch/img/btn_down.png differ
diff --git a/tv/tct-behavior-tests/tests/Touch/img/btn_up.png b/tv/tct-behavior-tests/tests/Touch/img/btn_up.png
new file mode 100755 (executable)
index 0000000..bc5f8b2
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Touch/img/btn_up.png differ
diff --git a/tv/tct-behavior-tests/tests/Touch/img/scroll.png b/tv/tct-behavior-tests/tests/Touch/img/scroll.png
new file mode 100755 (executable)
index 0000000..dc80c78
Binary files /dev/null and b/tv/tct-behavior-tests/tests/Touch/img/scroll.png differ
diff --git a/tv/tct-behavior-tests/tests/Touch/index.html b/tv/tct-behavior-tests/tests/Touch/index.html
new file mode 100755 (executable)
index 0000000..edbfe68
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            .target {
+                left: 145px;
+                top:300px;
+                position: absolute;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <table id="tabletouch" cellpadding="5">
+                <tr>
+                    <td><img id="image1" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image2" src="img/btn_up.png" height="100" width="100" /></td>
+                    <td><img id="image3" src="img/btn_up.png" height="100" width="100" /></td>
+                </tr>
+            </table>
+            <p id="testresult">Touch info: no button touched</p>
+            <div id="scrollEare" class="scroll_eare">
+              <div id="scrollTarget" class="target"><img id="imageScroll" src="img/scroll.png" height="80" width="80" /></div>
+            </div>
+            <p class="ui-li-desc">* Drag this red button in above eare.</p>
+            <p id="errormessage"></p>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the device supports single touch, two fingers touch and three fingers touch(if it is supported) by clicking the blue buttons, and supports move touch by dragging the red button.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all the tips "one button touched, two buttons touched at one time, three buttons touched(if it is supported) at one time" show and the red button can be dragged.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Touch/js/main.js b/tv/tct-behavior-tests/tests/Touch/js/main.js
new file mode 100755 (executable)
index 0000000..897c676
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+jQuery(document).ready(function() {
+    try {
+        DisablePassButton();
+
+        var scrollTarget = $("#scrollTarget")[0];
+        var multitouch_count = tizen.systeminfo.getCapability("http://tizen.org/feature/multi_point_touch.point_count");
+
+        var resultMessage =["one button touched", "two buttons touched at one time", "three buttons touched at one time"];
+        var current_touchCnt = 0;
+        var touchCnt_goal = 3;
+
+        function touchstartFunction(obj){
+           obj.src = "img/btn_down.png"; 
+           current_touchCnt++;
+           $("#testresult").html("Touch info: " + resultMessage[current_touchCnt-1]);
+            if(current_touchCnt >= touchCnt_goal){
+                EnablePassButton();
+            }
+        }
+
+        function touchendFunction(obj){
+            obj.src = "img/btn_up.png";
+            current_touchCnt--;
+        }
+
+        $("#image1").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image2").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image3").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+
+        $("#image1").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image2").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image3").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+
+        if(multitouch_count == 2){
+            step3 = true;
+            touchCnt_goal = 2;
+            $("#image3").remove();
+        }
+
+
+        //touchmove event
+        document.getElementById("scrollTarget").addEventListener('touchmove',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/btn_down.png";
+            var changedTouches = event.changedTouches;
+            if(changedTouches.item(0).clientX <= getLeft($("#scrollEare")[0])+40){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+"px";
+            }else if(changedTouches.item(0).clientX >= getLeft($("#scrollEare")[0])+250){
+                scrollTarget.style.left = getLeft($("#scrollEare")[0])+250 +"px";
+            }else{
+                scrollTarget.style.left = changedTouches.item(0).clientX-40 +"px";
+            }
+            if(changedTouches.item(0).clientY <= getTop($("#scrollEare")[0])+40){
+                scrollTarget.style.top =getTop($("#scrollEare")[0]) +"px";
+            } else if(changedTouches.item(0).clientY >= getTop($("#scrollEare")[0])+150){
+                scrollTarget.style.top =getTop($("#scrollEare")[0])+150 +"px";
+            } else{
+                scrollTarget.style.top = changedTouches.item(0).clientY-40 +"px";
+            }
+        }, false);
+
+        //touchend event
+        document.getElementById("scrollTarget").addEventListener('touchcancel',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/scroll.png";
+        }, false);
+
+        document.getElementById("scrollTarget").addEventListener('touchend',  function (event){
+            var image = $("#imageScroll")[0];
+            if(image.src.toString().indexOf("scroll.png") == -1){
+              $("#errormessage").html("touchcancel event can not be fired");
+            }
+        }, false);
+    } catch (err) {
+        jQuery("#testresult").html("Html Console:" + err.message);
+    }
+
+    function getTop(e){
+        var offset=e.offsetTop;
+        if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
+        return offset;
+    }
+
+    function getLeft(e){
+        var offset=e.offsetLeft;
+        if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
+        return offset;
+    }
+});
diff --git a/tv/tct-behavior-tests/tests/UserAgentString/index.html b/tv/tct-behavior-tests/tests/UserAgentString/index.html
new file mode 100755 (executable)
index 0000000..47cce2c
--- /dev/null
@@ -0,0 +1,132 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script>
+            $(document).ready(function(){
+                jQuery("#user-agent-string").text(navigator.userAgent);
+                var agent_string = navigator.userAgent;
+                var tizen_platform_ver = agent_string.substring(agent_string.indexOf("(")+1, agent_string.indexOf(")"));
+                var khtml = agent_string.substring(agent_string.lastIndexOf("(")+1, agent_string.lastIndexOf(")"));
+                agent_string = agent_string.replace("("+tizen_platform_ver+")","");
+                agent_string = agent_string.replace("("+khtml+")","");
+                agent_string = agent_string.replace("  ", " ");
+                agent_string = agent_string.replace("  ", " ");
+                var platform_ver_array = tizen_platform_ver.split(";");
+
+                if(platform_ver_array.length == 3){ // tizen
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text(platform_ver_array[2]);
+                } else if(platform_ver_array.length == 2){ // chrome
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text("N/A");
+                } else if(platform_ver_array.length == 4){ //firefox
+                    jQuery("#user-platform-ver").text(platform_ver_array[2]);
+                    jQuery("#user-model-string").text("N/A");
+                }
+
+                var agent_string_array = agent_string.split(" ");
+                if(agent_string_array.length == 6){ //chrome
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[4].substring(0, agent_string_array[4].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[4].substr(agent_string_array[4].indexOf("\/")+1));
+                } else if(agent_string_array.length == 5){ //tizen
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/")+1));
+                    jQuery("#user-app-name").text(agent_string_array[2].substring(0, agent_string_array[2].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[2].substr(agent_string_array[2].indexOf("\/")+1));
+                }
+            });
+        </script>
+        <style type="text/css">
+            .d{
+                border: 1px solid #000;
+                width:100%;
+                height:280px;
+            }
+            .d li{
+                margin: 10px 5px;
+
+            }
+            #user-agent-string {
+               list-style : none;
+            }
+            .tips{
+                color: red;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="d">
+            <ul>
+              <li>User-Agent:</li>
+              <li id="user-agent-string"><span class="tips">Failed to get user agent string</span></li>
+              <li>PLATFORM_VER: <span id="user-platform-ver"></span></li>
+              <li>MODEL: <span id="user-model-string"></span></li>
+              <li>APPLE_WEBKIT_VER: <span id="user-apple-webkit-ver"></span></li>
+              <li>APP_NAME: <span id="user-app-name"></span></li>
+              <li>APP_VER: <span id="user-app-ver"></span></li>
+            </ul>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the user agent string follow correct format.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the user agent string reported by the Web View follow this format:</p>
+            <p>Mozilla/5.0 (Linux; Tizen PLATFORM_VER; MODEL) AppleWebKit/APPLE_WEBKIT_VER (KHTML, like Gecko) APP_NAME/APP_VER TV Safari/APPLE_WEBKIT_VER</p>
+            <ul>
+              <li>The value of the DEVICE_TYPE string SHOULD be the same as the type of the device.</li>
+              <li>The value of the PLATFORM_VER string MUST be the platform version of the device.</li>
+              <li>The value of the MODEL string SHOULD be the same as the name of the device.</li>
+              <li>The value of the APPLE_WEBKIT_VER string MUST be Webkit version.</li>
+              <li>The value of the APP_NAME string SHOULD be the same as the name of the application.</li>
+              <li>The value of the APP_VER string SHOULD be the same as the version of the application.</li>
+              <li>Device implementations MAY omit the word “TV” from the user agent string.</li>
+            </ul>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Vibration/css/style.css b/tv/tct-behavior-tests/tests/Vibration/css/style.css
new file mode 100755 (executable)
index 0000000..a4fdc9d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 10px 0px;
+   width: 100%;
+}
+
+.containing-element {
+    padding-top: 20px;
+}
+
+.containing-element .ui-slider-switch { width: 100% }
+
+.containing-element .ui-controlgroup-controls { width: 100% }
+
+.ui-radio { width: 50% }
diff --git a/tv/tct-behavior-tests/tests/Vibration/index.html b/tv/tct-behavior-tests/tests/Vibration/index.html
new file mode 100755 (executable)
index 0000000..f5581eb
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+        <style>
+            .vibration {
+                text-align: left
+            }
+            .opt {
+                text-align: left
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+          <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+          <div class="containing-element">
+            <label for="slider-1" class="vibration">Vibration Time(s)</label>
+            <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="0.50" max="3" step="0.10" value="1" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Periods(s)</label>
+            <input type="range" name="slider-2" id="slider-2" data-highlight="true" min="0.10" max="2" step="0.10" value="0.50" data-show-value="true" class="hideButton">
+            <label for="slider-1" class="vibration">Vibration Number</label>
+            <input type="range" name="slider-3" id="slider-3" data-highlight="true" min="1" max="20" value="2" data-show-value="true" class="hideButton">
+            <p><a href="javascript:startVibration()" id="start" data-role="button" class="opt">Start Vibration</a></p>
+            <a href="javascript:stopVibration()" id="stop" data-role="button" class="opt">Stop Vibration</a>
+          </div>
+        </div>
+        <div data-role="footer" data-position="fixed">
+        </div>
+        <div data-role="popup" id="popup_info">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the vibration is able to adjust vibration time from 500ms to 3000ms, vibration period from 100ms to 2000ms, and vibration number from 1 to 100. E.g, if vibration time is 1000ms, vibration period is 2000ms and vibration number is 3, then the test device vibrates 3 times in 6 seconds, and vibrates 1 second a time.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the vibration functions work well.</p>
+          </font>
+        </div>
+    </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Vibration/js/COPYING b/tv/tct-behavior-tests/tests/Vibration/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/tv/tct-behavior-tests/tests/Vibration/js/main.js b/tv/tct-behavior-tests/tests/Vibration/js/main.js
new file mode 100755 (executable)
index 0000000..5fa753a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var vibration_time, vibration_periods, vibration_number;
+
+jQuery(document).ready(function() {
+    DisablePassButton();
+    // style setting
+    $(':jqmData(role=content)').css("text-align", "center");
+    $(':jqmData(role=content)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 30px');
+
+    vibration_time = Number($("#slider-1").val())*1000;
+    vibration_periods = Number($("#slider-2").val())*1000;
+    vibration_number = $("#slider-3").val();
+});
+
+function startVibration() {
+    $("#start").addClass("ui-disabled");
+    var time_value=(Number(vibration_time)+Number(vibration_periods)) * Number(vibration_number);
+    setTimeout(function(){
+        $("#start").removeClass("ui-disabled");}, time_value);
+    var pattern = [];
+    for(var i=0; i<2*vibration_number ;i++){
+       if(i%2==0){
+           pattern.push(vibration_time-0);
+       } else {
+           pattern.push(vibration_periods-0);
+       }
+    }
+    navigator.vibrate(pattern);
+    EnablePassButton();
+}
+
+function stopVibration() {
+    navigator.vibrate(0);
+    $("#start").removeClass("ui-disabled");
+}
diff --git a/tv/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js b/tv/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/tv/tct-behavior-tests/tests/Viewport/index.html b/tv/tct-behavior-tests/tests/Viewport/index.html
new file mode 100755 (executable)
index 0000000..9e44fba
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="header">
+      <h1 id="main_page_title"></h1>
+    </div>
+    <div id="content">
+      <ul data-role="listview">
+        <li data-role="list-divider">device-height & device-width</li>
+        <li><div><a data-role="button" href="test/device.html" data-ajax="false">Test device-height and device-width</a></div></li>
+      </ul>
+<!--       <ul data-role="listview">
+        <li data-role="list-divider">enable scale & disable scale</li>
+        <li><div><a data-role="button" href="test/user-scalable.html" data-ajax="false">Test enable scale and disable scale</a></div></li>
+      </ul>
+      <ul data-role="listview">
+        <li data-role="list-divider">maximum-scale & minimum-scale</li>
+        <li><div><a data-role="button" href="test/scale.html" data-ajax="false">Test max scale and min scale</a></div></li>
+      </ul> -->
+    </div>
+    <div data-role="footer" data-position="fixed">
+    </div>
+    <div data-role="popup" id="popup_info">
+      <font class="fontSize">
+        <p>Test Purpose: </p>
+        <p>Verifies the functionalities of viewport. Tests the functionality of getting screen height and width, enabling or disabling screen saleable to allow or disallow zoom in/out screen, sliding the screen by figure.</p>
+        <p>Expected Result: </p>
+        <p>Test passes if all the check points function well.</p>
+      </font>
+    </div>
+  </body>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Viewport/test/device.html b/tv/tct-behavior-tests/tests/Viewport/test/device.html
new file mode 100755 (executable)
index 0000000..11a4613
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 100%;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+           var div = document.createElement("div");
+          var pixel_ratio = 1;
+           var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1600,2],[1920,1]];     
+           
+          if (deviceCapability=="MOBILE_FULL"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+        
+          
+            var height = property.resolutionHeight / pixel_ratio;
+            var width = property.resolutionWidth / pixel_ratio;
+            div.style.background = "green";
+            div.style.height = height + "px";
+            div.style.width = width + "px";
+            div.innerHTML = "<p>device-height : " + height + "</p><br>" +
+                            "<p>device-width : " + width + "</p><br>" +
+                            "<p>Test passes if the screen is full of green background</p><br>" +
+                            "<p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p>";
+            document.body.appendChild(div);
+
+        });
+    </script>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Viewport/test/scale.html b/tv/tct-behavior-tests/tests/Viewport/test/scale.html
new file mode 100755 (executable)
index 0000000..54483b0
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height, minimum-scale=1.0, maximum-scale=2.0" />
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 160px;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+
+          var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1600,2]];      
+           
+          if (deviceCapability=="MOBILE_FULL"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+            var maximum_scale = 2;
+            var div = document.createElement("div");
+            var screenHight = property.resolutionHeight / pixel_ratio;
+            var screenWidth = property.resolutionWidth / pixel_ratio;
+            var divWidth = screenWidth / maximum_scale;
+            div.style.background = "green";
+            div.innerHTML = "<div style='background-color:green;float:left;width:" + divWidth + "px;height:"+screenHight+"px'><p>1.Zoom to minimum, the screen background is about half of green and half of yellow</p><br><p>2.Zoom to maximum, the screen is full of green; then slide to right, you can see yellow background</p><br><p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p></div>" + "<div style='background-color: yellow;float:left;width:"+divWidth+"px;height:" + screenHight + "px'></div>";
+            document.body.appendChild(div);
+        });
+    </script>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/Viewport/test/user-scalable.html b/tv/tct-behavior-tests/tests/Viewport/test/user-scalable.html
new file mode 100755 (executable)
index 0000000..9b99395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=500, height=500, user-scalable=no">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: green;
+        }
+        div {
+            background-color: green;
+            width: 500px;
+            height: 500px;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 270px;
+        }
+    </style>
+    <script type="text/javascript">
+        function changeUerscalable(flag) {
+            if (flag == "enable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=yes";
+            } else if (flag == "disable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=no";
+            }
+        }
+    </script>
+  </head>
+  <body>
+    <div>
+      <p>EnableScale: you can scale the screen</p><br>
+      <p>DisableScale: you can not scale the screen</p><br>
+      <p>
+        <button onmousedown="javascript: window.history.back();" class="button">Complete Test</button><br>
+        <button onmousedown="changeUerscalable('enable')" class="button">Enable Scale</button><br>
+        <button onmousedown="changeUerscalable('disable')" class="button">Disable Scale</button><br>
+      </p>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/index.html b/tv/tct-behavior-tests/tests/WRTSupport/index.html
new file mode 100755 (executable)
index 0000000..6302334
--- /dev/null
@@ -0,0 +1,224 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+        SRC-NJ Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test localization</li>
+                <li id="other-localization">
+                    <a href="javascript:goToApp('res/other-localization.html')" data-transition="slide" style="">
+                        <h2>other-localization</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test unload event</li>
+                <li id="lifecycle-unload-event">
+                    <a href="javascript:goToApp('res/lifecycle-unload-event.html')" data-transition="slide" style="">
+                        <h2>lifecycle-unload-event</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access policy</li>
+                <li id="other-widget-access-policy">
+                    <a href="javascript:goToApp('res/other-widget-access-policy.html')" data-transition="slide" style="">
+                        <h2>other-widget-access-policy</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test uri schemes</li>
+                <li id="other-uri-schemes">
+                    <a href="javascript:goToApp('res/other-uri-schemes.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto-groups">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-groups.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-groups</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto-tel">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-tel.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-tel</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test debug web inspector</li>
+                <li id="debug-web-inspector-ubuntu">
+                    <a href="javascript:goToApp('res/debug-web-inspector-ubuntu.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-ubuntu</h2>
+                    </a>
+                </li>
+                <li id="debug-web-inspector-windows7">
+                    <a href="javascript:goToApp('res/debug-web-inspector-windows7.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-windows7</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access multiple</li>
+                <li id="url-access-multi-all-ports">
+                    <a href="javascript:goToApp('res/url-access-multi-all-ports.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-all-ports</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https">
+                    <a href="javascript:goToApp('res/url-access-multi-https.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-all">
+                    <a href="javascript:goToApp('res/url-access-multi-https-all.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-all</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-subdomains">
+                    <a href="javascript:goToApp('res/url-access-multi-https-subdomains.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-subdomains</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test security permission and encryption</li>
+                <li id="security-policy">
+                    <a href="javascript:goToApp('res/security-policy.html')" data-transition="slide" style="">
+                        <h2>security-policy</h2>
+                    </a>
+                </li>
+                <li id="security-permission">
+                    <a href="javascript:goToApp('res/security-permission.html')" data-transition="slide" style="">
+                        <h2>security-permission</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_FullScreen_L_Req2.2">
+                    <a href="javascript:goToApp('res/TC_UPER_FullScreen_L_Req2.2.html')" data-transition="slide" style="">
+                        <h2>FullScreen_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_FullScreen_LP_Req2.2">
+                    <a href="javascript:goToApp('res/TC_UPER_FullScreen_LP_Req2.2.html')" data-transition="slide" style="">
+                        <h2>FullScreen_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_Geoloc_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_Geoloc_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>Geoloc_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_GetUserMedia_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_GetUserMedia_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>GetUserMedia_local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_H_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_H_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Remote_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_HP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_HP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Remote_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_L_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_L_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Local_withoutprivilege</h2>
+                    </a>
+                </li>
+                <li id="TC_UPER_WebNotify_LP_Req2.3">
+                    <a href="javascript:goToApp('res/TC_UPER_WebNotify_LP_Req2.3.html')" data-transition="slide" style="">
+                        <h2>WebNotify_Local_withprivilege</h2>
+                    </a>
+                </li>
+                <li id="protection-encryption-check">
+                    <a href="javascript:goToApp('res/protection-encryption-check.html')" data-transition="slide" style="">
+                        <h2>protection-encryption-check</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of uri scheme support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support at least the following URI schemes: "sms://", "mmsto://", "mailto://", "&lt;mailto:&gt;" and support localization funxtionality.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/js/main.js b/tv/tct-behavior-tests/tests/WRTSupport/js/main.js
new file mode 100755 (executable)
index 0000000..b0f0790
--- /dev/null
@@ -0,0 +1,316 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+        SRC-NJ Weixia Fu <weixia12.fu@samsung.com>
+
+*/
+var allId=new Array('wrt3lue021',
+                    'wrt3olo022',
+                    'wrt3ous027',
+                    'wrt3owa028',
+                    'wrt5pec002',
+                    'wrt5pec120',
+                    'wrtsche005',
+                    'wrtsche007',
+                    'wrturla003',
+                    'wrturla004',
+                    'wrturla005',
+                    'wrturla006',
+                    'wrt5pec119',
+                    'FULL00010L',
+                    'FULL0000LP',
+                    'Zy38WGeo4H',
+                    'Zy39WGeoHP',
+                    'Zy40WGeo4L',
+                    'Zy41WGeoLP',
+                    'Zy44SGet4H',
+                    'Zy45SGetHP',
+                    'Qj5162RiTb',
+                    'UE52s9HrGz',
+                    'Zy81WNot4L',
+                    'Zy99WNotHP',
+                    'Zy79WNot4L',
+                    'Zyj599otLP');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.wrts.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/js/tests.js b/tv/tct-behavior-tests/tests/WRTSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..c256e8d
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('debug-web-inspector-windows7','debug-web-inspector-ubuntu');
+
+$(document).ready(function(){
+    updateFooterButton();
+
+    wgt_name = $("#wgt_name").val();
+    if(jQuery.inArray(wgt_name, install_wgt) == -1) {
+        DisablePassButton();
+
+        app_id = $("#app_id").val();
+        package_id = $("#package_id").val();
+
+        $("#install").bind("vclick", function() {
+            install();
+        });
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+        $("#uninstall").bind("vclick", function() {
+            uninstall(package_id);
+        });
+        try {
+            tizen.package.setPackageInfoEventListener(packageEventCallback);
+        } catch (e) {
+            alert("Exception: " + e.message);
+        }
+
+        packagePre(wgt_name);
+        $('#uninstall').addClass("ui-disabled");
+        $('#launch').addClass("ui-disabled");
+
+        if(checkInstalledPkg(package_id)) {
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.html
new file mode 100755 (executable)
index 0000000..3dc4910
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_FullScreen_LP_Req2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_FullScreen_LP_Req2.2"/>
+                <input type="hidden" id="app_id" value="FULL0000LP.UPERFULLSCREEN"/>
+                <input type="hidden" id="package_id" value="FULL0000LP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It should switch to full screen mode".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt
new file mode 100755 (executable)
index 0000000..f7cb27c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_LP_Req2.2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.html
new file mode 100755 (executable)
index 0000000..bd2b575
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_FullScreen_L_Req2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_FullScreen_L_Req2.2"/>
+                <input type="hidden" id="app_id" value="FULL00010L.UPERFULLSCREEN"/>
+                <input type="hidden" id="package_id" value="FULL00010L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It should not switch to full screen mode".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt
new file mode 100755 (executable)
index 0000000..f88e00c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_FullScreen_L_Req2.2.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..d4056ae
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy39WGeoHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy39WGeoHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It can get location".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..2793b0f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_HP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..4207650
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy38WGeo4H.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy38WGeo4H"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It can not get location".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..cd9ccbc
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_H_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..001e3a0
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy41WGeoLP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy41WGeoLP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It can get location".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..15f52e3
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_LP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..340cd44
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_Geoloc_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_Geoloc_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy40WGeo4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy40WGeo4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It can not get location".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..0a5802b
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_Geoloc_L_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..47355d6
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy45SGetHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy45SGetHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if it should show a pop up 'This application wants to use your media' with 'Deny',  'Allow', And 'Remember Preference' options within APP view.
+</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..263ad84
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_HP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..7e6b093
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy44SGet4H.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy44SGet4H"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if it displayed PASS.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..be9e181
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_H_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..6d12740
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="UE52s9HrGz.SelfCamera1"/>
+                <input type="hidden" id="package_id" value="UE52s9HrGz"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if it should show a pop up 'This application wants to use your media' with 'Deny',  'Allow', And 'Remember Preference' options within APP view.
+.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..d49e57c
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_LP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..1f96b65
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_GetUserMedia_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_GetUserMedia_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Qj5162RiTb.Selfcamera"/>
+                <input type="hidden" id="package_id" value="Qj5162RiTb"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if it displayed PASS.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..54fb120
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_GetUserMedia_L_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.html
new file mode 100755 (executable)
index 0000000..0fa2c94
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_HP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_HP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy99WNotHP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy99WNotHP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It should show a pop up 'This application wants to use your media' with 'Deny',  'Allow', And 'Remember Preference' and should display email received notification within APP view.".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..bdabfad
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_HP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.html
new file mode 100755 (executable)
index 0000000..3f99074
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_H_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_H_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy81WNot4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy81WNot4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It should show a pop up 'This application wants to use your media' with 'Deny',  'Allow', And 'Remember Preference' and should display email received notification within APP view."</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..51d2e2b
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_H_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.html
new file mode 100755 (executable)
index 0000000..07c774b
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_LP_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_LP_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zyj599otLP.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zyj599otLP"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if it displayed PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..03cbb7d
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_LP_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.html
new file mode 100755 (executable)
index 0000000..bc94344
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Weixia Fu <weixia12.fu@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css"/>
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="TC_UPER_WebNotify_L_Req2.3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TC_UPER_WebNotify_L_Req2.3"/>
+                <input type="hidden" id="app_id" value="Zy79WNot4L.DynamicSample1"/>
+                <input type="hidden" id="package_id" value="Zy79WNot4L"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if It should show a pop up 'This application wants to use your media' with 'Deny',  'Allow', And 'Remember Preference' options within APP view.".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt
new file mode 100755 (executable)
index 0000000..3c468fb
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/TC_UPER_WebNotify_L_Req2.3.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html b/tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html
new file mode 100755 (executable)
index 0000000..3df8be5
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-ubuntu">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-ubuntu"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(ubuntu) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish".</li>
+                                    <li>Connect test device to PC. Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(ubuntu).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html b/tv/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html
new file mode 100755 (executable)
index 0000000..584c453
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-windows7">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-windows7"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(windows) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish". Connect test device to PC.</li>
+                                    <li>Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(windows).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html b/tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html
new file mode 100755 (executable)
index 0000000..c70d346
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-unload-event">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-unload-event"/>
+                <input type="hidden" id="app_id"  value="wrt3lue021.LifecycleUnloadEvent"/>
+                <input type="hidden" id="package_id" value="wrt3lue021"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt
new file mode 100755 (executable)
index 0000000..9b3a862
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.html
new file mode 100755 (executable)
index 0000000..bd16fe2
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-localization">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-localization"/>
+                <input type="hidden" id="app_id"  value="wrt3olo022.OtherLocalization"/>
+                <input type="hidden" id="package_id" value="wrt3olo022"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the local language is English (check the installed widget's name on the device screen, it should be "english-ol").</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a dialog with "default description." popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt
new file mode 100755 (executable)
index 0000000..37d1ebb
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html
new file mode 100755 (executable)
index 0000000..4d00293
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-groups">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-groups"/>
+                <input type="hidden" id="app_id"  value="wrtsche005.otherurischemesmailtogroups"/>
+                <input type="hidden" id="package_id" value="wrtsche005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with its groups account is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt
new file mode 100755 (executable)
index 0000000..b75257b
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html
new file mode 100755 (executable)
index 0000000..8f8319a
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-tel">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-tel"/>
+                <input type="hidden" id="app_id"  value="wrtsche007.otherurischemesmailtotel"/>
+                <input type="hidden" id="package_id" value="wrtsche007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The telephone call is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt
new file mode 100755 (executable)
index 0000000..98eafed
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.html
new file mode 100755 (executable)
index 0000000..8e4c77e
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto"/>
+                <input type="hidden" id="app_id"  value="wrt3ous125.OtherUriSchemesMailto"/>
+                <input type="hidden" id="package_id" value="wrt3ous125"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with your wrote contents(cc account, bcc account, body content, groups account, subject content) are displayed on the screen when click the "send email" button.</li>
+              <li>The telephone call is displayed on the screen when click the "call" button.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt
new file mode 100755 (executable)
index 0000000..b633245
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.html
new file mode 100755 (executable)
index 0000000..2e437bb
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes"/>
+                <input type="hidden" id="app_id"  value="wrt3ous027.otherurischemes"/>
+                <input type="hidden" id="package_id" value="wrt3ous027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the sms module, mms module and email module of the device are requested when click the links "sms", "mmsto" and "mailto".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt
new file mode 100755 (executable)
index 0000000..764703f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html b/tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.html
new file mode 100755 (executable)
index 0000000..1c65544
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-widget-access-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-widget-access-policy"/>
+                <input type="hidden" id="app_id"  value="wrt3owa028.otherwidgetaccesspolicy"/>
+                <input type="hidden" id="package_id" value="wrt3owa028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link of "www.baidu.com", it opens the home page of "www.baidu.com".</li>
+              <li>Close the widget and launch again, it cannot open the home page of "www.163.com".</li>
+              <li>Click the link of "www.163.com", it opens the home page of "www.163.com" in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt
new file mode 100755 (executable)
index 0000000..aa18a34
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/other-widget-access-policy.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html b/tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html
new file mode 100755 (executable)
index 0000000..58102e2
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="protection-encryption-check">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="protection-encryption-check"/>
+                <input type="hidden" id="app_id"  value="wrt5pec002.protectionencryptioncheck"/>
+                <input type="hidden" id="package_id" value="wrt5pec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.The resources(js, CSS, HTML files) of protection-encryption-check application is encrypted.<br>
+               For example: use the command: admin user: "vi /opt/usr/globalapps/wrt5pec002/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt5pec002/res/wgt/index.html" to show the content of "index.html" in terminal, the content of "index.html" is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if "js code ok" and a image which same as this widget icon are displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt
new file mode 100755 (executable)
index 0000000..49222b7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.html b/tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.html
new file mode 100755 (executable)
index 0000000..d46b176
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-permission">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-permission"/>
+                <input type="hidden" id="app_id"  value="wrt5pec120.securitypermission"/>
+                <input type="hidden" id="package_id" value="wrt5pec120"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt
new file mode 100755 (executable)
index 0000000..645d325
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.html b/tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.html
new file mode 100755 (executable)
index 0000000..93c90e5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-policy"/>
+                <input type="hidden" id="app_id"  value="wrt5pec119.securitypolicy"/>
+                <input type="hidden" id="package_id" value="wrt5pec119"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt
new file mode 100755 (executable)
index 0000000..cf9a944
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html
new file mode 100755 (executable)
index 0000000..f36ef5a
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all-ports">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all-ports"/>
+                <input type="hidden" id="app_id"  value="wrturla003.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrturla003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt
new file mode 100755 (executable)
index 0000000..1c6f93a
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.html
new file mode 100755 (executable)
index 0000000..1ef1e73
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all"/>
+                <input type="hidden" id="app_id"  value="wrt3uam047.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrt3uam047"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt
new file mode 100755 (executable)
index 0000000..03552ef
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html
new file mode 100755 (executable)
index 0000000..2695f68
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-all"/>
+                <input type="hidden" id="app_id"  value="wrturla005.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt
new file mode 100755 (executable)
index 0000000..832cb43
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html
new file mode 100755 (executable)
index 0000000..6c06ff2
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrturla006.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrturla006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/zh-hans/forums/general-support?langredirect=1". It is unable to open in this widget.</li>
+              <li>Click the link "https://accounts.google.com/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com/SignUp?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt
new file mode 100755 (executable)
index 0000000..a79c3d9
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html
new file mode 100755 (executable)
index 0000000..5551395
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https"/>
+                <input type="hidden" id="app_id"  value="wrturla004.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt
new file mode 100755 (executable)
index 0000000..6886e9f
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.html
new file mode 100755 (executable)
index 0000000..6e9f55c
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrt3uam048.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrt3uam048"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.baidu.com/gaoji/preferences.html". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com/cn". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt
new file mode 100755 (executable)
index 0000000..0379194
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-subdomains.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.html
new file mode 100755 (executable)
index 0000000..36c321a
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi"/>
+                <input type="hidden" id="app_id"  value="wrt3uam046.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrt3uam046"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.neusoft.com". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It doesn't open in the widget, it opens in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt
new file mode 100755 (executable)
index 0000000..123869b
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTSupport/res/url-access-multi.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/index.html b/tv/tct-behavior-tests/tests/WRTUI/index.html
new file mode 100755 (executable)
index 0000000..ce2a691
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test multiple browsing</li>
+                <li id="multiple-browsing-context">
+                    <a href="javascript:goToApp('res/multiple-browsing-context.html')" data-transition="slide" style="">
+                        <h2>multiple-browsing-context</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-allow-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-not-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-not-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-not-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-not-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-not-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-not-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test rotation</li>
+                <li id="view-mode-maximized-rotation">
+                    <a href="javascript:goToApp('res/view-mode-maximized-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-maximized-rotation</h2>
+                    </a>
+                </li>
+                <li id="view-mode-fullscreen-rotation">
+                    <a href="javascript:goToApp('res/view-mode-fullscreen-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-fullscreen-rotation</h2>
+                    </a>
+                </li>
+                <li id="application-rotation-sensor-enable">
+                    <a href="javascript:goToApp('res/application-rotation-sensor-enable.html')" data-transition="slide" style="">
+                        <h2>application-rotation-sensor-enable</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of view mode and multiple browsing context support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support two view modes: “maximized” and “fullscreen” of W3C 'view-mode' Media Feature.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/js/main.js b/tv/tct-behavior-tests/tests/WRTUI/js/main.js
new file mode 100755 (executable)
index 0000000..57984c1
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+*/
+var allId=new Array('wrt4ars001',
+                    'wrt4vmm015',
+                    'wrt4mbc004',
+                    'wrt4vmf013',
+                    'wrtspec004',
+                    'wrtspec002',
+                    'Odsz8ZWo5A',
+                    '2DJ6sfQ1mh');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTUI";
+var RESULT_FILE_NAME = "tct-behavior-child.wrtui.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/tv/tct-behavior-tests/tests/WRTUI/js/tests.js b/tv/tct-behavior-tests/tests/WRTUI/js/tests.js
new file mode 100755 (executable)
index 0000000..c1bccb5
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#uninstall').addClass("ui-disabled");
+            $('#launch').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTUI/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html b/tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html
new file mode 100755 (executable)
index 0000000..6ee475b
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-rotation-sensor-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-rotation-sensor-enable"/>
+                <input type="hidden" id="app_id"  value="wrt4ars001.applicationrotationsensorenable"/>
+                <input type="hidden" id="package_id" value="wrt4ars001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Turn on the auto-rotate screen. (Maybe this option can be found in the "setting" menu of the device).</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen orientation is changed and a "PASS" popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt
new file mode 100755 (executable)
index 0000000..1c8c095
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..8fb3aa5
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec004.cspmodeallownavigationaccess"/>
+                <input type="hidden" id="package_id" value="wrtspec004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..d3f13c7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html
new file mode 100755 (executable)
index 0000000..17a4355
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-not-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-not-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec002.notNavigationAccess"/>
+                <input type="hidden" id="package_id" value="wrtspec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..04d5342
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html b/tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html
new file mode 100755 (executable)
index 0000000..7f488d5
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="multiple-browsing-context">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="multiple-browsing-context"/>
+                <input type="hidden" id="app_id"  value="wrt4mbc004.multiplebrowsingcontext"/>
+                <input type="hidden" id="package_id" value="wrt4mbc004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a new page with "index2.html" can be opened when click the "open window" button on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt
new file mode 100755 (executable)
index 0000000..6b4b992
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..cdf0233
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="Odsz8ZWo5A.notCspAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="Odsz8ZWo5A"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a blank page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..968b6c8
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..9962666
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-not-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-not-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="2DJ6sfQ1mh.notCspNotAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="2DJ6sfQ1mh"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..9b360f6
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html
new file mode 100755 (executable)
index 0000000..9f22049
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-fullscreen-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-fullscreen-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmf013.viewmodefullscreenrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmf013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and fullscreen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt
new file mode 100755 (executable)
index 0000000..3038496
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt differ
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html
new file mode 100755 (executable)
index 0000000..59c4b76
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-maximized-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-maximized-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmm015.viewmodemaximizedrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmm015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and maximized.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt
new file mode 100755 (executable)
index 0000000..c80a8c7
Binary files /dev/null and b/tv/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt differ
diff --git a/wearable/tct-behavior-tests/LICENSE.Apache-2.0 b/wearable/tct-behavior-tests/LICENSE.Apache-2.0
new file mode 100755 (executable)
index 0000000..d645695
--- /dev/null
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/wearable/tct-behavior-tests/LICENSE.BSD-3 b/wearable/tct-behavior-tests/LICENSE.BSD-3
new file mode 100755 (executable)
index 0000000..624f664
--- /dev/null
@@ -0,0 +1,28 @@
+This software is licensed under following license.
+
+****************************************************************************
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+****************************************************************************
diff --git a/wearable/tct-behavior-tests/LICENSE.CC-BY-3.0 b/wearable/tct-behavior-tests/LICENSE.CC-BY-3.0
new file mode 100755 (executable)
index 0000000..67323bd
--- /dev/null
@@ -0,0 +1,295 @@
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES.
+DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP.
+CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS
+MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
+DAMAGES RESULTING FROM ITS USE.
+
+License
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS
+PUBLIC LICENSE("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR
+OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE
+OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND
+BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED
+TO BE A CONTRACT,
+THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR
+ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+a."Adaptation" means a work based upon the Work, or upon the Work and
+other pre-existing works, such as a translation, adaptation, derivative work,
+arrangement of music or other alterations of a literary or artistic work,
+or phonogram or performance and includes cinematographic adaptations
+or any other form in which the Work may be recast,
+transformed, or adapted including in any form recognizably derived from
+the original,
+except that a work that constitutes a Collection will not be considered
+an Adaptation for the purpose of this License.
+For the avoidance of doubt, where the Work is a musical work, performance
+or phonogram, the synchronization of the Work in timed-relation with a moving
+image ("synching") will be considered an Adaptation for the purpose of this License.
+b."Collection" means a collection of literary or artistic works,
+such as encyclopedias and anthologies, or performances,
+phonograms or broadcasts, or other works or subject matter other than
+works listed in Section 1(f) below, which, by reason of the selection
+and arrangement of their contents, constitute intellectual creations,
+in which the Work is included in its entirety in unmodified form
+along with one or more other contributions, each constituting separate
+and independent works in themselves, which together are assembled into
+a collective whole.
+A work that constitutes a Collection will not be considered an Adaptation
+(as defined above) for the purposes of this License.
+c."Distribute" means to make available to the public the original and
+copies of the Work or Adaptation, as appropriate, through sale or
+other transfer of ownership.
+d."Licensor" means the individual, individuals, entity or entities that offer(s)
+the Work under the terms of this License.
+e."Original Author" means, in the case of a literary or artistic work,
+the individual, individuals,
+entity or entities who created the Work or if no individual or entity can be identified,
+the publisher; and in addition
+(i) in the case of a performance the actors, singers, musicians, dancers,
+and other persons who act, sing, deliver, declaim, play in, interpret or
+otherwise perform literary or artistic works or expressions of folklore;
+(ii) in the case of a phonogram the producer being the person or legal entity
+who first fixes the sounds of a performance or other sounds; and,
+(iii) in the case of broadcasts, the organization that transmits the broadcast.
+f."Work" means the literary and/or artistic work offered under the terms
+of this License including without limitation any production in the literary,
+scientific and artistic domain, whatever may be the mode or form of its expression
+including digital form, such as a book, pamphlet and other writing; a lecture,
+address, sermon or other work of the same nature; a dramatic or dramatico-musical work;
+a choreographic work or entertainment in dumb show;
+a musical composition with or without words; a cinematographic work to which
+are assimilated works expressed by a process analogous to cinematography;
+a work of drawing, painting, architecture, sculpture, engraving or lithography;
+a photographic work to which are assimilated works expressed by a process analogous
+to photography; a work of applied art; an illustration, map, plan, sketch or
+three-dimensional work relative to geography, topography, architecture or science;
+a performance; a broadcast; a phonogram; a compilation of data to the extent it
+is protected as a copyrightable work; or a work performed by a variety or
+circus performer to the extent it is not otherwise considered a literary or artistic work.
+g."You" means an individual or entity exercising rights under this License
+who has not previously violated the terms of this License with respect to the Work,
+or who has received express permission from the Licensor to exercise rights
+under this License despite a previous violation.
+h."Publicly Perform" means to perform public recitations of the Work and to
+communicate to the public those public recitations, by any means or process,
+including by wire or wireless means or public digital performances;
+to make available to the public Works in such a way that members of the public
+may access these Works from a place and at a place individually chosen by them;
+to perform the Work to the public by any means or process and the communication
+to the public of the performances of the Work, including by public digital performance;
+to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+i."Reproduce" means to make copies of the Work by any means including without
+limitation by sound or visual recordings and the right of fixation and
+reproducing fixations of the Work, including storage of a protected performance
+or phonogram in digital form or other electronic medium.
+
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit,
+or restrict any uses free from copyright or rights arising from limitations or
+exceptions that are provided for in connection with the copyright protection
+under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License,
+Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual
+(for the duration of the applicable copyright) license to exercise the rights
+in the Work as stated below:
+
+a.to Reproduce the Work, to incorporate the Work into one or more Collections,
+and to Reproduce the Work as incorporated in the Collections;
+b.to create and Reproduce Adaptations provided that any such Adaptation,
+including any translation in any medium, takes reasonable steps to clearly label,
+demarcate or otherwise identify that changes were made to the original Work.
+For example, a translation could be marked "The original work was translated
+from English to Spanish," or a modification could indicate
+"The original work has been modified.";
+c.to Distribute and Publicly Perform the Work including as incorporated
+in Collections; and,
+d.to Distribute and Publicly Perform Adaptations.
+e.For the avoidance of doubt:
+
+i.Non-waivable Compulsory License Schemes. In those jurisdictions in which
+the right to collect royalties through any statutory or compulsory licensing
+scheme cannot be waived, the Licensor reserves the exclusive right to collect
+such royalties for any exercise by You of the rights granted under this License;
+ii.Waivable Compulsory License Schemes. In those jurisdictions in which the right
+to collect royalties through any statutory or compulsory licensing scheme can be waived,
+the Licensor waives the exclusive right to collect such royalties for any exercise
+by You of the rights granted under this License; and,
+iii.Voluntary License Schemes. The Licensor waives the right to collect royalties,
+whether individually or, in the event that the Licensor is a member of a collecting
+society that administers voluntary licensing schemes, via that society,
+from any exercise by You of the rights granted under this License.
+The above rights may be exercised in all media and formats whether now known
+or hereafter devised. The above rights include the right to make such modifications
+as are technically necessary to exercise the rights in other media and formats.
+Subject to Section 8(f), all rights not expressly granted by Licensor
+are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made
+subject to and limited by the following restrictions:
+
+a.You may Distribute or Publicly Perform the Work only under the terms of
+this License. You must include a copy of, or the Uniform Resource Identifier (URI)
+for, this License with every copy of the Work You Distribute or Publicly Perform.
+You may not offer or impose any terms on the Work that restrict the terms of
+this License or the ability of the recipient of the Work to exercise
+the rights granted to that recipient under the terms of the License.
+You may not sublicense the Work. You must keep intact all notices that refer
+to this License and to the disclaimer of warranties with every copy of
+the Work You Distribute or Publicly Perform.
+When You Distribute or Publicly Perform the Work,
+You may not impose any effective technological measures on the Work
+that restrict the ability of a recipient of the Work from You to exercise
+the rights granted to that recipient under the terms of the License.
+This Section 4(a) applies to the Work as incorporated in a Collection,
+but this does not require the Collection apart from the Work itself
+to be made subject to the terms of this License.
+If You create a Collection, upon notice from any Licensor You must,
+to the extent practicable, remove from the Collection any credit
+as required by Section 4(b), as requested. If You create an Adaptation,
+upon notice from any Licensor You must, to the extent practicable,
+remove from the Adaptation any credit as required by Section 4(b),
+as requested. b.If You Distribute, or Publicly Perform the Work or
+any Adaptations or Collections, You must, unless a request has been made
+pursuant to Section 4(a), keep intact all copyright notices for the Work
+and provide, reasonable to the medium or means You are utilizing:
+(i) the name of the Original Author (or pseudonym, if applicable)
+if supplied, and/or if the Original Author and/or Licensor designate
+another party or parties (e.g., a sponsor institute, publishing entity, journal)
+for attribution ("Attribution Parties") in Licensor's copyright notice,
+terms of service or by other reasonable means,
+the name of such party or parties; (ii) the title of the Work if supplied;
+(iii) to the extent reasonably practicable, the URI, if any,
+that Licensor specifies to be associated with the Work,
+unless such URI does not refer to the copyright notice or licensing information
+for the Work; and (iv) , consistent with Section 3(b),
+in the case of an Adaptation,
+a credit identifying the use of the Work in the Adaptation
+(e.g., "French translation of the Work by Original Author," or
+"Screenplay based on original Work by Original Author").
+The credit required by this Section 4(b) may be implemented
+in any reasonable manner; provided, however, that in the case of
+a Adaptation or Collection, at a minimum such credit will appear,
+if a credit for all contributing authors of the Adaptation or Collection appears,
+then as part of these credits and in a manner at least as prominent
+as the credits for the other contributing authors.
+For the avoidance of doubt, You may only use the credit required by this Section
+for the purpose of attribution in the manner set out above and,
+by exercising Your rights under this License, You may not implicitly
+or explicitly assert or imply any connection with, sponsorship or
+endorsement by the Original Author, Licensor and/or Attribution Parties,
+as appropriate, of You or Your use of the Work, without the separate,
+express prior written permission of the Original Author,
+Licensor and/or Attribution Parties.
+c.Except as otherwise agreed in writing by the Licensor or as may be otherwise
+permitted by applicable law, if You Reproduce, Distribute or Publicly Perform
+the Work either by itself or as part of any Adaptations or Collections,
+You must not distort, mutilate, modify or take other derogatory action
+in relation to the Work which would be prejudicial to the Original Author's honor
+or reputation. Licensor agrees that in those jurisdictions (e.g. Japan),
+in which any exercise of the right granted in Section 3(b) of this License
+(the right to make Adaptations) would be deemed to be a distortion,
+mutilation, modification or other derogatory action prejudicial to
+the Original Author's honor and reputation, the Licensor will waive or
+not assert, as appropriate, this Section, to the fullest extent permitted
+by the applicable national law, to enable You to reasonably exercise
+Your right under Section 3(b) of this License (right to make Adaptations)
+but not otherwise.
+
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING,
+LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES
+OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
+INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
+FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT
+OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
+WHETHER OR NOT DISCOVERABLE.
+SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES,
+SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW,
+IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY
+FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
+ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK,
+EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+a.This License and the rights granted hereunder will terminate automatically
+upon any breach by You of the terms of this License.
+Individuals or entities who have received Adaptations or Collections
+from You under this License, however,
+will not have their licenses terminated provided such individuals or entities
+remain in full compliance with those licenses.
+Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+b.Subject to the above terms and conditions, the license granted here is
+perpetual (for the duration of the applicable copyright in the Work).
+Notwithstanding the above, Licensor reserves the right to release the Work
+under different license terms or to stop distributing the Work at any time;
+provided, however that any such election will not serve to withdraw
+this License (or any other license that has been, or is required to be,
+granted under the terms of this License),
+and this License will continue in full force and effect unless terminated
+as stated above.
+
+8. Miscellaneous
+
+a.Each time You Distribute or Publicly Perform the Work or a Collection,
+the Licensor offers to the recipient a license to the Work on the same terms
+and conditions as the license granted to You under this License.
+b.Each time You Distribute or Publicly Perform an Adaptation,
+Licensor offers to the recipient a license to the original Work on the same terms
+and conditions as the license granted to You under this License.
+c.If any provision of this License is invalid or unenforceable
+under applicable law, it shall not affect the validity or enforceability
+of the remainder of the terms of this License, and without further action
+by the parties to this agreement, such provision shall be reformed
+to the minimum extent necessary to make such provision valid and enforceable.
+d.No term or provision of this License shall be deemed waived and
+no breach consented to unless such waiver or consent shall be in writing
+and signed by the party to be charged with such waiver or consent.
+e.This License constitutes the entire agreement between the parties
+with respect to the Work licensed here. There are no understandings,
+agreements or representations with respect to the Work not specified here.
+Licensor shall not be bound by any additional provisions that may appear
+in any communication from You. This License may not be modified
+without the mutual written agreement of the Licensor and You.
+f.The rights granted under, and the subject matter referenced,
+in this License were drafted utilizing the terminology of the Berne Convention
+for the Protection of Literary and Artistic Works (as amended on September 28, 1979),
+the Rome Convention of 1961, the WIPO Copyright Treaty of 1996,
+the WIPO Performances and Phonograms Treaty of 1996
+and the Universal Copyright Convention (as revised on July 24, 1971).
+These rights and subject matter take effect in the relevant jurisdiction
+in which the License terms are sought to be enforced according to
+the corresponding provisions of the implementation of those treaty provisions
+in the applicable national law. If the standard suite of rights granted
+under applicable copyright law includes additional rights not granted
+under this License, such additional rights are deemed to be included in the License;
+this License is not intended to restrict the license of any rights under applicable law.
+Creative Commons Notice
+Creative Commons is not a party to this License, and makes no warranty
+whatsoever in connection with the Work. Creative Commons will not be liable to
+You or any party on any legal theory for any damages whatsoever,
+including without limitation any general, special, incidental
+or consequential damages arising in connection to this license.
+Notwithstanding the foregoing two (2) sentences,
+if Creative Commons has expressly identified itself as the Licensor hereunder,
+it shall have all rights and obligations of Licensor.
+
+Except for the limited purpose of indicating to the public
+that the Work is licensed under the CCPL, Creative Commons does not authorize
+the use by either party of the trademark "Creative Commons" or any related trademark
+or logo of Creative Commons without the prior written consent of Creative Commons.
+Any permitted use will be in compliance with Creative Commons'
+then-current trademark usage guidelines, as may be published on its website
+or otherwise made available upon request from time to time.
+For the avoidance of doubt, this trademark restriction does not form part
+of this License.
+
+Creative Commons may be contacted at http://creativecommons.org/.
diff --git a/wearable/tct-behavior-tests/README b/wearable/tct-behavior-tests/README
new file mode 100755 (executable)
index 0000000..0753b7e
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
diff --git a/wearable/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf b/wearable/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf
new file mode 100755 (executable)
index 0000000..64b5e41
Binary files /dev/null and b/wearable/tct-behavior-tests/Web_TCT_2.3_Behavior_Test_Tool_User_Guide_v1.0.pdf differ
diff --git a/wearable/tct-behavior-tests/askpolicy.sh b/wearable/tct-behavior-tests/askpolicy.sh
new file mode 100755 (executable)
index 0000000..1c39bdd
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+PATH=/bin:/usr/bin:/sbin:/usr/sbin
+for i in `grep -r "0xA" /var/cynara/db/_ | grep $1`
+do
+    CLIENT=`echo $i | cut -d ";" -f1`
+    USER=`echo $i | cut -d ";" -f2`
+    PRIVILEGE=`echo $i | cut -d ";" -f3`
+    #echo "cyad --erase=\"\" -r=no -c $CLIENT -u $USER -p $PRIVILEGE"
+    cyad --erase="" -r=no -c $CLIENT -u $USER -p $PRIVILEGE
+done
diff --git a/wearable/tct-behavior-tests/config.xml b/wearable/tct-behavior-tests/config.xml
new file mode 100755 (executable)
index 0000000..0f3fe00
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<widget xmlns="http://www.w3.org/ns/widgets" xmlns:tizen="http://tizen.org/ns/widgets" id="http://tizen.org/test/tct-behavior-tests" version="3.0" viewmodes="">
+    <access origin="*"/>
+    <tizen:application id="tctbhtests.TCTBehaviorTests" package="tctbhtests" required_version="3.0"/>
+    <icon src="icon.png" height="117" width="117"/>
+    <name>tct-behavior-tests</name>
+    <tizen:privilege name="http://tizen.org/privilege/location"/>
+    <tizen:privilege name="http://tizen.org/privilege/mediacapture"/>
+    <tizen:privilege name="http://tizen.org/privilege/alarm"/>
+    <tizen:privilege name="http://tizen.org/privilege/application.launch"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/content.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.read"/>
+    <tizen:privilege name="http://tizen.org/privilege/filesystem.write"/>
+    <tizen:privilege name="http://tizen.org/privilege/power"/>
+    <tizen:privilege name="http://tizen.org/privilege/system"/>
+    
+    <tizen:privilege name="http://tizen.org/privilege/package.info"/>
+    <tizen:privilege name="http://tizen.org/privilege/packagemanager.install"/>
+    <tizen:privilege name="http://tizen.org/privilege/setting"/>
+    <tizen:privilege name="http://tizen.org/privilege/telephony"/>
+    <tizen:setting context-menu="disable" background-support="disable" encryption="disable" install-location="auto"/>
+</widget>
diff --git a/wearable/tct-behavior-tests/css/images/COPYING b/wearable/tct-behavior-tests/css/images/COPYING
new file mode 100755 (executable)
index 0000000..ae807ae
--- /dev/null
@@ -0,0 +1,18 @@
+------------------------------------------------------------------------------------------
+ajax-loader.gif
+icons-18-black.png
+icons-18-white.png
+icons-36-black.png
+icons-36-white.png
+
+These files come from
+https://github.com/jquery/jquery-mobile/tree/1.2-stable/css/themes/default/images
+without any modification.
+
+They are licensed under the jQuery Mobile (https://jquery.org/license/) [MIT license]
+
+------------------------------------------------------------------------------------------
+fail.png
+pass.png
+
+These files are created by Intel test developers under 3-Clause BSD License.
diff --git a/wearable/tct-behavior-tests/css/images/ajax-loader.gif b/wearable/tct-behavior-tests/css/images/ajax-loader.gif
new file mode 100755 (executable)
index 0000000..fd1a189
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/ajax-loader.gif differ
diff --git a/wearable/tct-behavior-tests/css/images/fail.png b/wearable/tct-behavior-tests/css/images/fail.png
new file mode 100755 (executable)
index 0000000..fa6a888
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/fail.png differ
diff --git a/wearable/tct-behavior-tests/css/images/icons-18-black.png b/wearable/tct-behavior-tests/css/images/icons-18-black.png
new file mode 100755 (executable)
index 0000000..ce1b758
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/icons-18-black.png differ
diff --git a/wearable/tct-behavior-tests/css/images/icons-18-white.png b/wearable/tct-behavior-tests/css/images/icons-18-white.png
new file mode 100755 (executable)
index 0000000..1ab0127
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/icons-18-white.png differ
diff --git a/wearable/tct-behavior-tests/css/images/icons-36-black.png b/wearable/tct-behavior-tests/css/images/icons-36-black.png
new file mode 100755 (executable)
index 0000000..1a59d7c
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/icons-36-black.png differ
diff --git a/wearable/tct-behavior-tests/css/images/icons-36-white.png b/wearable/tct-behavior-tests/css/images/icons-36-white.png
new file mode 100755 (executable)
index 0000000..5647bdc
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/icons-36-white.png differ
diff --git a/wearable/tct-behavior-tests/css/images/pass.png b/wearable/tct-behavior-tests/css/images/pass.png
new file mode 100755 (executable)
index 0000000..e215f83
Binary files /dev/null and b/wearable/tct-behavior-tests/css/images/pass.png differ
diff --git a/wearable/tct-behavior-tests/css/jquery.mobile.css b/wearable/tct-behavior-tests/css/jquery.mobile.css
new file mode 100755 (executable)
index 0000000..3773a21
--- /dev/null
@@ -0,0 +1,2609 @@
+/*
+* jQuery Mobile Framework Git Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700
+* http://jquerymobile.com
+*
+* Copyright 2012 jQuery Foundation and other contributors
+* Released under the MIT license.
+* http://jquery.org/license
+*
+*/
+
+
+/* Swatches */
+/* A
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-a {
+       border: 1px solid               #333 /*{a-bar-border}*/;
+       background:                     #111 /*{a-bar-background-color}*/;
+       color:                                  #fff /*{a-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000 /*{a-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/);
+}
+.ui-bar-a,
+.ui-bar-a input,
+.ui-bar-a select,
+.ui-bar-a textarea,
+.ui-bar-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-a .ui-link-inherit {
+       color: #fff /*{a-bar-color}*/;
+}
+.ui-bar-a a.ui-link {
+       color: #7cc4e7 /*{a-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-a a.ui-link:visited {
+    color: #2489ce /*{a-bar-link-visited}*/;
+}
+.ui-bar-a a.ui-link:hover {
+       color: #2489ce /*{a-bar-link-hover}*/;
+}
+.ui-bar-a a.ui-link:active {
+       color: #2489ce /*{a-bar-link-active}*/;
+}
+.ui-body-a,
+.ui-overlay-a {
+       border: 1px solid               #444 /*{a-body-border}*/;
+       background:                     #222 /*{a-body-background-color}*/;
+       color:                                  #fff /*{a-body-color}*/;
+       text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/);       
+}
+.ui-overlay-a {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-a,
+.ui-body-a input,
+.ui-body-a select,
+.ui-body-a textarea,
+.ui-body-a button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-a .ui-link-inherit {
+       color:  #fff /*{a-body-color}*/;
+}
+.ui-body-a .ui-link {
+       color: #2489ce /*{a-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-a .ui-link:visited {
+    color: #2489ce /*{a-body-link-visited}*/;
+}
+.ui-body-a .ui-link:hover {
+       color: #2489ce /*{a-body-link-hover}*/;
+}
+.ui-body-a .ui-link:active {
+       color: #2489ce /*{a-body-link-active}*/;
+}
+.ui-btn-up-a {
+       border: 1px solid               #111 /*{a-bup-border}*/;
+       background:                     #333 /*{a-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bup-color}*/;
+       text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/);
+}
+.ui-btn-up-a:visited,
+.ui-btn-up-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bup-color}*/;
+}
+.ui-btn-hover-a {
+       border: 1px solid               #000 /*{a-bhover-border}*/;
+       background:                     #444 /*{a-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bhover-color}*/;
+       text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/);
+}
+.ui-btn-hover-a:visited,
+.ui-btn-hover-a:hover,
+.ui-btn-hover-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bhover-color}*/;
+}
+.ui-btn-down-a {
+       border: 1px solid               #000 /*{a-bdown-border}*/;
+       background:                     #222 /*{a-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{a-bdown-color}*/;
+       text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/);
+}
+.ui-btn-down-a:visited,
+.ui-btn-down-a:hover,
+.ui-btn-down-a a.ui-link-inherit {
+       color:                                  #fff /*{a-bdown-color}*/;
+}
+.ui-btn-up-a,
+.ui-btn-hover-a,
+.ui-btn-down-a {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* B
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-b {
+       border: 1px solid               #456f9a /*{b-bar-border}*/;
+       background:                     #5e87b0 /*{b-bar-background-color}*/;
+       color:                                  #fff /*{b-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/);
+}
+.ui-bar-b,
+.ui-bar-b input,
+.ui-bar-b select,
+.ui-bar-b textarea,
+.ui-bar-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-b .ui-link-inherit {
+       color:  #fff /*{b-bar-color}*/;
+}
+.ui-bar-b a.ui-link {
+       color: #ddf0f8 /*{b-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-b a.ui-link:visited {
+    color: #ddf0f8 /*{b-bar-link-visited}*/;
+}
+.ui-bar-b a.ui-link:hover {
+       color: #ddf0f8 /*{b-bar-link-hover}*/;
+}
+.ui-bar-b a.ui-link:active {
+       color: #ddf0f8 /*{b-bar-link-active}*/;
+}
+.ui-body-b,
+.ui-overlay-b {
+       border: 1px solid               #999 /*{b-body-border}*/;
+       background:                     #f3f3f3 /*{b-body-background-color}*/;
+       color:                                  #222 /*{b-body-color}*/;
+       text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/;
+       font-weight: normal;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/);
+}
+.ui-overlay-b {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-b,
+.ui-body-b input,
+.ui-body-b select,
+.ui-body-b textarea,
+.ui-body-b button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-b .ui-link-inherit {
+       color:  #333 /*{b-body-color}*/;
+}
+.ui-body-b .ui-link {
+       color: #2489ce /*{b-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-b .ui-link:visited {
+    color: #2489ce /*{b-body-link-visited}*/;
+}
+.ui-body-b .ui-link:hover {
+       color: #2489ce /*{b-body-link-hover}*/;
+}
+.ui-body-b .ui-link:active {
+       color: #2489ce /*{b-body-link-active}*/;
+}
+.ui-btn-up-b {
+       border: 1px solid               #044062 /*{b-bup-border}*/;
+       background:                     #396b9e /*{b-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bup-color}*/;
+       text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/);
+}
+.ui-btn-up-b:visited,
+.ui-btn-up-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bup-color}*/;
+}
+.ui-btn-hover-b {
+       border: 1px solid               #00415e /*{b-bhover-border}*/;
+       background:                     #4b88b6 /*{b-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bhover-color}*/;
+       text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/);
+}
+.ui-btn-hover-b:visited,
+.ui-btn-hover-b:hover,
+.ui-btn-hover-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bhover-color}*/;
+}
+.ui-btn-down-b {
+       border: 1px solid               #225377 /*{b-bdown-border}*/;
+       background:                     #4e89c5 /*{b-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{b-bdown-color}*/;
+       text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/);
+}
+.ui-btn-down-b:visited,
+.ui-btn-down-b:hover,
+.ui-btn-down-b a.ui-link-inherit {
+       color:                                  #fff /*{b-bdown-color}*/;
+}
+.ui-btn-up-b,
+.ui-btn-hover-b,
+.ui-btn-down-b {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* C
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-c {
+       border: 1px solid               #b3b3b3 /*{c-bar-border}*/;
+       background:                     #eee /*{c-bar-background-color}*/;
+       color:                                  #3e3e3e /*{c-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/      #fff /*{c-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/);
+}
+.ui-bar-c .ui-link-inherit {
+       color:  #3e3e3e /*{c-bar-color}*/;
+}
+.ui-bar-c a.ui-link {
+       color: #7cc4e7 /*{c-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-c a.ui-link:visited {
+    color: #2489ce /*{c-bar-link-visited}*/;
+}
+.ui-bar-c a.ui-link:hover {
+       color: #2489ce /*{c-bar-link-hover}*/;
+}
+.ui-bar-c a.ui-link:active {
+       color: #2489ce /*{c-bar-link-active}*/;
+}
+.ui-bar-c,
+.ui-bar-c input,
+.ui-bar-c select,
+.ui-bar-c textarea,
+.ui-bar-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c,
+.ui-overlay-c {
+       border: 1px solid               #aaa /*{c-body-border}*/;
+       color:                                  #333 /*{c-body-color}*/;
+       text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/;
+       background:                     #f9f9f9 /*{c-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eee /*{c-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eee /*{c-body-background-end}*/);
+}
+.ui-overlay-c {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-c,
+.ui-body-c input,
+.ui-body-c select,
+.ui-body-c textarea,
+.ui-body-c button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-c .ui-link-inherit {
+       color:  #333 /*{c-body-color}*/;
+}
+.ui-body-c .ui-link {
+       color: #2489ce /*{c-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-c .ui-link:visited {
+    color: #2489ce /*{c-body-link-visited}*/;
+}
+.ui-body-c .ui-link:hover {
+       color: #2489ce /*{c-body-link-hover}*/;
+}
+.ui-body-c .ui-link:active {
+       color: #2489ce /*{c-body-link-active}*/;
+}
+.ui-btn-up-c {
+       border: 1px solid               #ccc /*{c-bup-border}*/;
+       background:                     #eee /*{c-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bup-color}*/;
+       text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #fff /*{c-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/);
+}
+.ui-btn-up-c:visited,
+.ui-btn-up-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bup-color}*/;
+}
+.ui-btn-hover-c {
+       border: 1px solid               #bbb /*{c-bhover-border}*/;
+       background:                     #dfdfdf /*{c-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bhover-color}*/;
+       text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #fff /*{c-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/);
+}
+.ui-btn-hover-c:visited,
+.ui-btn-hover-c:hover,
+.ui-btn-hover-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bhover-color}*/;
+}
+.ui-btn-down-c {
+       border: 1px solid               #bbb /*{c-bdown-border}*/;
+       background:                     #d6d6d6 /*{c-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{c-bdown-color}*/;
+       text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #fff /*{c-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/);
+}
+.ui-btn-down-c:visited,
+.ui-btn-down-c:hover,
+.ui-btn-down-c a.ui-link-inherit {
+       color:                                  #2f3e46 /*{c-bdown-color}*/;
+}
+.ui-btn-up-c,
+.ui-btn-hover-c,
+.ui-btn-down-c {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* D
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-d {
+       border: 1px solid               #bbb /*{d-bar-border}*/;
+       background:                     #bbb /*{d-bar-background-color}*/;
+       color:                                  #333 /*{d-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/);
+}
+.ui-bar-d,
+.ui-bar-d input,
+.ui-bar-d select,
+.ui-bar-d textarea,
+.ui-bar-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-d .ui-link-inherit {
+       color:  #333 /*{d-bar-color}*/;
+}
+.ui-bar-d a.ui-link {
+       color: #2489ce /*{d-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-d a.ui-link:visited {
+    color: #2489ce /*{d-bar-link-visited}*/;
+}
+.ui-bar-d a.ui-link:hover {
+       color: #2489ce /*{d-bar-link-hover}*/;
+}
+.ui-bar-d a.ui-link:active {
+       color: #2489ce /*{d-bar-link-active}*/;
+}
+.ui-body-d,
+.ui-overlay-d {
+       border: 1px solid               #bbb /*{d-body-border}*/;
+       color:                                  #333 /*{d-body-color}*/;
+       text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/     #fff /*{d-body-shadow-color}*/;
+       background:                     #fff /*{d-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff /*{d-body-background-start}*/), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/);
+}
+.ui-overlay-d {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-d,
+.ui-body-d input,
+.ui-body-d select,
+.ui-body-d textarea,
+.ui-body-d button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-d .ui-link-inherit {
+       color:  #333 /*{d-body-color}*/;
+}
+.ui-body-d .ui-link {
+       color: #2489ce /*{d-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-d .ui-link:visited {
+    color: #2489ce /*{d-body-link-visited}*/;
+}
+.ui-body-d .ui-link:hover {
+       color: #2489ce /*{d-body-link-hover}*/;
+}
+.ui-body-d .ui-link:active {
+       color: #2489ce /*{d-body-link-active}*/;
+}
+.ui-btn-up-d {
+       border: 1px solid               #bbb /*{d-bup-border}*/;
+       background:                     #fff /*{d-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bup-color}*/;
+       text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa /*{d-bup-background-start}*/), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/);
+}
+.ui-btn-up-d:visited,
+.ui-btn-up-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bup-color}*/;
+}
+.ui-btn-hover-d {
+       border: 1px solid               #aaa /*{d-bhover-border}*/;
+       background:                     #eee /*{d-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bhover-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/       #fff /*{d-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #eee /*{d-bhover-background-start}*/), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/);
+}
+.ui-btn-hover-d:visited,
+.ui-btn-hover-d:hover,
+.ui-btn-hover-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bhover-color}*/;
+}
+.ui-btn-down-d {
+       border: 1px solid               #aaa /*{d-bdown-border}*/;
+       background:                     #eee /*{d-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #333 /*{d-bdown-color}*/;
+       text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/  #fff /*{d-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/);
+}
+.ui-btn-down-d:visited,
+.ui-btn-down-d:hover,
+.ui-btn-down-d a.ui-link-inherit {
+       color:                                  #333 /*{d-bdown-color}*/;
+}
+.ui-btn-up-d,
+.ui-btn-hover-d,
+.ui-btn-down-d {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* E
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-e {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-e,
+.ui-bar-e input,
+.ui-bar-e select,
+.ui-bar-e textarea,
+.ui-bar-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-e .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-e a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-e a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-e a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-e a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-e,
+.ui-overlay-e {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-e {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-e,
+.ui-body-e input,
+.ui-body-e select,
+.ui-body-e textarea,
+.ui-body-e button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-e .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-e .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-e .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-e .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-e .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-e {
+       border: 1px solid               #f4c63f /*{e-bup-border}*/;
+       background:                     #fadb4e /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/);
+}
+.ui-btn-up-e:visited,
+.ui-btn-up-e a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-e {
+       border: 1px solid               #f2c43d /*{e-bhover-border}*/;
+       background:                     #fbe26f /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-e:visited,
+.ui-btn-hover-e:hover,
+.ui-btn-hover-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-e {
+       border: 1px solid               #f2c43d /*{e-bdown-border}*/;
+       background:                     #fceda7 /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-e:visited,
+.ui-btn-down-e:hover,
+.ui-btn-down-e a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-e,
+.ui-btn-hover-e,
+.ui-btn-down-e {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* r
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-r {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-r,
+.ui-bar-r input,
+.ui-bar-r select,
+.ui-bar-r textarea,
+.ui-bar-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-r .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-r a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-r a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-r a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-r a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-r,
+.ui-overlay-r {
+       border: 1px solid               #f7c942 /*{e-body-border}*/;
+       color:                                  #222 /*{e-body-color}*/;
+       text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+       background:                     #fff9df /*{e-body-background-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+}
+.ui-overlay-r {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-r,
+.ui-body-r input,
+.ui-body-r select,
+.ui-body-r textarea,
+.ui-body-r button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-r .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-r .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-r .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-r .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-r .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bup-border}*/;
+       background:                     rgb(241, 163, 150) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bup-background-start}*/), rgb(241, 163, 150) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bup-background-start}*/, rgb(241, 163, 150) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-r:visited,
+.ui-btn-up-r a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-r {
+       border: 1px solid               rgb(245, 219, 196) /*{e-bhover-border}*/;
+       background:                     rgb(245, 219, 196) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(245, 219, 196) /*{e-bhover-background-start}*/), to( rgb(241, 163, 150) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(245, 219, 196) /*{e-bhover-background-start}*/, rgb(241, 163, 150) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-r:visited,
+.ui-btn-hover-r:hover,
+.ui-btn-hover-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-r {
+       border: 1px solid               rgb(250, 230, 220) /*{e-bdown-border}*/;
+       background:                     rgb(250, 230, 220) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(250, 230, 220) /*{e-bdown-background-start}*/), to( rgb(241, 163, 150) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(250, 230, 220) /*{e-bdown-background-start}*/, rgb(241, 163, 150) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-r:visited,
+.ui-btn-down-r:hover,
+.ui-btn-down-r a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-r,
+.ui-btn-hover-r,
+.ui-btn-down-r {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+/* g
+-----------------------------------------------------------------------------------------------------------*/
+.ui-bar-g {
+       border: 1px solid               #f7c942 /*{e-bar-border}*/;
+       background:                     #fadb4e /*{e-bar-background-color}*/;
+       color:                                  #333 /*{e-bar-color}*/;
+       font-weight: bold;
+       text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/        #fff /*{e-bar-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/);
+}
+.ui-bar-g,
+.ui-bar-g input,
+.ui-bar-g select,
+.ui-bar-g textarea,
+.ui-bar-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-bar-g .ui-link-inherit {
+       color:  #333 /*{e-bar-color}*/;
+}
+.ui-bar-g a.ui-link {
+       color: #2489ce /*{e-bar-link-color}*/;
+       font-weight: bold;
+}
+.ui-bar-g a.ui-link:visited {
+    color: #2489ce /*{e-bar-link-visited}*/;
+}
+.ui-bar-g a.ui-link:hover {
+       color: #2489ce /*{e-bar-link-hover}*/;
+}
+.ui-bar-g a.ui-link:active {
+       color: #2489ce /*{e-bar-link-active}*/;
+}
+.ui-body-g,
+.ui-overlay-g {
+        border: 1px solid               #f7c942 /*{e-body-border}*/;
+        color:                                  #222 /*{e-body-color}*/;
+        text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/     #fff /*{e-body-shadow-color}*/;
+        background:                     #fff9df /*{e-body-background-color}*/;
+        background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */
+        background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */
+        background-image:    -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */
+        background-image:     -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */
+        background-image:      -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */
+        background-image:         linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/);
+       //background-image:         linear-gradient( rgb(253, 102, 127) /*{e-body-background-start}*/, rgb(189, 215, 175) /*{e-body-background-end}*/);
+}
+.ui-overlay-g {
+       background-image: none;
+       border-width: 0;
+}
+.ui-body-g,
+.ui-body-g input,
+.ui-body-g select,
+.ui-body-g textarea,
+.ui-body-g button {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-body-g .ui-link-inherit {
+       color:  #222 /*{e-body-color}*/;
+}
+.ui-body-g .ui-link {
+       color: #2489ce /*{e-body-link-color}*/;
+       font-weight: bold;
+}
+.ui-body-g .ui-link:visited {
+    color: #2489ce /*{e-body-link-visited}*/;
+}
+.ui-body-g .ui-link:hover {
+       color: #2489ce /*{e-body-link-hover}*/;
+}
+.ui-body-g .ui-link:active {
+       color: #2489ce /*{e-body-link-active}*/;
+}
+.ui-btn-up-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bup-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bup-background-color}*/;
+       font-weight: bold;
+       color:                                  #222 /*{e-bup-color}*/;
+       text-shadow: 0 /*{e-bup-shadow-x}*/ 0px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/        #fff /*{e-bup-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bup-background-start}*/), to( rgb(99, 220, 179) /*{e-bup-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bup-background-start}*/, rgb(99, 220, 179) /*{e-bup-background-end}*/);
+}
+.ui-btn-up-g:visited,
+.ui-btn-up-g a.ui-link-inherit {
+       color:                                  #222 /*{e-bup-color}*/;
+}
+.ui-btn-hover-g {
+       border: 1px solid               rgb(220, 250, 220) /*{e-bhover-border}*/;
+       background:                     rgb(220, 250, 220) /*{e-bhover-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bhover-color}*/;
+       text-shadow: 0 /*{e-bhover-shadow-x}*/ 0px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/       #fff /*{e-bhover-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 220) /*{e-bhover-background-start}*/), to( rgb(99, 220, 179) /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 220) /*{e-bhover-background-start}*/, rgb(99, 220, 179) /*{e-bhover-background-end}*/);
+}
+.ui-btn-hover-g:visited,
+.ui-btn-hover-g:hover,
+.ui-btn-hover-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bhover-color}*/;
+}
+.ui-btn-down-g {
+       border: 1px solid               rgb(220, 250, 250) /*{e-bdown-border}*/;
+       background:                     rgb(220, 250, 250) /*{e-bdown-background-color}*/;
+       font-weight: bold;
+       color:                                  #111 /*{e-bdown-color}*/;
+       text-shadow: 0 /*{e-bdown-shadow-x}*/ 0px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/  #fff /*{e-bdown-shadow-color}*/;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( rgb(220, 250, 250) /*{e-bdown-background-start}*/), to( rgb(99, 220, 179) /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( rgb(220, 250, 250) /*{e-bdown-background-start}*/, rgb(99, 220, 179) /*{e-bdown-background-end}*/);
+}
+.ui-btn-down-g:visited,
+.ui-btn-down-g:hover,
+.ui-btn-down-g a.ui-link-inherit {
+       color:                                  #333 /*{e-bdown-color}*/;
+}
+.ui-btn-up-g,
+.ui-btn-hover-g,
+.ui-btn-down-g {
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+       text-decoration: none;
+}
+
+/* Structure */
+/* links within "buttons" 
+-----------------------------------------------------------------------------------------------------------*/
+a.ui-link-inherit {
+       text-decoration: none !important;
+}
+/* Active class used as the "on" state across all themes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-active {
+       border: 1px solid               #2373a5 /*{global-active-border}*/;
+       background:                     #5393c5 /*{global-active-background-color}*/;
+       font-weight: bold;
+       color:                                  #fff /*{global-active-color}*/;
+       cursor: pointer;
+       text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/;
+       text-decoration: none;
+       background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */
+       background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */
+       background-image:    -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */
+       background-image:     -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */
+       background-image:      -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */
+       background-image:         linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/);
+       font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/;
+}
+.ui-btn-active:visited,
+.ui-btn-active:hover,
+.ui-btn-active a.ui-link-inherit {
+       color:                                  #fff /*{global-active-color}*/;
+}
+/* button inner top highlight
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-inner {
+       border-top: 1px solid   #fff;
+       border-color:                   rgba(255,255,255,.3);
+}
+/* corner rounding classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-corner-tl {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-tr {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bl {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-br {
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-top {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-bottom {
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+       }
+.ui-corner-right {
+       -moz-border-radius-topright:            .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-right-radius:        .6em /*{global-radii-blocks}*/;
+       border-top-right-radius:                        .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomright:         .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/;
+       border-bottom-right-radius:             .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-left {
+       -moz-border-radius-topleft:             .6em /*{global-radii-blocks}*/;
+       -webkit-border-top-left-radius:         .6em /*{global-radii-blocks}*/;
+       border-top-left-radius:                         .6em /*{global-radii-blocks}*/;
+       -moz-border-radius-bottomleft:          .6em /*{global-radii-blocks}*/;
+       -webkit-border-bottom-left-radius:      .6em /*{global-radii-blocks}*/;
+       border-bottom-left-radius:                      .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-all {
+       -moz-border-radius:                             .6em /*{global-radii-blocks}*/;
+       -webkit-border-radius:                          .6em /*{global-radii-blocks}*/;
+       border-radius:                                          .6em /*{global-radii-blocks}*/;
+}
+.ui-corner-none {
+       -moz-border-radius:                                0;
+       -webkit-border-radius:                             0;
+       border-radius:                                             0;
+}
+/* Form field separator
+-----------------------------------------------------------------------------------------------------------*/
+.ui-br {
+       border-bottom: rgb(130,130,130);
+       border-bottom: rgba(130,130,130,.3);
+       border-bottom-width: 1px;
+       border-bottom-style: solid;
+}
+/* Interaction cues
+-----------------------------------------------------------------------------------------------------------*/
+.ui-disabled {
+       filter: Alpha(Opacity=30);
+       opacity: .3;
+       zoom: 1;
+}
+.ui-disabled,
+.ui-disabled a {
+       cursor: default !important;
+       pointer-events: none;
+}
+/* Icons
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon,
+.ui-icon-searchfield:after {
+       background:                                             #666 /*{global-icon-color}*/;
+       background:                                             rgba(0,0,0,.4) /*{global-icon-disc}*/;
+       background-image: url(images/icons-18-white.png) /*{global-icon-set}*/;
+       background-repeat: no-repeat;
+       -moz-border-radius:                             9px;
+       -webkit-border-radius:                          9px;
+       border-radius:                                          9px;
+}
+/* Alt icon color
+-----------------------------------------------------------------------------------------------------------*/
+.ui-icon-alt {
+       background:                                             #fff;
+       background:                                             rgba(255,255,255,.3);
+       background-image: url(images/icons-18-black.png);
+       background-repeat: no-repeat;
+}
+/* HD/"retina" sprite
+-----------------------------------------------------------------------------------------------------------*/
+@media only screen and (-webkit-min-device-pixel-ratio: 1.5),
+       only screen and (min--moz-device-pixel-ratio: 1.5),
+       only screen and (min-resolution: 240dpi) {
+       
+       .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r,
+       .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check,
+       .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back,
+       .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, 
+       .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on {
+               background-image: url(images/icons-36-white.png);
+               -moz-background-size: 776px 18px;
+               -o-background-size: 776px 18px;
+               -webkit-background-size: 776px 18px;
+               background-size: 776px 18px;
+       }
+       .ui-icon-alt {
+               background-image: url(images/icons-36-black.png);
+       }
+}
+/* plus minus */
+.ui-icon-plus {
+       background-position:    -0 50%;
+}
+.ui-icon-minus {
+       background-position:    -36px 50%;
+}
+/* delete/close */
+.ui-icon-delete {
+       background-position:    -72px 50%;
+}
+/* arrows */
+.ui-icon-arrow-r {
+       background-position:    -108px 50%;
+}
+.ui-icon-arrow-l {
+       background-position:    -144px 50%;
+}
+.ui-icon-arrow-u {
+       background-position:    -180px 50%;
+}
+.ui-icon-arrow-d {
+       background-position:    -216px 50%;
+}
+/* misc */
+.ui-icon-check {
+       background-position:    -252px 50%;
+}
+.ui-icon-gear {
+       background-position:    -288px 50%;
+}
+.ui-icon-refresh {
+       background-position:    -324px 50%;
+}
+.ui-icon-forward {
+       background-position:    -360px 50%;
+}
+.ui-icon-back {
+       background-position:    -396px 50%;
+}
+.ui-icon-grid {
+       background-position:    -432px 50%;
+}
+.ui-icon-star {
+       background-position:    -468px 50%;
+}
+.ui-icon-alert {
+       background-position:    -504px 50%;
+}
+.ui-icon-info {
+       background-position:    -540px 50%;
+}
+.ui-icon-home {
+       background-position:    -576px 50%;
+}
+.ui-icon-search,
+.ui-icon-searchfield:after {
+       background-position:    -612px 50%;
+}
+.ui-icon-checkbox-off {
+       background-position:    -684px 50%;
+}
+.ui-icon-checkbox-on {
+       background-position:    -648px 50%;
+}
+.ui-icon-radio-off {
+       background-position:    -756px 50%;
+}
+.ui-icon-radio-on {
+       background-position:    -720px 50%;
+}
+/* checks,radios */
+.ui-checkbox .ui-icon,
+.ui-selectmenu-list .ui-icon {
+       -moz-border-radius: 3px;
+       -webkit-border-radius: 3px;
+       border-radius: 3px;
+}
+.ui-icon-checkbox-off,
+.ui-icon-radio-off {
+       background-color: transparent;  
+}
+.ui-checkbox-on .ui-icon,
+.ui-radio-on .ui-icon {
+       background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */
+}
+/* loading icon */
+.ui-icon-loading {
+       background: url(images/ajax-loader.gif);
+       background-size: 46px 46px;
+}
+/* Button corner classes
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn-corner-tl {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-tr {
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bl {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-br {
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-top {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-topright:            1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-bottom {
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-right {
+        -moz-border-radius-topright:           1em /*{global-radii-buttons}*/;
+       -webkit-border-top-right-radius:        1em /*{global-radii-buttons}*/;
+       border-top-right-radius:                        1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomright:         1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/;
+       border-bottom-right-radius:             1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-left {
+       -moz-border-radius-topleft:             1em /*{global-radii-buttons}*/;
+       -webkit-border-top-left-radius:         1em /*{global-radii-buttons}*/;
+       border-top-left-radius:                         1em /*{global-radii-buttons}*/;
+       -moz-border-radius-bottomleft:          1em /*{global-radii-buttons}*/;
+       -webkit-border-bottom-left-radius:      1em /*{global-radii-buttons}*/;
+       border-bottom-left-radius:                      1em /*{global-radii-buttons}*/;
+}
+.ui-btn-corner-all {
+       -moz-border-radius:                             1em /*{global-radii-buttons}*/;
+       -webkit-border-radius:                          1em /*{global-radii-buttons}*/;
+       border-radius:                                          1em /*{global-radii-buttons}*/;
+}
+/* radius clip workaround for cleaning up corner trapping */
+.ui-corner-tl,
+.ui-corner-tr,
+.ui-corner-bl,
+.ui-corner-br,
+.ui-corner-top,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-left,
+.ui-corner-all,
+.ui-btn-corner-tl,
+.ui-btn-corner-tr,
+.ui-btn-corner-bl,
+.ui-btn-corner-br,
+.ui-btn-corner-top,
+.ui-btn-corner-bottom,
+.ui-btn-corner-right,
+.ui-btn-corner-left,
+.ui-btn-corner-all {
+  -webkit-background-clip: padding-box;
+     -moz-background-clip: padding;
+          background-clip: padding-box;
+}
+/* Overlay / modal
+-----------------------------------------------------------------------------------------------------------*/
+.ui-overlay {
+       background: #666;
+       filter: Alpha(Opacity=50);
+       opacity: .5;
+       position: absolute;
+       width: 100%;
+       height: 100%;
+}
+.ui-overlay-shadow {
+       -moz-box-shadow: 0px 0px 12px                   rgba(0,0,0,.6);
+       -webkit-box-shadow: 0px 0px 12px                rgba(0,0,0,.6);
+       box-shadow: 0px 0px 12px                                rgba(0,0,0,.6);
+}
+.ui-shadow {
+       -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                       rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+       box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/                            rgba(0,0,0,.3) /*{global-box-shadow-color}*/;
+}
+.ui-bar-a .ui-shadow,
+.ui-bar-b .ui-shadow ,
+.ui-bar-c .ui-shadow  {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.3);
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.3);
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.3);
+}
+.ui-shadow-inset {
+       -moz-box-shadow: inset 0px 1px 4px              rgba(0,0,0,.2);
+       -webkit-box-shadow: inset 0px 1px 4px   rgba(0,0,0,.2);
+       box-shadow: inset 0px 1px 4px                   rgba(0,0,0,.2);
+}
+.ui-icon-shadow {
+       -moz-box-shadow: 0px 1px 0                              rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       -webkit-box-shadow: 0px 1px 0                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+       box-shadow: 0px 1px 0                                   rgba(255,255,255,.4) /*{global-icon-shadow}*/;
+}
+/* Focus state - set here for specificity (note: these classes are added by JavaScript)
+-----------------------------------------------------------------------------------------------------------*/
+.ui-btn:focus, .ui-link-inherit:focus {
+       outline: 0;
+}
+.ui-btn.ui-focus {
+       z-index: 1;
+}
+.ui-focus,
+.ui-btn:focus {
+       -moz-box-shadow: inset 0px 0px 3px              #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: inset 0px 0px 3px   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+       box-shadow: inset 0px 0px 3px                   #387bbe /*{global-active-background-color}*/, 0px 0px 9px               #387bbe /*{global-active-background-color}*/;
+}
+.ui-input-text.ui-focus,
+.ui-input-search.ui-focus {
+       -moz-box-shadow: 0px 0px 12px                   #387bbe /*{global-active-background-color}*/;
+       -webkit-box-shadow: 0px 0px 12px                #387bbe /*{global-active-background-color}*/;
+       box-shadow: 0px 0px 12px                                        #387bbe /*{global-active-background-color}*/;   
+}
+/* unset box shadow in browsers that don't do it right
+-----------------------------------------------------------------------------------------------------------*/
+.ui-mobile-nosupport-boxshadow * {
+       -moz-box-shadow: none !important;
+       -webkit-box-shadow: none !important;
+       box-shadow: none !important;
+}
+/* ...and bring back focus */
+.ui-mobile-nosupport-boxshadow .ui-focus,
+.ui-mobile-nosupport-boxshadow .ui-btn:focus,
+.ui-mobile-nosupport-boxshadow .ui-link-inherit:focus {
+       outline-width: 1px;
+       outline-style: auto;
+}
+/* some unsets - more probably needed */
+.ui-mobile, .ui-mobile body { height: 99.9%; }
+.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; }
+.ui-mobile a img, .ui-mobile fieldset { border-width: 0; }
+/* responsive page widths */
+.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: 100%; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
+/* Issue #2066 */
+body.ui-mobile-viewport,
+div.ui-mobile-viewport { overflow-x: hidden; }
+/* "page" containers - full-screen views, one should always be in view post-pageload */
+.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; }
+.ui-mobile .ui-page-active { display: block; overflow: visible; }
+/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */
+.ui-page { outline: none; }
+/*orientations from js are available */
+@media screen and (orientation: portrait){
+.ui-mobile, .ui-mobile .ui-page { min-height: 420px; }
+}
+@media screen and (orientation: landscape){
+.ui-mobile, .ui-mobile .ui-page { min-height: 300px; }
+}
+/* loading screen */
+.ui-loading .ui-loader { display: block; }
+.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; left: 50%; border:0; }
+.ui-loader-default { background: none; filter: Alpha(Opacity=18); opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; }
+.ui-loader-verbose { width: 200px; filter: Alpha(Opacity=88); opacity: .88; box-shadow: 0 1px 1px -1px #fff; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; }
+.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; }
+.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; }
+.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; }
+.ui-loader-verbose .ui-icon { margin: 0 auto 10px; filter: Alpha(Opacity=75); opacity: .75; }
+.ui-loader-textonly { padding: 15px; margin-left: -115px; }
+.ui-loader-textonly .ui-icon { display: none; }
+.ui-loader-fakefix { position: absolute; }
+/*fouc*/
+.ui-mobile-rendering > * { visibility: hidden; }
+/*headers, content panels*/
+.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; }
+.ui-bar { font-size: 16px; margin: 0; }
+.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; }
+.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; zoom: 1; }
+.ui-header .ui-btn-left,
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-left,
+.ui-footer .ui-btn-right { position: absolute; top: 3px; }
+.ui-header .ui-btn-left,
+.ui-footer .ui-btn-left { left: 5px; }
+.ui-header .ui-btn-right,
+.ui-footer .ui-btn-right { right: 5px; }
+.ui-footer .ui-btn-icon-notext,
+.ui-header .ui-btn-icon-notext { top: 6px; }
+.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; }
+.ui-footer .ui-title { margin: .6em 15px .8em; }
+/*content area*/
+.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; }
+/* icons sizing */
+.ui-icon { width: 18px; height: 18px; }
+/* non-js content hiding */
+.ui-nojs { position: absolute; left: -9999px; }
+/* accessible content hiding */
+.ui-hide-label label.ui-input-text, .ui-hide-label label.ui-select, .ui-hide-label label.ui-slider, .ui-hide-label label.ui-submit, .ui-hide-label .ui-controlgroup-label,
+.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
+/* Transitions originally inspired by those from jQtouch, nice work, folks */
+.ui-mobile-viewport-transitioning,
+.ui-mobile-viewport-transitioning .ui-page {
+       width: 100%;
+       height: 100%;
+       overflow: hidden;
+       -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+       box-sizing: border-box;
+}
+.ui-page-pre-in {
+       opacity: 0;
+}
+.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.out {
+       -webkit-animation-timing-function: ease-in;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-timing-function: ease-in;
+       -moz-animation-duration: 225ms;
+}
+@-webkit-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-moz-keyframes fadein {
+    from { opacity: 0; }
+    to { opacity: 1; }
+}
+@-webkit-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+@-moz-keyframes fadeout {
+    from { opacity: 1; }
+    to { opacity: 0; }
+}
+.fade.out {
+       opacity: 0;
+       -webkit-animation-duration: 125ms;
+       -webkit-animation-name: fadeout;
+       -moz-animation-duration: 125ms;
+       -moz-animation-name: fadeout;
+}
+.fade.in {
+       opacity: 1;
+       -webkit-animation-duration: 225ms;
+       -webkit-animation-name: fadein;
+       -moz-animation-duration: 225ms;
+       -moz-animation-name: fadein;
+}
+.pop {
+       -webkit-transform-origin: 50% 50%;
+       -moz-transform-origin: 50% 50%;
+}
+.pop.in {
+       -webkit-transform: scale(1);
+       -moz-transform: scale(1);
+    opacity: 1;
+       -webkit-animation-name: popin;
+       -moz-animation-name: popin;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-duration: 350ms;
+}
+.pop.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       opacity: 0;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.pop.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+}
+.pop.out.reverse {
+       -webkit-transform: scale(.8);
+       -moz-transform: scale(.8);
+       -webkit-animation-name: popout;
+       -moz-animation-name: popout;
+}
+@-webkit-keyframes popin {
+    from {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-moz-keyframes popin {
+    from {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+    to {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+}
+@-webkit-keyframes popout {
+    from {
+        -webkit-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -webkit-transform: scale(.8);
+        opacity: 0;
+    }
+}
+@-moz-keyframes popout {
+    from {
+        -moz-transform: scale(1);
+        opacity: 1;
+    }
+    to {
+        -moz-transform: scale(.8);
+        opacity: 0;
+    }
+}
+/* keyframes for slidein from sides */
+@-webkit-keyframes slideinfromright {
+    from { -webkit-transform: translateX(100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromright {
+    from { -moz-transform: translateX(100%); }
+    to { -moz-transform: translateX(0); }
+}
+@-webkit-keyframes slideinfromleft {
+    from { -webkit-transform: translateX(-100%); }
+    to { -webkit-transform: translateX(0); }
+}
+@-moz-keyframes slideinfromleft {
+    from { -moz-transform: translateX(-100%); }
+    to { -moz-transform: translateX(0); }
+}
+/* keyframes for slideout to sides */
+@-webkit-keyframes slideouttoleft {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(-100%); }
+}
+@-moz-keyframes slideouttoleft {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(-100%); }
+}
+@-webkit-keyframes slideouttoright {
+    from { -webkit-transform: translateX(0); }
+    to { -webkit-transform: translateX(100%); }
+}
+@-moz-keyframes slideouttoright {
+    from { -moz-transform: translateX(0); }
+    to { -moz-transform: translateX(100%); }
+}
+.slide.out, .slide.in {
+       -webkit-animation-timing-function: ease-out;
+       -webkit-animation-duration: 350ms;
+       -moz-animation-timing-function: ease-out;
+       -moz-animation-duration: 350ms;
+}
+.slide.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+}
+.slide.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromright;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromright;
+}
+.slide.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+}
+.slide.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: slideinfromleft;
+       -moz-transform: translateX(0);
+       -moz-animation-name: slideinfromleft;
+}
+.slidefade.out {
+       -webkit-transform: translateX(-100%);
+       -webkit-animation-name: slideouttoleft;
+       -moz-transform: translateX(-100%);
+       -moz-animation-name: slideouttoleft;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-duration: 225ms;
+}
+.slidefade.in {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: slideouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: slideouttoright;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+.slidefade.in.reverse {
+       -webkit-transform: translateX(0);
+       -webkit-animation-name: fadein;
+       -moz-transform: translateX(0);
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+/* slide down */
+.slidedown.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slidedown.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfromtop;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfromtop;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slidedown.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slidedown.out.reverse {
+       -webkit-transform: translateY(-100%);
+       -moz-transform: translateY(-100%);
+       -webkit-animation-name: slideouttotop;
+       -moz-animation-name: slideouttotop;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfromtop {
+    from { -webkit-transform: translateY(-100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfromtop {
+    from { -moz-transform: translateY(-100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttotop {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(-100%); }
+}
+@-moz-keyframes slideouttotop {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(-100%); }
+}
+/* slide up */
+.slideup.out {
+       -webkit-animation-name: fadeout;
+       -moz-animation-name: fadeout;
+       -webkit-animation-duration: 100ms;
+       -moz-animation-duration: 100ms;
+}
+.slideup.in {
+       -webkit-transform: translateY(0);
+       -webkit-animation-name: slideinfrombottom;
+       -moz-transform: translateY(0);
+       -moz-animation-name: slideinfrombottom;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+}
+.slideup.in.reverse {
+       -webkit-animation-name: fadein;
+       -moz-animation-name: fadein;
+       -webkit-animation-duration: 150ms;
+       -moz-animation-duration: 150ms;
+}
+.slideup.out.reverse {
+       -webkit-transform: translateY(100%);
+       -moz-transform: translateY(100%);
+       -webkit-animation-name: slideouttobottom;
+       -moz-animation-name: slideouttobottom;
+       -webkit-animation-duration: 200ms;
+       -moz-animation-duration: 200ms;
+}
+@-webkit-keyframes slideinfrombottom {
+    from { -webkit-transform: translateY(100%); }
+    to { -webkit-transform: translateY(0); }
+}
+@-moz-keyframes slideinfrombottom {
+    from { -moz-transform: translateY(100%); }
+    to { -moz-transform: translateY(0); }
+}
+@-webkit-keyframes slideouttobottom {
+    from { -webkit-transform: translateY(0); }
+    to { -webkit-transform: translateY(100%); }
+}
+@-moz-keyframes slideouttobottom {
+    from { -moz-transform: translateY(0); }
+    to { -moz-transform: translateY(100%); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-flip {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.flip {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0);
+}
+.flip.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -webkit-animation-duration: 175ms;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -moz-animation-duration: 175ms;
+}
+.flip.in {
+       -webkit-animation-name: flipintoright;
+       -webkit-animation-duration: 225ms;
+       -moz-animation-name: flipintoright;
+       -moz-animation-duration: 225ms;
+}
+.flip.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.flip.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* The properties in this rule are only necessary for the 'flip' transition.
+ * We need specify the perspective to create a projection matrix. This will add
+ * some depth as the element flips. The depth number represents the distance of
+ * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate
+ * value.
+ */
+.viewport-turn {
+       -webkit-perspective: 1000;
+       -moz-perspective: 1000;
+       position: absolute;
+}
+.turn {
+       -webkit-backface-visibility:hidden;
+       -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -webkit-transform-origin: 0;
+       
+       -moz-backface-visibility:hidden;
+       -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */
+       -moz-transform-origin: 0;
+}
+.turn.out {
+       -webkit-transform: rotateY(-90deg) scale(.9);
+       -webkit-animation-name: flipouttoleft;
+       -moz-transform: rotateY(-90deg) scale(.9);
+       -moz-animation-name: flipouttoleft;
+       -webkit-animation-duration: 125ms;
+       -moz-animation-duration: 125ms;
+}
+.turn.in {
+       -webkit-animation-name: flipintoright;
+       -moz-animation-name: flipintoright;
+       -webkit-animation-duration: 250ms;
+       -moz-animation-duration: 250ms;
+       
+}
+.turn.out.reverse {
+       -webkit-transform: rotateY(90deg) scale(.9);
+       -webkit-animation-name: flipouttoright;
+       -moz-transform: rotateY(90deg) scale(.9);
+       -moz-animation-name: flipouttoright;
+}
+.turn.in.reverse {
+       -webkit-animation-name: flipintoleft;
+       -moz-animation-name: flipintoleft;
+}
+@-webkit-keyframes flipouttoleft {
+    from { -webkit-transform: rotateY(0); }
+    to { -webkit-transform: rotateY(-90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoleft {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(-90deg) scale(.9); }
+}
+@-webkit-keyframes flipouttoright {
+    from { -webkit-transform: rotateY(0) ; }
+    to { -webkit-transform: rotateY(90deg) scale(.9); }
+}
+@-moz-keyframes flipouttoright {
+    from { -moz-transform: rotateY(0); }
+    to { -moz-transform: rotateY(90deg) scale(.9); }
+}
+@-webkit-keyframes flipintoleft {
+    from { -webkit-transform: rotateY(-90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoleft {
+    from { -moz-transform: rotateY(-90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+@-webkit-keyframes flipintoright {
+    from { -webkit-transform: rotateY(90deg) scale(.9); }
+    to { -webkit-transform: rotateY(0); }
+}
+@-moz-keyframes flipintoright {
+    from { -moz-transform: rotateY(90deg) scale(.9); }
+    to { -moz-transform: rotateY(0); }
+}
+/* flow transition */
+.flow {
+       -webkit-transform-origin: 50% 30%;
+       -moz-transform-origin: 50% 30%; 
+       -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4);
+       -moz-box-shadow: 0 0 20px rgba(0,0,0,.4);
+}
+.ui-dialog.flow {
+       -webkit-transform-origin: none;
+       -moz-transform-origin: none;    
+       -webkit-box-shadow: none;
+       -moz-box-shadow: none;
+}
+.flow.out {
+       -webkit-transform: translateX(-100%) scale(.7);
+       -webkit-animation-name: flowouttoleft;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(-100%) scale(.7);
+       -moz-animation-name: flowouttoleft;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.in {
+       -webkit-transform: translateX(0) scale(1);
+       -webkit-animation-name: flowinfromright;
+       -webkit-animation-timing-function: ease;
+       -webkit-animation-duration: 350ms;
+       -moz-transform: translateX(0) scale(1);
+       -moz-animation-name: flowinfromright;
+       -moz-animation-timing-function: ease;
+       -moz-animation-duration: 350ms;
+}
+.flow.out.reverse {
+       -webkit-transform: translateX(100%);
+       -webkit-animation-name: flowouttoright;
+       -moz-transform: translateX(100%);
+       -moz-animation-name: flowouttoright;
+}
+.flow.in.reverse {
+       -webkit-animation-name: flowinfromleft;
+       -moz-animation-name: flowinfromleft;
+}
+@-webkit-keyframes flowouttoleft {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(-100%) scale(.7); }
+}
+@-moz-keyframes flowouttoleft {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(-100%) scale(.7); }
+}
+@-webkit-keyframes flowouttoright {
+    0% { -webkit-transform: translateX(0) scale(1); }
+       60%, 70% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform:  translateX(100%) scale(.7); }
+}
+@-moz-keyframes flowouttoright {
+    0% { -moz-transform: translateX(0) scale(1); }
+       60%, 70% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform:  translateX(100%) scale(.7); }
+}
+@-webkit-keyframes flowinfromleft {
+    0% { -webkit-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromleft {
+    0% { -moz-transform: translateX(-100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+@-webkit-keyframes flowinfromright {
+    0% { -webkit-transform: translateX(100%) scale(.7); }
+       30%, 40% { -webkit-transform: translateX(0) scale(.7); }
+    100% { -webkit-transform: translateX(0) scale(1); }
+}
+@-moz-keyframes flowinfromright {
+    0% { -moz-transform: translateX(100%) scale(.7); }
+       30%, 40% { -moz-transform: translateX(0) scale(.7); }
+    100% { -moz-transform: translateX(0) scale(1); }
+}
+/* content configurations. */
+.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; }
+.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height: 1px; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+/* grid solo: 100 - single item fallback */
+.ui-grid-solo .ui-block-a { display: block; float: none; }
+/* Lower percentages for older browsers (i.e. IE7) to prevent wrapping. -.5px to fix BB5 wrap issue. */
+/* grid a: 50/50 */
+.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 49.95%; }
+.ui-grid-a > :nth-child(n) { width: 50%; margin-right: -.5px; }
+.ui-grid-a .ui-block-a { clear: left; }
+/* grid b: 33/33/33 */
+.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.25%; }
+.ui-grid-b > :nth-child(n) { width: 33.333%; margin-right: -.5px; }
+.ui-grid-b .ui-block-a { clear: left; }
+/* grid c: 25/25/25/25 */
+.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 24.925%; }
+.ui-grid-c > :nth-child(n) { width: 25%; margin-right: -.5px; }
+.ui-grid-c .ui-block-a { clear: left; }
+/* grid d: 20/20/20/20/20 */
+.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 19.925%; }
+.ui-grid-d > :nth-child(n) { width: 20%; }
+.ui-grid-d .ui-block-a { clear: left; }
+/* fixed page header & footer configuration */
+.ui-header-fixed,
+.ui-footer-fixed {
+       left: 0;
+       right: 0;
+       width: 100%;
+       position: fixed;
+       z-index: 1000;
+}
+.ui-header-fixed {
+       top: 0;
+}
+.ui-footer-fixed {
+       bottom: 0;
+}
+.ui-header-fullscreen,
+.ui-footer-fullscreen {
+       filter: Alpha(Opacity=90);
+       opacity: .9;
+}
+.ui-page-header-fixed {
+       padding-top: 2.6875em;
+}
+.ui-page-footer-fixed {
+       padding-bottom: 2.6875em;
+}
+.ui-page-header-fullscreen .ui-content,
+.ui-page-footer-fullscreen .ui-content {
+       padding: 0;
+}
+.ui-fixed-hidden {
+       position: absolute;
+}
+.ui-page-header-fullscreen .ui-fixed-hidden,
+.ui-page-footer-fullscreen .ui-fixed-hidden {
+       left: -9999px;
+}
+.ui-header-fixed .ui-btn,
+.ui-footer-fixed .ui-btn { 
+       z-index: 10;
+}
+.ui-navbar { max-width: 100%; }
+.ui-navbar.ui-mini { margin: 0; }
+.ui-navbar ul:before, .ui-navbar ul:after { content: " "; display: table; }
+.ui-navbar ul:after { clear: both; }
+.ui-navbar ul { list-style:none; margin: 0; padding: 0; position: relative; display: block; border: 0; max-width: 100%; overflow: visible; zoom: 1; }
+.ui-navbar li .ui-btn { display: block; text-align: center; margin: 0 -1px 0 0; border-right-width: 0; }
+.ui-navbar li .ui-btn-icon-right .ui-icon { right: 6px; }
+/* add border if not in header/footer (full width) */
+.ui-navbar li:last-child .ui-btn,
+.ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: 0; border-right-width: 1px; }
+.ui-header .ui-navbar li:last-child .ui-btn,
+.ui-footer .ui-navbar li:last-child .ui-btn,
+.ui-header .ui-navbar .ui-grid-duo .ui-block-b .ui-btn,
+.ui-footer .ui-navbar .ui-grid-duo .ui-block-b .ui-btn { margin-right: -1px; border-right-width: 0; }
+.ui-navbar .ui-grid-duo li.ui-block-a:last-child .ui-btn { margin-right: -1px; border-right-width: 1px; }
+.ui-header .ui-navbar li .ui-btn,
+.ui-footer .ui-navbar li .ui-btn { border-top-width: 0; border-bottom-width: 0; }
+/* fixing gaps caused by subpixel problem */
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn { margin-right: -5px; }
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn { margin-right: -4px; }
+.ui-header .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-b li.ui-block-c .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-c li.ui-block-d .ui-btn-icon-right .ui-icon,
+.ui-header .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-navbar .ui-grid-d li.ui-block-e .ui-btn-icon-right .ui-icon { right: 8px; }
+.ui-navbar li .ui-btn .ui-btn-inner { padding-top: .7em; padding-bottom: .8em }
+.ui-navbar li .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-navbar li .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 0; padding: 0; }
+.ui-mini { margin-top: .25em; margin-bottom: .25em; }
+.ui-btn-left, .ui-btn-right, .ui-input-clear, .ui-btn-inline,
+.ui-grid-a .ui-btn, .ui-grid-b .ui-btn, .ui-grid-c .ui-btn, .ui-grid-d .ui-btn, .ui-grid-e .ui-btn, .ui-grid-solo .ui-btn { margin-right: 5px; margin-left: 5px; }
+.ui-btn-inner { font-size: 16px; padding: .6em 20px; min-width: .75em; display: block; position: relative; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; zoom: 1; }
+.ui-btn input, .ui-btn button { z-index: 2; }
+.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; vertical-align: middle; }
+.ui-mobile .ui-btn-left, .ui-mobile .ui-btn-right { margin: 0; } /* .ui-mobile to increase specificity level */
+.ui-btn-block { display: block; }
+.ui-header > .ui-btn,
+.ui-footer > .ui-btn { display: inline-block; margin: 0; }
+.ui-header .ui-btn-block,
+.ui-footer .ui-btn-block { display: block; }
+.ui-header .ui-btn-inner,
+.ui-footer .ui-btn-inner,
+.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; }
+.ui-fullsize .ui-btn-inner,
+.ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 20px; }
+.ui-btn-icon-notext { width: 24px; height: 24px; }
+.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; }
+.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; float: left; }
+.ui-btn-text { position: relative; z-index: 1; width: 100%; -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; }
+.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; }
+.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; }
+.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; }
+.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; }
+.ui-header .ui-btn-icon-left .ui-btn-inner,
+.ui-footer .ui-btn-icon-left .ui-btn-inner,
+.ui-mini.ui-btn-icon-left .ui-btn-inner,
+.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; }
+.ui-header .ui-btn-icon-right .ui-btn-inner,
+.ui-footer .ui-btn-icon-right .ui-btn-inner,
+.ui-mini.ui-btn-icon-right .ui-btn-inner,
+.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; }
+.ui-header .ui-btn-icon-top .ui-btn-inner,
+.ui-footer .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; }
+.ui-mini.ui-btn-icon-top .ui-btn-inner,
+.ui-mini .ui-btn-icon-top .ui-btn-inner { padding-top: 30px; }
+.ui-header .ui-btn-icon-bottom .ui-btn-inner,
+.ui-footer .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; }
+.ui-mini.ui-btn-icon-bottom .ui-btn-inner,
+.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 30px; }
+/*btn icon positioning*/
+.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;}
+.ui-btn-icon-left > .ui-btn-inner > .ui-icon, .ui-btn-icon-right > .ui-btn-inner > .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; }
+.ui-btn-icon-left .ui-icon { left: 10px; }
+.ui-btn-icon-right .ui-icon { right: 10px; }
+.ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-header .ui-btn-icon-left .ui-icon,
+.ui-footer .ui-btn-icon-left .ui-icon,
+.ui-mini.ui-btn-icon-left .ui-icon,
+.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; }
+.ui-header .ui-btn-icon-right .ui-icon,
+.ui-footer .ui-btn-icon-right .ui-icon,
+.ui-mini.ui-btn-icon-right .ui-icon,
+.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; }
+.ui-header .ui-btn-icon-top .ui-icon,
+.ui-footer .ui-btn-icon-top .ui-icon,
+.ui-mini.ui-btn-icon-top .ui-icon,
+.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; }
+.ui-header .ui-btn-icon-bottom .ui-icon,
+.ui-footer .ui-btn-icon-bottom .ui-icon,
+.ui-mini.ui-btn-icon-bottom .ui-icon,
+.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; }
+/*hiding native button,inputs */
+.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: none; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=0); opacity: .1; font-size: 1px; border: none; text-indent: -9999px; }
+/* Fixes IE/WP filter alpha opacity bugs */
+.ui-disabled .ui-btn-hidden { display: none; }
+.ui-disabled { z-index: 1; }
+.ui-field-contain .ui-btn.ui-submit { margin: 0; }
+label.ui-submit { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-submit { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-btn.ui-submit { width: 78%; display: inline-block; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+       .ui-hide-label .ui-btn.ui-submit { width: auto; display: block; }
+}
+.ui-collapsible-inset { margin: .5em 0; }
+.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -15px; padding: 0; position: relative; }
+.ui-collapsible-inset .ui-collapsible-heading { margin: 0; }
+.ui-collapsible-heading .ui-btn { text-align: left; margin: 0; border-left-width: 0; border-right-width: 0; }
+.ui-collapsible-inset .ui-collapsible-heading .ui-btn { border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-collapsed + .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 0; }
+.ui-collapsible-set .ui-collapsible:not(.ui-collapsible-inset) .ui-collapsible-heading .ui-btn { border-top-width: 1px; }
+.ui-collapsible-heading .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; }
+.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; }
+.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner,
+.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; }
+.ui-collapsible-heading .ui-btn span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-btn-inner { padding: 10px 0; }
+.ui-collapsible-heading .ui-btn span.ui-btn .ui-icon { left: 0; margin-top: -10px; }
+.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; }
+.ui-collapsible-content {
+       display: block;
+       margin: 0 -15px;        
+       padding: 10px 15px;
+       border-left-width: 0;
+       border-right-width: 0;
+       border-top: none;      /* Overrides ui-body-* */
+       background-image: none; /* Overrides ui-body-* */
+}
+.ui-collapsible-inset .ui-collapsible-content { margin: 0; border-right-width: 1px; border-left-width: 1px; }
+.ui-collapsible-content-collapsed { display: none; }
+.ui-collapsible-set { margin: .5em 0; }
+.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; }
+.ui-collapsible-set .ui-collapsible:first-child { margin-top: 0; }
+.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: .5em 0; zoom: 1; }
+.ui-controlgroup.ui-mini, fieldset.ui-controlgroup.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-controlgroup, .ui-field-contain fieldset.ui-controlgroup { margin: 0; }
+.ui-bar .ui-controlgroup { margin: 0 5px; }
+.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; }
+.ui-controlgroup li { list-style: none; }
+.ui-controlgroup-vertical .ui-btn,
+.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; }
+.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; }
+.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; }
+.ui-controlgroup .ui-btn-icon-notext { width: auto; height: auto; top: auto; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 20px; padding: .6em 20px .6em 20px }
+.ui-controlgroup-horizontal .ui-btn-icon-notext .ui-btn-inner { width: 18px; }
+.ui-controlgroup.ui-mini .ui-btn-icon-notext .ui-btn-inner,
+.ui-header .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner,
+.ui-footer .ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { height: 16px; padding: .55em 11px .5em 11px; }
+.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; right: 50%; margin: -9px -9px 0 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:before,
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { content: ""; display: table; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls:after { clear: both; }
+.ui-controlgroup-horizontal .ui-controlgroup-controls { display: inline-block; vertical-align: middle; zoom: 1; }
+.ui-controlgroup-horizontal .ui-btn-inner { text-align: center; }
+.ui-controlgroup-horizontal.ui-mini .ui-btn-inner { height: 16px; line-height: 16px; }
+.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select,
+.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; }
+.ui-controlgroup-horizontal .ui-select .ui-btn,
+.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn { float: none; margin: 0; }
+.ui-controlgroup-horizontal .ui-controlgroup-last, .ui-controlgroup-horizontal .ui-select:last-child,
+.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; }
+.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; }
+@media all and (min-width: 450px){
+       .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-controlgroup-controls { width: 78%; display: inline-block; }
+       .ui-field-contain .ui-controlgroup .ui-select { width: 100%; display: block; } 
+       .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; }
+       .ui-hide-label .ui-controlgroup-controls { width: 100%; }
+}      
+.ui-dialog {
+        background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */
+}
+.ui-dialog-contain {
+       width: 92.5%;
+       max-width: 500px;
+       margin: 10% auto 15px auto;
+       padding: 0;
+       position: relative;
+       top: -15px;
+}
+.ui-dialog-contain > .ui-header, 
+.ui-dialog-contain > .ui-content, 
+.ui-dialog-contain > .ui-footer { 
+       display: block;
+       position: relative; 
+       width: auto;
+       margin: 0;
+}
+.ui-dialog-contain > .ui-header {
+       border: none;
+       overflow: hidden;
+       z-index: 10; 
+       padding: 0;
+}
+.ui-dialog-contain > .ui-content { 
+       padding: 15px; 
+}
+.ui-dialog-contain > .ui-footer {
+       z-index: 10; 
+       padding: 0 15px; 
+}
+.ui-popup-open .ui-header-fixed,
+.ui-popup-open .ui-footer-fixed {
+       position: absolute !important;  /* See line #553 of popup.js */
+}
+.ui-popup-screen {
+       background-image: url(data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==); /* Necessary to set some form of background to ensure element is clickable in IE6/7. While legacy IE won't understand the data-URI'd image, it ensures no additional requests occur in all other browsers with little overhead. */
+       top: 0px;
+       left: 0px;
+       right: 0px;
+       bottom: 1px;
+       position: absolute;
+       filter: Alpha(Opacity=0);
+       opacity: 0;
+       z-index: 1099;
+}
+.ui-popup-screen.in {
+       opacity: 0.5;
+       filter: Alpha(Opacity=50);
+}
+.ui-popup-screen.out {
+       opacity: 0;
+       filter: Alpha(Opacity=0);
+}
+.ui-popup-container {
+       z-index: 1100;
+       display: inline-block;
+       position: absolute;
+       padding: 0;
+       outline: 0;
+}
+.ui-popup {
+       position: relative;
+}
+.ui-popup.ui-content,
+.ui-popup .ui-content {
+       overflow: visible;
+}
+.ui-popup > p,
+.ui-popup > h1,
+.ui-popup > h2,
+.ui-popup > h3,
+.ui-popup > h4,
+.ui-popup > h5,
+.ui-popup > h6 {
+       margin: .5em 7px;
+}
+.ui-popup > span {
+       display: block;
+       margin: .5em 7px;
+}
+.ui-popup .ui-title {
+       font-size: 16px;
+       font-weight: bold;
+       margin-top: .5em;
+       margin-bottom: .5em;
+}
+.ui-popup-container .ui-content > p,
+.ui-popup-container .ui-content > h1,
+.ui-popup-container .ui-content > h2,
+.ui-popup-container .ui-content > h3,
+.ui-popup-container .ui-content > h4,
+.ui-popup-container .ui-content > h5,
+.ui-popup-container .ui-content > h6 {
+       margin: .5em 0;
+}
+.ui-popup-container .ui-content > span {
+       margin: 0;
+}
+.ui-popup-container .ui-content > p:first-child,
+.ui-popup-container .ui-content > h1:first-child,
+.ui-popup-container .ui-content > h2:first-child,
+.ui-popup-container .ui-content > h3:first-child,
+.ui-popup-container .ui-content > h4:first-child,
+.ui-popup-container .ui-content > h5:first-child,
+.ui-popup-container .ui-content > h6:first-child {
+       margin-top: 0;
+}
+.ui-popup-container .ui-content > p:last-child,
+.ui-popup-container .ui-content > h1:last-child,
+.ui-popup-container .ui-content > h2:last-child,
+.ui-popup-container .ui-content > h3:last-child,
+.ui-popup-container .ui-content > h4:last-child,
+.ui-popup-container .ui-content > h5:last-child,
+.ui-popup-container .ui-content > h6:last-child {
+       margin-bottom: 0;
+}
+.ui-popup > img {
+       width: auto;
+       height: auto;
+       max-width: 100%;
+       max-height: 100%;
+       vertical-align: middle;
+}
+.ui-popup iframe {
+       vertical-align: middle;
+}
+@media all and (min-width: 450px){
+       .ui-popup .ui-field-contain label.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-label,
+       .ui-popup .ui-field-contain label.ui-select,
+       .ui-popup .ui-field-contain label.ui-input-text {
+               font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em;
+       }
+       .ui-popup .ui-field-contain .ui-btn.ui-submit,
+       .ui-popup .ui-field-contain .ui-controlgroup-controls,
+       .ui-popup .ui-field-contain .ui-select,
+       .ui-popup .ui-field-contain input.ui-input-text,
+       .ui-popup .ui-field-contain textarea.ui-input-text,
+       .ui-popup .ui-field-contain .ui-input-search {
+               width: 100%; display: block;
+       }
+}
+.ui-popup > .ui-btn-left,
+.ui-popup > .ui-btn-right {
+       position: absolute; 
+       top: -9px;
+       margin: 0;
+       z-index: 1101;
+}
+.ui-popup > .ui-btn-left { left: -9px; }
+.ui-popup > .ui-btn-right { right: -9px; }
+.ui-popup.ui-corner-all > .ui-header,
+.ui-popup.ui-corner-all ~ .ui-content,
+.ui-popup.ui-corner-all > .ui-content:first-child {
+       -webkit-border-top-left-radius:  inherit;
+       border-top-left-radius:          inherit;
+       -webkit-border-top-right-radius: inherit;
+       border-top-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content,
+.ui-popup.ui-corner-all > .ui-footer,
+.ui-popup.ui-corner-all > .ui-header:nth-child(n):last-child {
+       -webkit-border-bottom-left-radius:  inherit;
+       border-bottom-left-radius:          inherit;
+       -webkit-border-bottom-right-radius: inherit;
+       border-bottom-right-radius:         inherit;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-child(2),
+.ui-popup.ui-corner-all > .ui-header:nth-child(2) {
+       -webkit-border-top-left-radius:  0;
+       border-top-left-radius:          0;
+       -webkit-border-top-right-radius: 0;
+       border-top-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-content:nth-last-child(1n+2),
+.ui-popup.ui-corner-all > .ui-footer:nth-last-child(1n+2) {
+       -webkit-border-bottom-left-radius:  0;
+       border-bottom-left-radius:          0;
+       -webkit-border-bottom-right-radius: 0;
+       border-bottom-right-radius:         0;
+}
+.ui-popup.ui-corner-all > .ui-header:only-child,
+.ui-popup.ui-corner-all > .ui-footer:only-child {
+       -webkit-border-radius: inherit;
+       border-radius:         inherit;
+}
+.ui-checkbox, .ui-radio { position: relative; clear: both; margin: 0; z-index: 1; }
+.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin-top: .5em; margin-bottom: .5em; text-align: left; z-index: 2; }
+.ui-checkbox .ui-btn.ui-mini, .ui-radio .ui-btn.ui-mini { margin: .25em 0; }
+.ui-controlgroup .ui-checkbox .ui-btn, .ui-controlgroup .ui-radio .ui-btn { margin: 0; }
+.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; }
+.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; }
+.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; }
+.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; }
+.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; }
+.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; }
+.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; }
+.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; }
+/* input, label positioning */
+.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; }
+.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; }
+.ui-field-contain:last-child { border-bottom-width: 0; }
+.ui-field-contain { max-width: 100%; } /* This prevents horizontal scrollbar in IE7 */
+@media all and (min-width: 450px){
+       .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; }
+}
+.ui-select { display: block; position: relative; }
+.ui-select select { position: absolute; left: -9999px; top: -9999px; }
+.ui-select .ui-btn { overflow: hidden; opacity: 1; }
+.ui-field-contain .ui-select .ui-btn { margin: 0; }
+/* Fixes #2588: When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select (including "inherit") without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */
+.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: none; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; filter: Alpha(Opacity=0); opacity: 0; z-index: 2; }
+.ui-select .ui-disabled { opacity: .3; }
+/* Display none because of issues with IE/WP's filter alpha opacity */
+.ui-select .ui-disabled select { display: none; }
+@-moz-document url-prefix() { .ui-select .ui-btn select { opacity: 0.0001; }}
+.ui-select .ui-btn.ui-select-nativeonly { border-radius: 0; border: 0; }
+.ui-select .ui-btn.ui-select-nativeonly select { opacity: 1; text-indent: 0; display: block; }
+.ui-select .ui-disabled.ui-select-nativeonly .ui-btn-inner { opacity: 0; }
+.ui-select .ui-btn-icon-right .ui-btn-inner, .ui-select .ui-li-has-count .ui-btn-inner { padding-right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 32px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 80px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-btn-inner { padding-right: 67px; }
+.ui-select .ui-btn-icon-right .ui-icon { right: 15px; }
+.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; }
+.ui-select .ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 45px; }
+.ui-select .ui-mini.ui-btn-icon-right.ui-li-has-count .ui-li-count { right: 32px; }
+/* labels */
+label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+/*listbox*/
+.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important;
+/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ }
+.ui-select .ui-btn-text { text-overflow: ellipsis; }
+.ui-selectmenu { padding: 6px; min-width: 160px; }
+.ui-selectmenu .ui-listview { margin: 0; }
+.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; }
+.ui-selectmenu-hidden { top: -99999px; left: -9999px; }
+.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; }
+.ui-selectmenu-list .ui-li .ui-icon { display: block; }
+.ui-li.ui-selectmenu-placeholder { display: none; }
+.ui-selectmenu .ui-header { margin: 0; padding: 0; }
+.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain .ui-select { width: 78%; display: inline-block; }
+       .ui-hide-label .ui-select { width: 100%; } 
+}
+/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button.  this shim's content in there */
+.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; }
+label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; }
+input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; display: block; width: 100%; outline: 0; }
+input.ui-input-text.ui-mini, textarea.ui-input-text.ui-mini { margin: .25em 0; }
+.ui-field-contain input.ui-input-text, .ui-field-contain textarea.ui-input-text { margin: 0; }
+input.ui-input-text, textarea.ui-input-text, .ui-input-search { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
+input.ui-input-text { -webkit-appearance: none; }
+textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; }
+.ui-input-search { padding: 0 30px; margin: .5em 0; background-image: none; position: relative; }
+.ui-input-search.ui-mini { margin: .25em 0; }
+.ui-field-contain .ui-input-search { margin: 0; }
+.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; }
+.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; }
+.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; }
+.ui-mini .ui-input-clear { right: -3px; }
+.ui-input-search .ui-input-clear-hidden { display: none; }
+input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; }
+textarea.ui-mini { height: 45px; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-input-text  { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 }
+       .ui-field-contain input.ui-input-text, 
+       .ui-field-contain textarea.ui-input-text, 
+       .ui-field-contain .ui-input-search { width: 78%; display: inline-block; } 
+       .ui-hide-label input.ui-input-text, 
+       .ui-hide-label textarea.ui-input-text, 
+       .ui-hide-label .ui-input-search { width: 100%; }
+       .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ }
+}
+.ui-listview { margin: 0; }
+ol.ui-listview, ol.ui-listview .ui-li-divider { counter-reset: listnumbering; }
+.ui-content .ui-listview { margin: -15px; }
+.ui-collapsible-content > .ui-listview { margin: -10px -15px; }
+.ui-content .ui-listview-inset { margin: 1em 0; }
+.ui-collapsible-content .ui-listview-inset { margin: .5em 0; }
+.ui-listview, .ui-li { list-style:none; padding:0; }
+.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; }
+.ui-li.ui-btn { margin: 0; }
+.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-static { background-image: none; }
+.ui-li-divider { padding: .5em 15px; font-size: 14px; font-weight: bold; }
+ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal; counter-increment: listnumbering; content: counter(listnumbering) ". "; }
+ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */
+.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; }
+.ui-li-last, .ui-li.ui-field-contain.ui-li-last { border-bottom-width: 1px; }
+.ui-collapsible [class*="ui-body"] > .ui-listview:not(.ui-listview-inset) .ui-li-last { border-bottom-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li:first-child { border-top-width: 0; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset),
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last { -webkit-border-bottom-left-radius: inherit; -webkit-border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-collapsible-content > .ui-listview:not(.ui-listview-inset) .ui-li-last .ui-li-link-alt { -webkit-border-bottom-right-radius: inherit; border-bottom-right-radius: inherit; }
+.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; }
+.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px; display: block; }
+.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb  { min-height: 60px; padding-left: 100px; }
+.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; }
+.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count, .ui-li-divider.ui-li-has-count { padding-right: 45px; }
+.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 40px; }
+.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; }
+.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
+.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; }
+.ui-listview .ui-li-icon { max-height: 16px; max-width: 16px; left: 10px; top: .9em; }
+.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; }
+.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; }
+@media all and (min-width: 480px){
+        .ui-li-aside { width: 45%; }
+}       
+.ui-li-divider { cursor: default; }
+.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 53px; }
+.ui-li-has-alt.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt.ui-li-has-count { padding-right: 88px; }
+.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 10px; }
+.ui-li-has-count.ui-li-divider .ui-li-count, .ui-li-has-count .ui-link-inherit .ui-li-count { margin-top: -.95em; }
+.ui-li-has-arrow.ui-li-has-count .ui-li-count { right: 40px; }
+.ui-li-has-alt.ui-li-has-count .ui-li-count { right: 53px; }
+.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; }
+.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -13px 0 0 0; border-bottom-width: 1px; z-index: -1;}
+.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;}
+.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; }
+.ui-li-link-alt .ui-btn-icon-notext .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; }
+.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; }
+.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px; }
+.ui-collapsible-content .ui-listview-filter { margin: -10px -15px 10px -15px; border-bottom: inherit; }
+.ui-listview-filter-inset { margin: -15px -5px; background: transparent; }
+.ui-collapsible-content .ui-listview-filter-inset { margin: -5px; border-bottom-width: 0; }
+.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; }
+.ui-li.ui-screen-hidden{ display:none; }
+/* Odd iPad positioning issue. */
+@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) {
+    .ui-li .ui-btn-text { overflow:  visible; }
+}
+label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; }
+input.ui-slider-input,
+.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; background-image: none; padding: .4em; margin: .5em 0; line-height: 1.4; font-size: 16px; outline: 0; }
+input.ui-slider-input.ui-mini,
+.ui-field-contain input.ui-slider-input.ui-mini { width: 45px; margin: .25em 0; font-size: 14px; }
+.ui-field-contain input.ui-slider-input { margin: 0; }
+input.ui-slider-input, .ui-field-contain input.ui-slider-input { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; -ms-box-sizing: content-box; box-sizing: content-box; }
+/* Fixes input fields being to small on Safari/Mac because of the up and down arrows. */
+.ui-slider-input::-webkit-outer-spin-button { margin: 0; }
+select.ui-slider-switch { display: none; }
+div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; }
+div.ui-slider-mini { height: 12px; margin-left: 10px; top: 2px; }
+div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; }
+.ui-controlgroup a.ui-slider-handle, a.ui-btn.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin: -15px 0 0 -15px; outline: 0; }
+a.ui-btn.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; }
+div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; }
+div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; border-top: none; }
+@media all and (min-width: 450px){
+       .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; }
+       .ui-field-contain div.ui-slider { width: 43%; }
+       .ui-field-contain div.ui-slider-switch { width: 5.5em; }
+}      
+div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; }
+a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; }
+div.ui-slider-switch .ui-slider-handle { margin: 1px 0 0 -15px; }
+.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; }
+div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; }
+div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; }
+div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; }
+span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; }
+.ui-slider-mini span.ui-slider-label { font-size: 14px; }
+span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; }
+span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;}
+.ui-slider-inline { width: 120px; display: inline-block; }
diff --git a/wearable/tct-behavior-tests/css/main.css b/wearable/tct-behavior-tests/css/main.css
new file mode 100755 (executable)
index 0000000..c9ea8a0
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+.ui-page .ui-content .ui-listview img {
+    position:absolute;
+    top:0;
+    bottom:0;
+    margin:auto;
+}
+
+.ui-page .ui-content .ui-listview h1 {
+    line-height : 45px;
+    vertical-align : middle;
+    white-space : normal;
+}
+
+.ui-li-count {
+    min-width: 30px;
+    text-align: center;
+}
+
+#overlay {
+    position: fixed;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%;
+    background: #000;
+    opacity: 0.6;
+    filter: alpha(opacity=60);
+    z-index:50;
+}
+
+.wgtButton {
+    height:40px;
+    line-height:20px;
+}
+
+.hideButton {
+    display:none;
+}
+
+.fontSize {
+    font-size:85%
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/icon.png b/wearable/tct-behavior-tests/icon.png
new file mode 100755 (executable)
index 0000000..f5578b3
Binary files /dev/null and b/wearable/tct-behavior-tests/icon.png differ
diff --git a/wearable/tct-behavior-tests/index.html b/wearable/tct-behavior-tests/index.html
new file mode 100755 (executable)
index 0000000..692ecdd
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Lin, Wanming <wanmingx.lin@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+-->
+<html>
+<head>
+    <title>TCT Behavior Test Tool</title>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+    <link rel="stylesheet" type="text/css" href="css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="css/main.css" />
+    <script src="js/thirdparty/jquery.js"></script>
+    <script src="js/thirdparty/jquery.mobile.js"></script>
+    <script src="js/main.js"></script>
+</head>
+<body bgcolor="FFFFFF" >
+<div data-role="page" id="home_ui">
+    <div id="tool_title" data-role="header" data-position="inline"></div>
+    <div id="app_selector" data-role="content">
+        <ul data-role="listview" id="mylist" data-divider-theme="b" data-inset="true"></ul>
+    </div>
+    <div data-role="footer" data-position="inline">
+        <div data-role="controlgroup" data-type="horizontal">
+            <a href="javascript:exportResult();" data-role="button" data-icon="gear">Export</a>
+            <a href="javascript:resetResult();" data-role="button" data-icon="refresh">Reset</a>
+            <a href="#popup_exit" data-rel="popup" data-position-to="window" data-role="button" data-inline="true" data-transition="pop" data-icon="back">Exit</a>
+        </div>
+    </div>
+    <div data-role="popup" id="popup_exit" data-overlay-theme="a" data-theme="c" data-dismissible="false" style="max-width:400px;" class="ui-corner-all">
+        <div data-role="header" data-theme="a" class="ui-corner-top">
+            <h1>Reminder</h1>
+        </div>
+        <div data-role="content" data-theme="d" class="ui-corner-bottom ui-content">
+            <h3 class="ui-title">Do you want to save test result before exit?</h3>
+            <a href="javascript:SaveAndExit();" data-role="button" data-theme="c">Yes</a>
+            <a href="javascript:exitTest();" data-role="button" data-theme="e">No, thanks</a>
+        </div>
+    </div>
+</div>
+<script>
+    updateToolTitle();
+</script>
+</body>
+</html>
diff --git a/wearable/tct-behavior-tests/inst.apk.py b/wearable/tct-behavior-tests/inst.apk.py
new file mode 100755 (executable)
index 0000000..56e4343
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PARAMETERS = None
+ADB_CMD = "adb"
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip('\n')
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s uninstall org.xwalk.%s" % (
+                    ADB_CMD, PARAMETERS.device, os.path.basename(os.path.splitext(file)[0]))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".apk"):
+                cmd = "%s -s %s install %s" % (ADB_CMD,
+                                               PARAMETERS.device, os.path.join(root, file))
+                (return_code, output) = doCMD(cmd)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.device:
+        (return_code, output) = doCMD("adb devices")
+        for line in output:
+            if str.find(line, "\tdevice") != -1:
+                PARAMETERS.device = line.split("\t")[0]
+                break
+
+    if not PARAMETERS.device:
+        print "No device found"
+        sys.exit(1)
+
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/wearable/tct-behavior-tests/inst.wgt.py b/wearable/tct-behavior-tests/inst.wgt.py
new file mode 100755 (executable)
index 0000000..1e80823
--- /dev/null
@@ -0,0 +1,253 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+EXECUTION_MODE_30 = tct_parser.get('DEVICE', 'DEVICE_EXECUTION_MODE_30')
+ADMIN_USER_30 = tct_parser.get('DEVICE', 'DEVICE_ADMIN_USER_30')
+
+def userCheck():
+    global GLOVAL_OPT
+    if ADMIN_USER_30 == EXECUTION_MODE_30:
+        GLOVAL_OPT="--global"
+    else:
+        GLOVAL_OPT=""
+
+
+def askpolicyremoving():
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+   
+    print pkg_id
+    print (os.getcwd())
+    print (os.path.dirname(os.path.realpath(__file__)) )
+    if not doRemoteCopy("%s/askpolicy.sh" % SCRIPT_DIR, "%s" % (SRC_DIR)):
+        action_status = False
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell .%s/askpolicy.sh %s" % (PARAMETERS.device, 
+        SRC_DIR, pkg_id)
+    return doCMD(cmd)
+       
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -q -u -n %s" % (GLOVAL_OPT, pkg_id))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".wgt"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd %s -i -t wgt -q -p %s/%s" % (GLOVAL_OPT, SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".wgt"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = EXECUTION_MODE_30
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    userCheck()
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            #askpolicyremoving()
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/wearable/tct-behavior-tests/inst.xpk.py b/wearable/tct-behavior-tests/inst.xpk.py
new file mode 100755 (executable)
index 0000000..1c47cca
--- /dev/null
@@ -0,0 +1,225 @@
+#!/usr/bin/env python
+
+import os
+import shutil
+import glob
+import time
+import sys
+import subprocess
+import string
+from optparse import OptionParser, make_option\r
+import ConfigParser
+
+
+SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
+PKG_NAME = os.path.basename(SCRIPT_DIR)
+PARAMETERS = None
+#XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/5000/dbus/user_bus_socket"
+TCT_CONFIG_FILE = "/opt/tools/TCT_CONFIG"
+tct_parser = ConfigParser.ConfigParser()
+tct_parser.read(TCT_CONFIG_FILE)
+SRC_DIR = tct_parser.get('DEVICE', 'DEVICE_SUITE_TARGET_30')
+PKG_SRC_DIR = "%s/tct/opt/%s" % (SRC_DIR, PKG_NAME)
+
+
+def doCMD(cmd):
+    # Do not need handle timeout in this short script, let tool do it
+    print "-->> \"%s\"" % cmd
+    output = []
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
+    while True:
+        cmd_return_code = cmd_proc.poll()
+        if cmd_return_code != None:
+            break
+
+    if not cmd.endswith("&"):
+        while True:
+            line = cmd_proc.stdout.readline().strip("\r\n")
+            print line
+            if not line or line.find("daemon started") >= 0:
+                break
+            output.append(line)
+
+    return (cmd_return_code, output)
+
+
+def updateCMD(cmd=None):
+    if "pkgcmd" in cmd:
+        cmd = "su - %s -c '%s;%s'" % (PARAMETERS.user, XW_ENV, cmd)
+    return cmd
+def getUSERID():
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell id -u %s" % (
+            PARAMETERS.device, PARAMETERS.user)
+    else:
+        cmd = "ssh %s \"id -u %s\"" % (
+            PARAMETERS.device, PARAMETERS.user )
+    return doCMD(cmd)
+
+
+def getPKGID(pkg_name=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+    else:
+        cmd = "ssh %s \"%s\"" % (
+            PARAMETERS.device, updateCMD('pkgcmd -l'))
+
+    (return_code, output) = doCMD(cmd)
+    if return_code != 0:
+        return None
+
+    test_pkg_id = None
+    for line in output:
+        if line.find("[" + pkg_name + "]") != -1:
+            pkgidIndex = line.split().index("pkgid")
+            test_pkg_id = line.split()[pkgidIndex+1].strip("[]")
+            break
+    return test_pkg_id
+
+
+def doRemoteCMD(cmd=None):
+    if PARAMETERS.mode == "SDB":
+        cmd = "sdb -s %s shell %s" % (PARAMETERS.device, updateCMD(cmd))
+    else:
+        cmd = "ssh %s \"%s\"" % (PARAMETERS.device, updateCMD(cmd))
+
+    return doCMD(cmd)
+
+
+def doRemoteCopy(src=None, dest=None):
+    if PARAMETERS.mode == "SDB":
+        cmd_prefix = "sdb -s %s push" % PARAMETERS.device
+        cmd = "%s %s %s" % (cmd_prefix, src, dest)
+    else:
+        cmd = "scp -r %s %s:/%s" % (src, PARAMETERS.device, dest)
+
+    (return_code, output) = doCMD(cmd)
+    doRemoteCMD("sync")
+
+    if return_code != 0:
+        return True
+    else:
+        return False
+
+
+def uninstPKGs():
+    action_status = True
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                pkg_id = getPKGID(os.path.basename(os.path.splitext(file)[0]))
+                if not pkg_id:
+                    action_status = False
+                    continue
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -u -t xpk -q -n %s" % pkg_id)
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    (return_code, output) = doRemoteCMD(
+        "rm -rf %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+
+    return action_status
+
+
+def instPKGs():
+    action_status = True
+    (return_code, output) = doRemoteCMD(
+        "mkdir -p %s" % PKG_SRC_DIR)
+    if return_code != 0:
+        action_status = False
+    for root, dirs, files in os.walk(SCRIPT_DIR):
+        for file in files:
+            if file.endswith(".xpk"):
+                if not doRemoteCopy(os.path.join(root, file), "%s/%s" % (SRC_DIR, file)):
+                    action_status = False
+                (return_code, output) = doRemoteCMD(
+                    "pkgcmd -i -t xpk -q -p %s/%s" % (SRC_DIR, file))
+                doRemoteCMD("rm -rf %s/%s" % (SRC_DIR, file))
+                for line in output:
+                    if "Failure" in line:
+                        action_status = False
+                        break
+
+    for item in glob.glob("%s/*" % SCRIPT_DIR):
+        if item.endswith(".xpk"):
+            continue
+        elif item.endswith("inst.py"):
+            continue
+        else:
+            item_name = os.path.basename(item)
+            if not doRemoteCopy(item, PKG_SRC_DIR+"/"+item_name):
+            #if not doRemoteCopy(item, PKG_SRC_DIR):
+                action_status = False
+
+    return action_status
+
+
+def main():
+    try:
+        usage = "usage: inst.py -i"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-m", dest="mode", action="store", help="Specify mode")
+        opts_parser.add_option(
+            "-s", dest="device", action="store", help="Specify device")
+        opts_parser.add_option(
+            "-i", dest="binstpkg", action="store_true", help="Install package")
+        opts_parser.add_option(
+            "-u", dest="buninstpkg", action="store_true", help="Uninstall package")
+        opts_parser.add_option(
+            "-a", dest="user", action="store", help="User name")
+        global PARAMETERS
+        (PARAMETERS, args) = opts_parser.parse_args()
+    except Exception, e:
+        print "Got wrong option: %s, exit ..." % e
+        sys.exit(1)
+
+    if not PARAMETERS.user:
+        PARAMETERS.user = "owner"
+    if not PARAMETERS.mode:
+        PARAMETERS.mode = "SDB"
+
+    if PARAMETERS.mode == "SDB":
+        if not PARAMETERS.device:
+            (return_code, output) = doCMD("sdb devices")
+            for line in output:
+                if str.find(line, "\tdevice") != -1:
+                    PARAMETERS.device = line.split("\t")[0]
+                    break
+    else:
+        PARAMETERS.mode = "SSH"
+
+    if not PARAMETERS.device:
+        print "No device provided"
+        sys.exit(1)
+
+    user_info = getUSERID()
+    re_code = user_info[0]
+    if re_code == 0 :
+        global XW_ENV
+        userid = user_info[1][0]
+        XW_ENV = "export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/%s/dbus/user_bus_socket"%str(userid)
+    else:
+        print "[Error] cmd commands error : %s"%str(user_info[1])
+        sys.exit(1)
+    if PARAMETERS.binstpkg and PARAMETERS.buninstpkg:
+        print "-i and -u are conflict"
+        sys.exit(1)
+
+    if PARAMETERS.buninstpkg:
+        if not uninstPKGs():
+            sys.exit(1)
+    else:
+        if not instPKGs():
+            sys.exit(1)
+
+if __name__ == "__main__":
+    main()
+    sys.exit(0)
diff --git a/wearable/tct-behavior-tests/js/main.js b/wearable/tct-behavior-tests/js/main.js
new file mode 100755 (executable)
index 0000000..95581e2
--- /dev/null
@@ -0,0 +1,796 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+var _appURL;
+var _resultXML;
+var Tests;
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+//var accMarks = {}; //Re-enter popup
+var noSupport = {};
+var resultFile = "tct-behavior-tests_" + getCurrentTime() + ".result.xml";
+var tmpResultFile = "tct-behavior-tests.tmpresult.xml";
+var isLaunching = false;
+
+function checkTizen(){
+    if (typeof(tizen) == 'undefined')
+        return false;
+    else
+        return true;
+}
+
+function updateToolTitle() {
+    var version = '';
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "config.xml",
+        dataType : "xml",
+        success : function(xml){
+            $(xml).find("widget").each(
+                function(){
+                    if ($(this).attr('version'))
+                        version = $(this).attr('version');
+                }
+            );
+        }
+    });
+
+    $("#tool_title").empty().append("<h1 style=\"width:75%; margin-left:auto; margin-right:auto;\">TCT Behavior Test Tool</h1><a class=\"ui-btn-right\">" + version + "</a>");
+}
+
+function launchApp() {
+    window.open(_appURL);
+    $.mobile.hidePageLoadingMsg();
+    $('#overlay').remove();
+}
+
+function runApp(url) {
+    if (isLaunching){
+        setTimeout(function(){isLaunching = false;}, 200);
+        return;
+    }
+/*  Re-enter popup
+    if (accMarks[url] == 1)
+        url += "?reenter";
+    else
+        accMarks[url] = 1;
+*/
+    isLaunching = true;
+    _appURL = url;
+    $.mobile.showPageLoadingMsg();
+    $('<div></div>').prependTo('body').attr('id', 'overlay');
+    _timer = setTimeout(launchApp, 200);
+}
+
+function updateAppDecorationStyle() {
+    $(".ui-content").css("padding", '6px');
+    $("a.ui-link-inherit").css("padding", '0px 85px 0px 10px');
+    $(".ui-li-has-thumb a.ui-link-inherit").css("padding-left", '40px');
+    $(".ui-li-heading").css("font-size", '14px');
+}
+
+function updateAppDecoration() {
+    $("#mylist").empty();
+    $(_resultXML).find("set").each(
+        function(){
+            $("#mylist").append("<li data-role=\"list-divider\" role=\"heading\">"+$(this).attr("name")+"</li>");
+            $(this).find("testcase").each(
+                function(){
+                     var url = "tests/" + $(this).attr("id") + "/index.html?test_name="+$(this).attr("purpose");
+                     var appLine = "<li id=\"" + $(this).attr("id") + "\" class=\"test_app\">" +
+                           "<a href=\"javascript:runApp('" + url + "')\">" +
+                           "<h1>" + $(this).attr("purpose") + "</h1></a></li>";
+                     $("#mylist").append(appLine);
+                     if($(this).attr("result") == "PASS"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/pass.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:green;'>" +
+                             "PASS" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'g');
+                     } else if($(this).attr("result") == "FAIL"){
+                         $("#mylist > li :last").find("a").append("<img src='css/images/fail.png' class='ui-li-thumb'>");
+                         $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:red;'>" +
+                             "FAIL" + "</span>");
+                         $("#mylist > li :last").attr('data-theme', 'r');
+                     }
+                     if (noSupport[$(this).attr("id")]) {
+                        $("#mylist > li :last").find("a").attr('href', '');
+                        $("#mylist > li :last").attr('data-theme', 'a');
+                        $("#mylist > li :last").find("a").append("<span class='ui-li-count' style='color:black;'>" +
+                             "UNSUPPORTED" + "</span>");
+                     }
+                }
+            );
+        }
+    );
+    $("#mylist").listview( "refresh" );
+    updateAppDecorationStyle();
+}
+
+function exportResult() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function exportTmpResult() {
+    writeFile(tmpResultFile, (new XMLSerializer()).serializeToString(_resultXML), false);
+}
+
+function resetResult() {
+    _resetResult();
+    updateAppDecoration();
+    isLaunching = false;
+}
+
+function _resetResult() {
+    Tests.each(
+        function() {
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if (isCappresent2 === false) {
+                noSupport[testAppname] = true;
+                $(this).attr("result", "UNSUPPORTED");
+            } else {
+                $(this).attr("result", "N/A");
+            }
+
+        }
+    );
+}
+
+function exitTest(){
+    try {
+        var app = tizen.application.getCurrentApplication();
+        app.exit();
+    } catch(err) {
+        closeWindow();
+    }
+}
+
+function closeWindow() {
+    window.open('', '_self', '');
+    window.close();
+}
+
+function getCurrentTime() {
+    var d = new Date();
+    // sometimes filename is not allowed to contain ':'
+    return d.toISOString().replace(/:/g, '-');
+}
+
+function removeUnsupportedFeature(content) {
+    var xml = content;
+    var pos, before, after, posBefore, posAfter;
+
+    pos = xml.indexOf('result="UNSUPPORTED"');
+    while (pos != -1)
+    {
+        before = xml.substring(0, pos);
+        after = xml.substring(pos);
+        posBefore = before.lastIndexOf("<testcase");
+        posAfter = after.indexOf("<testcase");
+        if (posAfter == -1) {
+            posAfter = after.indexOf("</set>");
+        }
+        xml = before.substring(0, posBefore) + after.substring(posAfter);
+        pos = xml.indexOf('result="UNSUPPORTED"');
+    }
+
+    return xml;
+}
+
+function writeFile(filename, content, need_exit) {
+    var onError, resolveSuccess, openStreamSuccess, saveNewFile, subdir, deleteError;
+
+    openStreamSuccess = function(fs) {
+        fs.write(removeUnsupportedFeature(content.replace("testcase.xsl", "testresult.xsl")));
+        fs.close();
+
+        if (filename == resultFile)
+            alert("Export result to " + resultFile + " successfully.");
+
+        if (need_exit)
+            exitTest();
+    };
+
+    saveNewFile = function () {
+      try {
+        file = subdir.createFile(filename);
+        file.openStream("w", openStreamSuccess, onError, "UTF-8");
+      } catch (error) {
+        onError(error);
+      }
+    }
+
+    deleteError = function (error) {
+        if (error.name !== "NotFoundError") {
+            return onError(error);
+        }
+        saveNewFile();
+    }
+
+    resolveSuccess = function(dir) {
+        try {
+            subdir = dir.resolve("tct-behavior-result");
+        } catch (error) {
+            if (error.name !== "NotFoundError") {
+                return onError(error);
+            }
+            subdir = dir.createDirectory("tct-behavior-result");
+        }
+
+        subdir.deleteFile(subdir.fullPath + '/' + filename, saveNewFile, deleteError);
+    };
+
+    onError = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', resolveSuccess, onError, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function SaveAndExit() {
+    writeFile(resultFile, (new XMLSerializer()).serializeToString(_resultXML), true);
+}
+
+function updateBar() {
+    $(':jqmData(role=header)').removeClass("slidedown");
+    $(':jqmData(role=footer)').removeClass("slideup");
+    $(':jqmData(role=footer)').attr("align", "center");
+    $(':jqmData(role=footer)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 20px 15px 40px');
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "./tests.xml",
+        dataType : "xml",
+        success : function(xml){
+            _resultXML = xml;
+            Tests = $(xml).find("testcase");
+            getSummary();
+            getCapPresent();
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    var onerror;
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++)
+            if (files[i].name == tmpResultFile) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("testcase"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        _resetResult();
+        updateAppDecoration();
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents/tct-behavior-result', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    Tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order, tmpItem) {
+                    if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                        $(item).attr("result", $(tmpItem).attr("result"));
+                        return false;
+                    }
+                }
+            );
+            var testAppname = $(this).attr("id");
+            var isCappresent2 = true;
+            $(this).find("capability").each(function(){
+                isCappresent2 = isCapPresent($(this).attr("name"));
+                if (isCappresent2 === false)
+                    return false;
+            });
+            if(isCappresent2 === false){
+                noSupport[testAppname] = true;
+            }
+        }
+    );
+}
+
+function recordResultToXML(test_name, result){
+    Tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result)
+            }
+        }
+    );
+}
+
+function initTests() {
+    updateBar();
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result == ""){
+                isLaunching = false;
+            } else {
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function getSummary() {
+
+    if (!checkTizen())
+        return;
+
+    var summaryXML = "";
+    var caps = [/* API */
+                "http://tizen.org/feature/account",
+                "http://tizen.org/feature/battery",
+                "http://tizen.org/feature/bookmark",
+                "http://tizen.org/feature/calendar",
+                "http://tizen.org/feature/camera",
+                "http://tizen.org/feature/camera.back",
+                "http://tizen.org/feature/camera.back.flash",
+                "http://tizen.org/feature/camera.front",
+                "http://tizen.org/feature/camera.front.flash",
+                "http://tizen.org/feature/contact",
+                "http://tizen.org/feature/database.encryption",
+                "http://tizen.org/feature/datasync",
+                "http://tizen.org/feature/datacontrol",
+                "http://tizen.org/feature/download",
+                "http://tizen.org/feature/fmradio",
+                "http://tizen.org/feature/graphics.acceleration",
+                "http://tizen.org/feature/input.keyboard",
+                "http://tizen.org/feature/input.keyboard.layout",
+                "http://tizen.org/feature/location",
+                "http://tizen.org/feature/location.gps",
+                "http://tizen.org/feature/location.wps",
+                "http://tizen.org/feature/email",
+                "http://tizen.org/feature/microphone",
+                "http://tizen.org/feature/multi_point_touch.pinch_zoom",
+                "http://tizen.org/feature/multi_point_touch.point_count",
+                "http://tizen.org/feature/network.bluetooth",
+                "http://tizen.org/feature/network.bluetooth.health",
+                "http://tizen.org/feature/network.nfc",
+                "http://tizen.org/feature/network.nfc.card_emulation",
+                "http://tizen.org/feature/network.nfc.reserved_push",
+                "http://tizen.org/feature/network.push",
+                "http://tizen.org/feature/network.secure_element",
+                "http://tizen.org/feature/network.telephony",
+                "http://tizen.org/feature/network.telephony.mms",
+                /*
+                "http://tizen.org/feature/network.telephony.service.edge",
+                "http://tizen.org/feature/network.telephony.service.gprs",
+                "http://tizen.org/feature/network.telephony.service.gsm",
+                "http://tizen.org/feature/network.telephony.service.hsdpa",
+                "http://tizen.org/feature/network.telephony.service.hspa",
+                "http://tizen.org/feature/network.telephony.service.hsupa",
+                "http://tizen.org/feature/network.telephony.service.lte",
+                "http://tizen.org/feature/network.telephony.service.umts",
+                "http://tizen.org/feature/network.telephony.sms.cbs",
+                */
+                "http://tizen.org/feature/network.wifi",
+                "http://tizen.org/feature/network.wifi.direct",
+                "http://tizen.org/feature/notification",
+                "http://tizen.org/feature/opengles",
+                "http://tizen.org/feature/opengles.texture_format",
+                /*
+                "http://tizen.org/feature/opengles.texture_format.3dc",
+                "http://tizen.org/feature/opengles.texture_format.atc",
+                "http://tizen.org/feature/opengles.texture_format.etc",
+                "http://tizen.org/feature/opengles.texture_format.ptc",
+                "http://tizen.org/feature/opengles.texture_format.pvrtc",
+                "http://tizen.org/feature/opengles.texture_format.utc",
+                */
+                "http://tizen.org/feature/opengles.version.1_1",
+                "http://tizen.org/feature/opengles.version.2_0",
+                "http://tizen.org/feature/platform.core.api.version",
+                "http://tizen.org/feature/platform.core.cpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.cpu.arch.armv6",
+                "http://tizen.org/feature/platform.core.cpu.arch.armv7",
+                "http://tizen.org/feature/platform.core.cpu.arch.x86",
+                */
+                "http://tizen.org/feature/platform.core.fpu.arch",
+                /*
+                "http://tizen.org/feature/platform.core.fpu.arch.sse2",
+                "http://tizen.org/feature/platform.core.fpu.arch.sse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.ssse3",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv2",
+                "http://tizen.org/feature/platform.core.fpu.arch.vfpv3",
+                */
+                "http://tizen.org/feature/platform.native.api.version",
+                "http://tizen.org/feature/platform.native.osp_compatible",
+                "http://tizen.org/feature/platform.version",
+                "http://tizen.org/feature/platform.web.api.version",
+                "http://tizen.org/feature/profile",
+                "http://tizen.org/feature/screen",
+                "http://tizen.org/feature/screen.auto_rotation",
+                /*
+                "http://tizen.org/feature/screen.bpp",
+                "http://tizen.org/feature/screen.coordinate_system.size.large",
+                "http://tizen.org/feature/screen.coordinate_system.size.normal",
+                "http://tizen.org/feature/screen.dpi",
+                */
+                "http://tizen.org/feature/screen.height",
+                "http://tizen.org/feature/screen.output.hdmi",
+                "http://tizen.org/feature/screen.output.rca",
+                "http://tizen.org/feature/screen.size.normal",
+                /*
+                "http://tizen.org/feature/screen.size.normal.1080.1920",
+                "http://tizen.org/feature/screen.size.normal.240.400",
+                "http://tizen.org/feature/screen.size.normal.320.320",
+                "http://tizen.org/feature/screen.size.normal.320.480",
+                */
+                "http://tizen.org/feature/screen.size.normal.480.800",
+                /*
+                "http://tizen.org/feature/screen.size.normal.540.960",
+                "http://tizen.org/feature/screen.size.normal.600.1024",
+                */
+                "http://tizen.org/feature/screen.size.normal.720.1280",
+                "http://tizen.org/feature/screen.width",
+                "http://tizen.org/feature/sensor.accelerometer",
+                "http://tizen.org/feature/sensor.accelerometer.wakeup",
+                "http://tizen.org/feature/sensor.barometer",
+                "http://tizen.org/feature/sensor.barometer.wakeup",
+                "http://tizen.org/feature/sensor.gyroscope",
+                "http://tizen.org/feature/sensor.gyroscope.wakeup",
+                "http://tizen.org/feature/sensor.heart_rate_monitor",
+                "http://tizen.org/feature/sensor.magnetometer",
+                "http://tizen.org/feature/sensor.magnetometer.wakeup",
+                "http://tizen.org/feature/sensor.pedometer",
+                "http://tizen.org/feature/sensor.photometer",
+                "http://tizen.org/feature/sensor.photometer.wakeup",
+                "http://tizen.org/feature/sensor.proximity",
+                "http://tizen.org/feature/sensor.proximity.wakeup",
+                "http://tizen.org/feature/sensor.tiltmeter",
+                "http://tizen.org/feature/sensor.tiltmeter.wakeup",
+                "http://tizen.org/feature/sensor.ultraviolet",
+                "http://tizen.org/feature/sensor.wrist_up",
+                "http://tizen.org/feature/shell.appwidget",
+                "http://tizen.org/feature/sip.voip",
+                "http://tizen.org/feature/speech.recognition",
+                "http://tizen.org/feature/speech.synthesis",
+                "http://tizen.org/feature/systemsetting",
+                "http://tizen.org/feature/systemsetting.home_screen",
+                "http://tizen.org/feature/systemsetting.incoming_call",
+                "http://tizen.org/feature/systemsetting.lock_screen",
+                "http://tizen.org/feature/systemsetting.notification_email",
+                "http://tizen.org/feature/usb.accessory",
+                "http://tizen.org/feature/usb.host",
+                "http://tizen.org/feature/vision.face_recognition",
+                "http://tizen.org/feature/vision.image_recognition",
+                "http://tizen.org/feature/vision.qrcode_generation",
+                "http://tizen.org/feature/vision.qrcode_recognition",
+                "http://tizen.org/feature/websetting",
+                "http://tizen.org/system/duid",
+                "http://tizen.org/system/platform.name",
+                "http://tizen.org/feature/archive",
+                "http://tizen.org/feature/badge",
+                "http://tizen.org/feature/exif",
+                "http://tizen.org/feature/mediakey",
+                "http://tizen.org/feature/led",
+                "http://tizen.org/feature/multimedia.transcoder",
+                "http://tizen.org/capability/network.bluetooth.always_on",
+                "http://tizen.org/feature/network.bluetooth.audio.call",
+                "http://tizen.org/feature/network.bluetooth.audio.media",
+                "http://tizen.org/feature/network.bluetooth.hid",
+                "http://tizen.org/feature/network.bluetooth.le",
+                "http://tizen.org/feature/network.bluetooth.opp",
+                "http://tizen.org/feature/platform.core.cpu.frequency",
+                "http://tizen.org/feature/platform.version.name",
+                "http://tizen.org/feature/screen.size.all",
+                "http://tizen.org/feature/screen.size.large",
+                "http://tizen.org/feature/screen.size.normal.360.480",
+                "http://tizen.org/feature/sensor.activity_recognition",
+                "http://tizen.org/feature/sensor.gesture_recognition",
+                "http://tizen.org/feature/sensor.gravity",
+                "http://tizen.org/feature/sensor.humidity",
+                "http://tizen.org/feature/sensor.linear_acceleration",
+                "http://tizen.org/feature/sensor.rotation_vector",
+                "http://tizen.org/feature/sensor.temperature",
+                "http://tizen.org/system/build.date",
+                "http://tizen.org/system/build.string",
+                "http://tizen.org/system/build.time",
+                "http://tizen.org/system/manufacturer",
+                "http://tizen.org/system/tizenid",
+                "http://tizen.org/system/model_name",
+                "http://tizen.org/system/platform.communication_processor",
+                "http://tizen.org/system/platform.processor",
+                "http://tizen.org/feature/web.service",
+                "http://tizen.org/feature/humanactivitymonitor"
+                ];
+    if (tizen.systeminfo == 'undefined') {
+        return;
+    } else {
+        summaryXML += "<capabilities>";
+       // var caps = tizen.systeminfo.getCapabilities();
+        for (var i = 0; i < caps.length; i++) {
+               try {
+                   var cap = tizen.systeminfo.getCapability(caps[i]);
+                   console.log(caps[i] + " : " + cap);
+                   if(cap === true || cap ===false) {
+                       summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"boolean\"/>\r\n";
+                   } else {
+                       if (/^\d+$/.test(cap))
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"Integer\">\r\n";
+                       else
+                           summaryXML += "    <capability name=\"" + caps[i] + "\" support=\"" + cap + "\" type=\"String\">\r\n";
+                       //summaryXML += "        <value>" + cap + "</value>\r\n";
+                       summaryXML += "    </capability>\r\n";
+                   }
+               } catch(error) {
+                       console.log("error - "+error.name +", message = "+error.message);
+               }
+        }
+        summaryXML += "</capabilities>";
+    }
+    var summaryDoc = $.parseXML(summaryXML);
+    var testDef = $(_resultXML).find("test_definition");
+    $(testDef[0]).prepend(summaryDoc.documentElement);
+}
+
+function getCapPresent() {
+    try {
+      var caps2 = tizen.systeminfo.getCapability(caps[0]);
+    } catch (err){
+        alert("Exception: " + err.message);
+    }
+}
+
+function isCapPresent(name) {
+    var cap3 = tizen.systeminfo.getCapability(name)
+    if (cap3 != undefined) {
+        if (typeof(cap3) == "boolean")
+            return cap3;
+        else
+            return true;
+    }
+    else
+        return false;
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/js/tests.js b/wearable/tct-behavior-tests/js/tests.js
new file mode 100755 (executable)
index 0000000..bb24be7
--- /dev/null
@@ -0,0 +1,147 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Wang, Jing J <jing.j.wang@intel.com>
+        Li, Hao <haox.li@intel.com>
+        Fan, Yugang <yugang.fan@intel.com>
+
+*/
+
+function EnablePassButton(){
+    $('#pass_button').removeClass("ui-disabled");
+}
+
+function DisablePassButton(){
+    $('#pass_button').addClass("ui-disabled");
+}
+
+function getAppName() {
+    var lpath = window.location.pathname;
+    var from = lpath.lastIndexOf("tests/") + 6;
+    var to = lpath.lastIndexOf("/");
+    return lpath.substring(from, to);
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+function testLaunching(){
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+}
+
+function updateFooterButton(){
+    var footbar = $(':jqmData(role=footer)');
+    footbar.empty();
+    footbar.attr("align", "center");
+    footbar.append("<div data-role=\"controlgroup\" data-type=\"horizontal\">" +
+        "<a href=\"javascript:reportResult('PASS');\" id=\"pass_button\" data-role=\"button\" data-icon=\"check\" style=\"color: green\">Pass</a>" +
+        "<a href=\"javascript:reportResult('FAIL');\" id=\"fail_button\" data-role=\"button\" data-icon=\"delete\" style=\"color: red\">Fail</a>" +
+        "<a href=\"#popup_info\" data-role=\"button\" data-icon=\"info\" data-rel=\"popup\" data-transition=\"pop\">Info</a>" +
+        "<a href=\"javascript:backAppsHome();\" data-role=\"button\" data-icon=\"home\">Back</a></div>");
+
+    footbar.trigger("create");
+    footbar.find(':jqmData(role=button) > span:first-child').css('padding', '15px 10px 15px 30px');
+    $("#popup_info").popup( "option", "theme", "a");
+    var maxHeight = $(window).height() - 100 + "px";
+    $("#popup_info").css("max-height", maxHeight);
+    $("#popup_info").css("margin-bottom", "30px");
+    $("#popup_info").css("overflow-y", "auto");
+}
+
+$(document).bind('pagecreate', updateFooterButton);
+
+function Parm(data, name) {
+    var p;
+    ts = $(data).find(name);
+    if (ts) {
+        t = $(ts).get(0);
+        if (t)
+            p = $(t).text().trim();
+    }
+
+    if (p) {
+        var rawVal = decodeURI(p);
+        if (rawVal.indexOf(',') < 0)
+            p = rawVal;
+        else
+            p = rawVal.split(',');
+    }
+
+    return p;
+}
+
+function getParms() {
+    var parms = new Array();
+    var str = location.search.substring(1);
+    var items = str.split('&');
+    for ( var i = 0; i < items.length; i++) {
+        var pos = items[i].indexOf('=');
+        if (pos > 0) {
+            var key = items[i].substring(0, pos);
+            var val = items[i].substring(pos + 1);
+            if (!parms[key]) {
+                var rawVal = decodeURI(val);
+                if (rawVal.indexOf(',') < 0)
+                    parms[key] = rawVal;
+                else
+                    parms[key] = rawVal.split(',');
+            }
+        }
+    }
+
+    return parms["test_name"];
+}
+
+$(document).ready(function(){
+    testLaunching();
+    var testname = getParms();
+    document.title = testname
+    $("#main_page_title").text(testname);
+    window.history.pushState("","",window.location.href);
+//    var qstr = location.search.substring(1);
+//    if (!qstr || qstr.indexOf("reenter") < 0)
+//        $("[href='#popup_info']").click();
+});
+
+function checkInstalledPkg(pkgId) {
+    var packageInfo = null;
+    try {
+        if(pkgId && (typeof(tizen) != 'undefined')) {
+            packageInfo = tizen.package.getPackageInfo(pkgId);
+        }
+    } catch (e) {}
+
+    return packageInfo === null ? false : true;
+}
diff --git a/wearable/tct-behavior-tests/js/thirdparty/jquery.js b/wearable/tct-behavior-tests/js/thirdparty/jquery.js
new file mode 100755 (executable)
index 0000000..f65cf1d
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */\r
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call(" ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/js/thirdparty/jquery.mobile.js b/wearable/tct-behavior-tests/js/thirdparty/jquery.mobile.js
new file mode 100755 (executable)
index 0000000..e0d02a9
--- /dev/null
@@ -0,0 +1,2 @@
+/*! jQuery Mobile vGit Build: SHA1: b49cc06499abf8f987cf90f35349cfac0918c939 <> Date: Tue Oct 2 11:22:34 2012 -0700 jquerymobile.com | jquery.org/license !*/
+(function(a,b,c){typeof define=="function"&&define.amd?define(["jquery"],function(d){return c(d,a,b),d.mobile}):c(a.jQuery,a,b)})(this,document,function(a,b,c,d){(function(a,b,d){var e={};a.mobile=a.extend({},{version:"1.2.0",ns:"",subPageUrlKey:"ui-page",activePageClass:"ui-page-active",activeBtnClass:"ui-btn-active",focusClass:"ui-focus",ajaxEnabled:!0,hashListeningEnabled:!0,linkBindingEnabled:!0,defaultPageTransition:"fade",maxTransitionWidth:!1,minScrollBack:250,touchOverflowEnabled:!1,defaultDialogTransition:"pop",pageLoadErrorMessage:"Error Loading Page",pageLoadErrorMessageTheme:"e",phonegapNavigationEnabled:!1,autoInitializePage:!0,pushStateEnabled:!0,ignoreContentEnabled:!1,orientationChangeEnabled:!0,buttonMarkup:{hoverDelay:200},keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,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,WINDOWS:91},silentScroll:function(d){a.type(d)!=="number"&&(d=a.mobile.defaultHomeScroll),a.event.special.scrollstart.enabled=!1,setTimeout(function(){b.scrollTo(0,d),a(c).trigger("silentscroll",{x:0,y:d})},20),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},nsNormalizeDict:e,nsNormalize:function(b){if(!b)return;return e[b]||(e[b]=a.camelCase(a.mobile.ns+b))},getInheritedTheme:function(a,b){var c=a[0],d="",e=/ui-(bar|body|overlay)-([a-z])\b/,f,g;while(c){f=c.className||"";if(f&&(g=e.exec(f))&&(d=g[2]))break;c=c.parentNode}return d||b||"a"},closestPageData:function(a){return a.closest(':jqmData(role="page"), :jqmData(role="dialog")').data("page")},enhanceable:function(a){return this.haveParents(a,"enhance")},hijackable:function(a){return this.haveParents(a,"ajax")},haveParents:function(b,c){if(!a.mobile.ignoreContentEnabled)return b;var d=b.length,e=a(),f,g,h;for(var i=0;i<d;i++){g=b.eq(i),h=!1,f=b[i];while(f){var j=f.getAttribute?f.getAttribute("data-"+a.mobile.ns+c):"";if(j==="false"){h=!0;break}f=f.parentNode}h||(e=e.add(g))}return e},getScreenHeight:function(){return b.innerHeight||a(b).height()}},a.mobile),a.fn.jqmData=function(b,c){var e;return typeof b!="undefined"&&(b&&(b=a.mobile.nsNormalize(b)),arguments.length<2||c===d?e=this.data(b):e=this.data(b,c)),e},a.jqmData=function(b,c,d){var e;return typeof c!="undefined"&&(e=a.data(b,c?a.mobile.nsNormalize(c):c,d)),e},a.fn.jqmRemoveData=function(b){return this.removeData(a.mobile.nsNormalize(b))},a.jqmRemoveData=function(b,c){return a.removeData(b,a.mobile.nsNormalize(c))},a.fn.removeWithDependents=function(){a.removeWithDependents(this)},a.removeWithDependents=function(b){var c=a(b);(c.jqmData("dependents")||a()).remove(),c.remove()},a.fn.addDependents=function(b){a.addDependents(a(this),b)},a.addDependents=function(b,c){var d=a(b).jqmData("dependents")||a();a(b).jqmData("dependents",a.merge(d,c))},a.fn.getEncodedText=function(){return a("<div/>").text(a(this).text()).html()},a.fn.jqmEnhanceable=function(){return a.mobile.enhanceable(this)},a.fn.jqmHijackable=function(){return a.mobile.hijackable(this)};var f=a.find,g=/:jqmData\(([^)]*)\)/g;a.find=function(b,c,d,e){return b=b.replace(g,"[data-"+(a.mobile.ns||"")+"$1]"),f.call(this,b,c,d,e)},a.extend(a.find,f),a.find.matches=function(b,c){return a.find(b,null,null,c)},a.find.matchesSelector=function(b,c){return a.find(c,null,null,[b]).length>0}})(a,this),function(a,b){var c=0,d=Array.prototype.slice,e=a.cleanData;a.cleanData=function(b){for(var c=0,d;(d=b[c])!=null;c++)try{a(d).triggerHandler("remove")}catch(f){}e(b)},a.widget=function(b,c,d){var e,f,g,h,i=b.split(".")[0];b=b.split(".")[1],e=i+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][e]=function(b){return!!a.data(b,e)},a[i]=a[i]||{},f=a[i][b],g=a[i][b]=function(a,b){if(!this._createWidget)return new g(a,b);arguments.length&&this._createWidget(a,b)},a.extend(g,f,{version:d.version,_proto:a.extend({},d),_childConstructors:[]}),h=new c,h.options=a.widget.extend({},h.options),a.each(d,function(b,e){a.isFunction(e)&&(d[b]=function(){var a=function(){return c.prototype[b].apply(this,arguments)},d=function(a){return c.prototype[b].apply(this,a)};return function(){var b=this._super,c=this._superApply,f;return this._super=a,this._superApply=d,f=e.apply(this,arguments),this._super=b,this._superApply=c,f}}())}),g.prototype=a.widget.extend(h,{widgetEventPrefix:b},d,{constructor:g,namespace:i,widgetName:b,widgetBaseClass:e,widgetFullName:e}),f?(a.each(f._childConstructors,function(b,c){var d=c.prototype;a.widget(d.namespace+"."+d.widgetName,g,c._proto)}),delete f._childConstructors):c._childConstructors.push(g),a.widget.bridge(b,g)},a.widget.extend=function(c){var e=d.call(arguments,1),f=0,g=e.length,h,i;for(;f<g;f++)for(h in e[f])i=e[f][h],e[f].hasOwnProperty(h)&&i!==b&&(c[h]=a.isPlainObject(i)?a.widget.extend({},c[h],i):i);return c},a.widget.bridge=function(c,e){var f=e.prototype.widgetFullName;a.fn[c]=function(g){var h=typeof g=="string",i=d.call(arguments,1),j=this;return g=!h&&i.length?a.widget.extend.apply(null,[g].concat(i)):g,h?this.each(function(){var d,e=a.data(this,f);if(!e)return a.error("cannot call methods on "+c+" prior to initialization; "+"attempted to call method '"+g+"'");if(!a.isFunction(e[g])||g.charAt(0)==="_")return a.error("no such method '"+g+"' for "+c+" widget instance");d=e[g].apply(e,i);if(d!==e&&d!==b)return j=d&&d.jquery?j.pushStack(d.get()):d,!1}):this.each(function(){var b=a.data(this,f);b?b.option(g||{})._init():new e(g,this)}),j}},a.Widget=function(a,b){},a.Widget._childConstructors=[],a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(b,d){d=a(d||this.defaultElement||this)[0],this.element=a(d),this.uuid=c++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=a.widget.extend({},this.options,this._getCreateOptions(),b),this.bindings=a(),this.hoverable=a(),this.focusable=a(),d!==this&&(a.data(d,this.widgetName,this),a.data(d,this.widgetFullName,this),this._on({remove:"destroy"}),this.document=a(d.style?d.ownerDocument:d.document||d),this.window=a(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:a.noop,_getCreateEventData:a.noop,_create:a.noop,_init:a.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(a.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:a.noop,widget:function(){return this.element},option:function(c,d){var e=c,f,g,h;if(arguments.length===0)return a.widget.extend({},this.options);if(typeof c=="string"){e={},f=c.split("."),c=f.shift();if(f.length){g=e[c]=a.widget.extend({},this.options[c]);for(h=0;h<f.length-1;h++)g[f[h]]=g[f[h]]||{},g=g[f[h]];c=f.pop();if(d===b)return g[c]===b?null:g[c];g[c]=d}else{if(d===b)return this.options[c]===b?null:this.options[c];e[c]=d}}return this._setOptions(e),this},_setOptions:function(a){var b;for(b in a)this._setOption(b,a[b]);return this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!b).attr("aria-disabled",b),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(b,c){c?(b=a(b),this.bindings=this.bindings.add(b)):(c=b,b=this.element);var d=this;a.each(c,function(c,e){function f(){if(d.options.disabled===!0||a(this).hasClass("ui-state-disabled"))return;return(typeof e=="string"?d[e]:e).apply(d,arguments)}typeof e!="string"&&(f.guid=e.guid=e.guid||f.guid||a.guid++);var g=c.match(/^(\w+)\s*(.*)$/),h=g[1]+d.eventNamespace,i=g[2];i?d.widget().delegate(i,h,f):b.bind(h,f)})},_off:function(a,b){b=(b||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,a.unbind(b).undelegate(b)},_delay:function(a,b){function c(){return(typeof a=="string"?d[a]:a).apply(d,arguments)}var d=this;return setTimeout(c,b||0)},_hoverable:function(b){this.hoverable=this.hoverable.add(b),this._on(b,{mouseenter:function(b){a(b.currentTarget).addClass("ui-state-hover")},mouseleave:function(b){a(b.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(b){this.focusable=this.focusable.add(b),this._on(b,{focusin:function(b){a(b.currentTarget).addClass("ui-state-focus")},focusout:function(b){a(b.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.apply(this.element[0],[c].concat(d))===!1||c.isDefaultPrevented())}},a.each({show:"fadeIn",hide:"fadeOut"},function(b,c){a.Widget.prototype["_"+b]=function(d,e,f){typeof e=="string"&&(e={effect:e});var g,h=e?e===!0||typeof e=="number"?c:e.effect||c:b;e=e||{},typeof e=="number"&&(e={duration:e}),g=!a.isEmptyObject(e),e.complete=f,e.delay&&d.delay(e.delay),g&&a.effects&&(a.effects.effect[h]||a.uiBackCompat!==!1&&a.effects[h])?d[b](e):h!==b&&d[h]?d[h](e.duration,e.easing,f):d.queue(function(c){a(this)[b](),f&&f.call(d[0]),c()})}}),a.uiBackCompat!==!1&&(a.Widget.prototype._getCreateOptions=function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]})}(a),function(a,b){a.widget("mobile.widget",{_createWidget:function(){a.Widget.prototype._createWidget.apply(this,arguments),this._trigger("init")},_getCreateOptions:function(){var c=this.element,d={};return a.each(this.options,function(a){var e=c.jqmData(a.replace(/[A-Z]/g,function(a){return"-"+a.toLowerCase()}));e!==b&&(d[a]=e)}),d},enhanceWithin:function(b,c){this.enhance(a(this.options.initSelector,a(b)),c)},enhance:function(b,c){var d,e,f=a(b),g=this;f=a.mobile.enhanceable(f),c&&f.length&&(d=a.mobile.closestPageData(f),e=d&&d.keepNativeSelector()||"",f=f.not(e)),f[this.widgetName]()},raise:function(a){throw"Widget ["+this.widgetName+"]: "+a}})}(a),function(a,b){a.extend(a.mobile,{loadingMessageTextVisible:d,loadingMessageTheme:d,loadingMessage:d,showPageLoadingMsg:function(b,c,d){a.mobile.loading("show",b,c,d)},hidePageLoadingMsg:function(){a.mobile.loading("hide")},loading:function(){this.loaderWidget.loader.apply(this.loaderWidget,arguments)}});var c="ui-loader",e=a("html"),f=a(b);a.widget("mobile.loader",{options:{theme:"a",textVisible:!1,html:"",text:"loading"},defaultHtml:"<div class='"+c+"'>"+"<span class='ui-icon ui-icon-loading'></span>"+"<h1></h1>"+"</div>",fakeFixLoader:function(){var b=a("."+a.mobile.activeBtnClass).first();this.element.css({top:a.support.scrollTop&&f.scrollTop()+f.height()/2||b.length&&b.offset().top||100})},checkLoaderPosition:function(){var b=this.element.offset(),c=f.scrollTop(),d=a.mobile.getScreenHeight();if(b.top<c||b.top-c>d)this.element.addClass("ui-loader-fakefix"),this.fakeFixLoader(),f.unbind("scroll",this.checkLoaderPosition).bind("scroll",this.fakeFixLoader)},resetHtml:function(){this.element.html(a(this.defaultHtml).html())},show:function(b,g,h){var i,j,k,l;this.resetHtml(),a.type(b)==="object"?(l=a.extend({},this.options,b),b=l.theme||a.mobile.loadingMessageTheme):(l=this.options,b=b||a.mobile.loadingMessageTheme||l.theme),j=g||a.mobile.loadingMessage||l.text,e.addClass("ui-loading");if(a.mobile.loadingMessage!==!1||l.html)a.mobile.loadingMessageTextVisible!==d?i=a.mobile.loadingMessageTextVisible:i=l.textVisible,this.element.attr("class",c+" ui-corner-all ui-body-"+b+" ui-loader-"+(i||g||b.text?"verbose":"default")+(l.textonly||h?" ui-loader-textonly":"")),l.html?this.element.html(l.html):this.element.find("h1").text(j),this.element.appendTo(a.mobile.pageContainer),this.checkLoaderPosition(),f.bind("scroll",a.proxy(this.checkLoaderPosition,this))},hide:function(){e.removeClass("ui-loading"),a.mobile.loadingMessage&&this.element.removeClass("ui-loader-fakefix"),a(b).unbind("scroll",a.proxy(this.fakeFixLoader,this)),a(b).unbind("scroll",a.proxy(this.checkLoaderPosition,this))}}),f.bind("pagecontainercreate",function(){a.mobile.loaderWidget=a.mobile.loaderWidget||a(a.mobile.loader.prototype.defaultHtml).loader()})}(a,this),function(a,b,c,d){function x(a){while(a&&typeof a.originalEvent!="undefined")a=a.originalEvent;return a}function y(b,c){var e=b.type,f,g,i,k,l,m,n,o,p;b=a.Event(b),b.type=c,f=b.originalEvent,g=a.event.props,e.search(/^(mouse|click)/)>-1&&(g=j);if(f)for(n=g.length,k;n;)k=g[--n],b[k]=f[k];e.search(/mouse(down|up)|click/)>-1&&!b.which&&(b.which=1);if(e.search(/^touch/)!==-1){i=x(f),e=i.touches,l=i.changedTouches,m=e&&e.length?e[0]:l&&l.length?l[0]:d;if(m)for(o=0,p=h.length;o<p;o++)k=h[o],b[k]=m[k]}return b}function z(b){var c={},d,f;while(b){d=a.data(b,e);for(f in d)d[f]&&(c[f]=c.hasVirtualBinding=!0);b=b.parentNode}return c}function A(b,c){var d;while(b){d=a.data(b,e);if(d&&(!c||d[c]))return b;b=b.parentNode}return null}function B(){r=!1}function C(){r=!0}function D(){v=0,p.length=0,q=!1,C()}function E(){B()}function F(){G(),l=setTimeout(function(){l=0,D()},a.vmouse.resetTimerDuration)}function G(){l&&(clearTimeout(l),l=0)}function H(b,c,d){var e;if(d&&d[b]||!d&&A(c.target,b))e=y(c,b),a(c.target).trigger(e);return e}function I(b){var c=a.data(b.target,f);if(!q&&(!v||v!==c)){var d=H("v"+b.type,b);d&&(d.isDefaultPrevented()&&b.preventDefault(),d.isPropagationStopped()&&b.stopPropagation(),d.isImmediatePropagationStopped()&&b.stopImmediatePropagation())}}function J(b){var c=x(b).touches,d,e;if(c&&c.length===1){d=b.target,e=z(d);if(e.hasVirtualBinding){v=u++,a.data(d,f,v),G(),E(),o=!1;var g=x(b).touches[0];m=g.pageX,n=g.pageY,H("vmouseover",b,e),H("vmousedown",b,e)}}}function K(a){if(r)return;o||H("vmousecancel",a,z(a.target)),o=!0,F()}function L(b){if(r)return;var c=x(b).touches[0],d=o,e=a.vmouse.moveDistanceThreshold,f=z(b.target);o=o||Math.abs(c.pageX-m)>e||Math.abs(c.pageY-n)>e,o&&!d&&H("vmousecancel",b,f),H("vmousemove",b,f),F()}function M(a){if(r)return;C();var b=z(a.target),c;H("vmouseup",a,b);if(!o){var d=H("vclick",a,b);d&&d.isDefaultPrevented()&&(c=x(a).changedTouches[0],p.push({touchID:v,x:c.clientX,y:c.clientY}),q=!0)}H("vmouseout",a,b),o=!1,F()}function N(b){var c=a.data(b,e),d;if(c)for(d in c)if(c[d])return!0;return!1}function O(){}function P(b){var c=b.substr(1);return{setup:function(d,f){N(this)||a.data(this,e,{});var g=a.data(this,e);g[b]=!0,k[b]=(k[b]||0)+1,k[b]===1&&t.bind(c,I),a(this).bind(c,O),s&&(k.touchstart=(k.touchstart||0)+1,k.touchstart===1&&t.bind("touchstart",J).bind("touchend",M).bind("touchmove",L).bind("scroll",K))},teardown:function(d,f){--k[b],k[b]||t.unbind(c,I),s&&(--k.touchstart,k.touchstart||t.unbind("touchstart",J).unbind("touchmove",L).unbind("touchend",M).unbind("scroll",K));var g=a(this),h=a.data(this,e);h&&(h[b]=!1),g.unbind(c,O),N(this)||g.removeData(e)}}}var e="virtualMouseBindings",f="virtualTouchID",g="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),h="clientX clientY pageX pageY screenX screenY".split(" "),i=a.event.mouseHooks?a.event.mouseHooks.props:[],j=a.event.props.concat(i),k={},l=0,m=0,n=0,o=!1,p=[],q=!1,r=!1,s="addEventListener"in c,t=a(c),u=1,v=0,w;a.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(var Q=0;Q<g.length;Q++)a.event.special[g[Q]]=P(g[Q]);s&&c.addEventListener("click",function(b){var c=p.length,d=b.target,e,g,h,i,j,k;if(c){e=b.clientX,g=b.clientY,w=a.vmouse.clickDistanceThreshold,h=d;while(h){for(i=0;i<c;i++){j=p[i],k=0;if(h===d&&Math.abs(j.x-e)<w&&Math.abs(j.y-g)<w||a.data(h,f)===j.touchID){b.preventDefault(),b.stopPropagation();return}}h=h.parentNode}}},!0)}(a,b,c),function(a,b){var d={touch:"ontouchend"in c};a.mobile=a.mobile||{},a.mobile.support=a.mobile.support||{},a.extend(a.support,d),a.extend(a.mobile.support,d)}(a),function(a,b,d){function j(b,c,d){var e=d.type;d.type=c,a.event.handle.call(b,d),d.type=e}a.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(b,c){a.fn[c]=function(a){return a?this.bind(c,a):this.trigger(c)},a.attrFn&&(a.attrFn[c]=!0)});var e=a.mobile.support.touch,f="touchmove scroll",g=e?"touchstart":"mousedown",h=e?"touchend":"mouseup",i=e?"touchmove":"mousemove";a.event.special.scrollstart={enabled:!0,setup:function(){function g(a,c){d=c,j(b,d?"scrollstart":"scrollstop",a)}var b=this,c=a(b),d,e;c.bind(f,function(b){if(!a.event.special.scrollstart.enabled)return;d||g(b,!0),clearTimeout(e),e=setTimeout(function(){g(b,!1)},50)})}},a.event.special.tap={tapholdThreshold:750,setup:function(){var b=this,d=a(b);d.bind("vmousedown",function(e){function i(){clearTimeout(h)}function k(){i(),d.unbind("vclick",l).unbind("vmouseup",i),a(c).unbind("vmousecancel",k)}function l(a){k(),f===a.target&&j(b,"tap",a)}if(e.which&&e.which!==1)return!1;var f=e.target,g=e.originalEvent,h;d.bind("vmouseup",i).bind("vclick",l),a(c).bind("vmousecancel",k),h=setTimeout(function(){j(b,"taphold",a.Event("taphold",{target:f}))},a.event.special.tap.tapholdThreshold)})}},a.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:75,setup:function(){var b=this,c=a(b);c.bind(g,function(b){function j(b){if(!f)return;var c=b.originalEvent.touches?b.originalEvent.touches[0]:b;g={time:(new Date).getTime(),coords:[c.pageX,c.pageY]},Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.scrollSupressionThreshold&&b.preventDefault()}var e=b.originalEvent.touches?b.originalEvent.touches[0]:b,f={time:(new Date).getTime(),coords:[e.pageX,e.pageY],origin:a(b.target)},g;c.bind(i,j).one(h,function(b){c.unbind(i,j),f&&g&&g.time-f.time<a.event.special.swipe.durationThreshold&&Math.abs(f.coords[0]-g.coords[0])>a.event.special.swipe.horizontalDistanceThreshold&&Math.abs(f.coords[1]-g.coords[1])<a.event.special.swipe.verticalDistanceThreshold&&f.origin.trigger("swipe").trigger(f.coords[0]>g.coords[0]?"swipeleft":"swiperight"),f=g=d})})}},a.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe",swiperight:"swipe"},function(b,c){a.event.special[b]={setup:function(){a(this).bind(c,a.noop)}}})}(a,this),function(a,c){a.extend(a.support,{orientation:"orientation"in b&&"onorientationchange"in b})}(a),function(a){a.event.special.throttledresize={setup:function(){a(this).bind("resize",c)},teardown:function(){a(this).unbind("resize",c)}};var b=250,c=function(){f=(new Date).getTime(),g=f-d,g>=b?(d=f,a(this).trigger("throttledresize")):(e&&clearTimeout(e),e=setTimeout(c,b-g))},d=0,e,f,g}(a),function(a,b){function o(){var a=g();a!==h&&(h=a,d.trigger(e))}var d=a(b),e="orientationchange",f,g,h,i,j,k={0:!0,180:!0};if(a.support.orientation){var l=b.innerWidth||a(b).width(),m=b.innerHeight||a(b).height(),n=50;i=l>m&&l-m>n,j=k[b.orientation];if(i&&j||!i&&!j)k={"-90":!0,90:!0}}a.event.special.orientationchange=a.extend({},a.event.special.orientationchange,{setup:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;h=g(),d.bind("throttledresize",o)},teardown:function(){if(a.support.orientation&&!a.event.special.orientationchange.disabled)return!1;d.unbind("throttledresize",o)},add:function(a){var b=a.handler;a.handler=function(a){return a.orientation=g(),b.apply(this,arguments)}}}),a.event.special.orientationchange.orientation=g=function(){var d=!0,e=c.documentElement;return a.support.orientation?d=k[b.orientation]:d=e&&e.clientWidth/e.clientHeight<1.1,d?"portrait":"landscape"},a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.attrFn&&(a.attrFn[e]=!0)}(a,this),function(a,d){var e=a(b),f=a("html");a.mobile.media=function(){var b={},d=a("<div id='jquery-mediatest'></div>"),e=a("<body>").append(d);return function(a){if(!(a in b)){var g=c.createElement("style"),h="@media "+a+" { #jquery-mediatest { position:absolute; } }";g.type="text/css",g.styleSheet?g.styleSheet.cssText=h:g.appendChild(c.createTextNode(h)),f.prepend(e).prepend(g),b[a]=d.css("position")==="absolute",e.add(g).remove()}return b[a]}}()}(a),function(a,d){function e(a){var b=a.charAt(0).toUpperCase()+a.substr(1),c=(a+" "+h.join(b+" ")+b).split(" ");for(var e in c)if(g[c[e]]!==d)return!0}function m(a,b,d){var e=c.createElement("div"),f=function(a){return a.charAt(0).toUpperCase()+a.substr(1)},g=function(a){return"-"+a.charAt(0).toLowerCase()+a.substr(1)+"-"},i=function(c){var d=g(c)+a+": "+b+";",h=f(c),i=h+f(a);e.setAttribute("style",d),!e.style[i]||(k=!0)},j=d?[d]:h,k;for(var l=0;l<j.length;l++)i(j[l]);return!!k}function n(){var b="transform-3d";return m("perspective","10px","moz")||a.mobile.media("(-"+h.join("-"+b+"),(-")+"-"+b+"),("+b+")")}function o(){var b=location.protocol+"//"+location.host+location.pathname+"ui-dir/",c=a("head base"),d=null,e="",g,h;return c.length?e=c.attr("href"):c=d=a("<base>",{href:b}).appendTo("head"),g=a("<a href='testurl' />").prependTo(f),h=g[0].href,c[0].href=e||location.pathname,d&&d.remove(),h.indexOf(b)===0}function p(){var a=c.createElement("x"),d=c.documentElement,e=b.getComputedStyle,f;return"pointerEvents"in a.style?(a.style.pointerEvents="auto",a.style.pointerEvents="x",d.appendChild(a),f=e&&e(a,"").pointerEvents==="auto",d.removeChild(a),!!f):!1}function q(){var a=c.createElement("div");return typeof a.getBoundingClientRect!="undefined"}var f=a("<body>").prependTo("html"),g=f[0].style,h=["Webkit","Moz","O"],i="palmGetResource"in b,j=b.opera,k=b.operamini&&{}.toString.call(b.operamini)==="[object OperaMini]",l=b.blackberry&&!e("-webkit-transform");a.extend(a.mobile,{browser:{}}),a.mobile.browser.ie=function(){var a=3,b=c.createElement("div"),d=b.all||[];do b.innerHTML="<!--[if gt IE "+ ++a+"]><br><![endif]-->";while(d[0]);return a>4?a:!a}(),a.extend(a.support,{cssTransitions:"WebKitTransitionEvent"in b||m("transition","height 100ms linear")&&!j,pushState:"pushState"in history&&"replaceState"in history,mediaquery:a.mobile.media("only all"),cssPseudoElement:!!e("content"),touchOverflow:!!e("overflowScrolling"),cssTransform3d:n(),boxShadow:!!e("boxShadow")&&!l,scrollTop:("pageXOffset"in b||"scrollTop"in c.documentElement||"scrollTop"in f[0])&&!i&&!k,dynamicBaseTag:o(),cssPointerEvents:p(),boundingRect:q()}),f.remove();var r=function(){var a=b.navigator.userAgent;return a.indexOf("Nokia")>-1&&(a.indexOf("Symbian/3")>-1||a.indexOf("Series60/5")>-1)&&a.indexOf("AppleWebKit")>-1&&a.match(/(BrowserNG|NokiaBrowser)\/7\.[0-3]/)}();a.mobile.gradeA=function(){return(a.support.mediaquery||a.mobile.browser.ie&&a.mobile.browser.ie>=7)&&(a.support.boundingRect||a.fn.jquery.match(/1\.[0-7+]\.[0-9+]?/)!==null)},a.mobile.ajaxBlacklist=b.blackberry&&!b.WebKitPoint||k||r,r&&a(function(){a("head link[rel='stylesheet']").attr("rel","alternate stylesheet").attr("rel","stylesheet")}),a.support.boxShadow||a("html").addClass("ui-mobile-nosupport-boxshadow")}(a),function(a,b){a.widget("mobile.page",a.mobile.widget,{options:{theme:"c",domCache:!1,keepNativeDefault:":jqmData(role='none'), :jqmData(role='nojs')"},_create:function(){var a=this;if(a._trigger("beforecreate")===!1)return!1;a.element.attr("tabindex","0").addClass("ui-page ui-body-"+a.options.theme).bind("pagebeforehide",function(){a.removeContainerBackground()}).bind("pagebeforeshow",function(){a.setContainerBackground()})},removeContainerBackground:function(){a.mobile.pageContainer.removeClass("ui-overlay-"+a.mobile.getInheritedTheme(this.element.parent()))},setContainerBackground:function(b){this.options.theme&&a.mobile.pageContainer.addClass("ui-overlay-"+(b||this.options.theme))},keepNativeSelector:function(){var b=this.options,c=b.keepNative&&a.trim(b.keepNative);return c&&b.keepNative!==b.keepNativeDefault?[b.keepNative,b.keepNativeDefault].join(", "):b.keepNativeDefault}})}(a),function(a,b,d){function k(a){return a=a||location.href,"#"+a.replace(/^[^#]*#?(.*)$/,"$1")}var e="hashchange",f=c,g,h=a.event.special,i=f.documentMode,j="on"+e in b&&(i===d||i>7);a.fn[e]=function(a){return a?this.bind(e,a):this.trigger(e)},a.fn[e].delay=50,h[e]=a.extend(h[e],{setup:function(){if(j)return!1;a(g.start)},teardown:function(){if(j)return!1;a(g.stop)}}),g=function(){function n(){var c=k(),d=m(h);c!==h?(l(h=c,d),a(b).trigger(e)):d!==h&&(location.href=location.href.replace(/#.*/,"")+d),g=setTimeout(n,a.fn[e].delay)}var c={},g,h=k(),i=function(a){return a},l=i,m=i;return c.start=function(){g||n()},c.stop=function(){g&&clearTimeout(g),g=d},a.browser.msie&&!j&&function(){var b,d;c.start=function(){b||(d=a.fn[e].src,d=d&&d+k(),b=a('<iframe tabindex="-1" title="empty"/>').hide().one("load",function(){d||l(k()),n()}).attr("src",d||"javascript:0").insertAfter("body")[0].contentWindow,f.onpropertychange=function(){try{event.propertyName==="title"&&(b.document.title=f.title)}catch(a){}})},c.stop=i,m=function(){return k(b.location.href)},l=function(c,d){var g=b.document,h=a.fn[e].domain;c!==d&&(g.title=f.title,g.open(),h&&g.write('<script>document.domain="'+h+'"</script>'),g.close(),b.location.hash=c)}}(),c}()}(a,this),function(a,b,c){var d=function(d){return d===c&&(d=!0),function(c,e,f,g){var h=new a.Deferred,i=e?" reverse":"",j=a.mobile.urlHistory.getActive(),k=j.lastScroll||a.mobile.defaultHomeScroll,l=a.mobile.getScreenHeight(),m=a.mobile.maxTransitionWidth!==!1&&a(b).width()>a.mobile.maxTransitionWidth,n=!a.support.cssTransitions||m||!c||c==="none"||Math.max(a(b).scrollTop(),k)>a.mobile.getMaxScrollForTransition(),o=" ui-page-pre-in",p=function(){a.mobile.pageContainer.toggleClass("ui-mobile-viewport-transitioning viewport-"+c)},q=function(){a.event.special.scrollstart.enabled=!1,b.scrollTo(0,k),setTimeout(function(){a.event.special.scrollstart.enabled=!0},150)},r=function(){g.removeClass(a.mobile.activePageClass+" out in reverse "+c).height("")},s=function(){d?g.animationComplete(t):t(),g.height(l+a(b).scrollTop()).addClass(c+" out"+i)},t=function(){g&&d&&r(),u()},u=function(){f.css("z-index",-10),f.addClass(a.mobile.activePageClass+o),a.mobile.focusPage(f),f.height(l+k),q(),f.css("z-index",""),n||f.animationComplete(v),f.removeClass(o).addClass(c+" in"+i),n&&v()},v=function(){d||g&&r(),f.removeClass("out in reverse "+c).height(""),p(),a(b).scrollTop()!==k&&q(),h.resolve(c,e,f,g,!0)};return p(),g&&!n?s():t(),h.promise()}},e=d(),f=d(!1),g=function(){return a.mobile.getScreenHeight()*3};a.mobile.defaultTransitionHandler=e,a.mobile.transitionHandlers={"default":a.mobile.defaultTransitionHandler,sequential:e,simultaneous:f},a.mobile.transitionFallbacks={},a.mobile._maybeDegradeTransition=function(b){return b&&!a.support.cssTransform3d&&a.mobile.transitionFallbacks[b]&&(b=a.mobile.transitionFallbacks[b]),b},a.mobile.getMaxScrollForTransition=a.mobile.getMaxScrollForTransition||g}(a,this),function(a,d){function u(b){!!i&&(!i.closest("."+a.mobile.activePageClass).length||b)&&i.removeClass(a.mobile.activeBtnClass),i=null}function v(){m=!1,l.length>0&&a.mobile.changePage.apply(null,l.pop())}function z(b,c,d,e){c&&c.data("page")._trigger("beforehide",null,{nextPage:b}),b.data("page")._trigger("beforeshow",null,{prevPage:c||a("")}),a.mobile.hidePageLoadingMsg(),d=a.mobile._maybeDegradeTransition(d);var f=a.mobile.transitionHandlers[d||"default"]||a.mobile.defaultTransitionHandler,g=f(d,e,b,c);return g.done(function(){c&&c.data("page")._trigger("hide",null,{nextPage:b}),b.data("page")._trigger("show",null,{prevPage:c||a("")})}),g}function A(){var b=a("."+a.mobile.activePageClass),c=parseFloat(b.css("padding-top")),d=parseFloat(b.css("padding-bottom")),e=parseFloat(b.css("border-top-width")),f=parseFloat(b.css("border-bottom-width"));b.css("min-height",s()-c-d-e-f)}function B(b,c){c&&b.attr("data-"+a.mobile.ns+"role",c),b.page()}function C(a){while(a){if(typeof a.nodeName=="string"&&a.nodeName.toLowerCase()==="a")break;a=a.parentNode}return a}function D(b){var c=a(b).closest(".ui-page").jqmData("url"),d=q.hrefNoHash;if(!c||!h.isPath(c))c=d;return h.makeUrlAbsolute(c,d)}var e=a(b),f=a("html"),g=a("head"),h={urlParseRE:/^(((([^:\/#\?]+:)?(?:(\/\/)((?:(([^:@\/#\?]+)(?:\:([^:@\/#\?]+))?)@)?(([^:\/#\?\]\[]+|\[[^\/\]@#?]+\])(?:\:([0-9]+))?))?)?)?((\/?(?:[^\/\?#]+\/+)*)([^\?#]*)))?(\?[^#]+)?)(#.*)?/,getLocation:function(a){var b=a?this.parseUrl(a):location,c=this.parseUrl(a||location.href).hash;return c=c==="#"?"":c,b.protocol+"//"+b.host+b.pathname+b.search+c},parseLocation:function(){return this.parseUrl(this.getLocation())},parseUrl:function(b){if(a.type(b)==="object")return b;var c=h.urlParseRE.exec(b||"")||[];return{href:c[0]||"",hrefNoHash:c[1]||"",hrefNoSearch:c[2]||"",domain:c[3]||"",protocol:c[4]||"",doubleSlash:c[5]||"",authority:c[6]||"",username:c[8]||"",password:c[9]||"",host:c[10]||"",hostname:c[11]||"",port:c[12]||"",pathname:c[13]||"",directory:c[14]||"",filename:c[15]||"",search:c[16]||"",hash:c[17]||""}},makePathAbsolute:function(a,b){if(a&&a.charAt(0)==="/")return a;a=a||"",b=b?b.replace(/^\/|(\/[^\/]*|[^\/]+)$/g,""):"";var c=b?b.split("/"):[],d=a.split("/");for(var e=0;e<d.length;e++){var f=d[e];switch(f){case".":break;case"..":c.length&&c.pop();break;default:c.push(f)}}return"/"+c.join("/")},isSameDomain:function(a,b){return h.parseUrl(a).domain===h.parseUrl(b).domain},isRelativeUrl:function(a){return h.parseUrl(a).protocol===""},isAbsoluteUrl:function(a){return h.parseUrl(a).protocol!==""},makeUrlAbsolute:function(a,b){if(!h.isRelativeUrl(a))return a;b===d&&(b=q);var c=h.parseUrl(a),e=h.parseUrl(b),f=c.protocol||e.protocol,g=c.protocol?c.doubleSlash:c.doubleSlash||e.doubleSlash,i=c.authority||e.authority,j=c.pathname!=="",k=h.makePathAbsolute(c.pathname||e.filename,e.pathname),l=c.search||!j&&e.search||"",m=c.hash;return f+g+i+k+l+m},addSearchParams:function(b,c){var d=h.parseUrl(b),e=typeof c=="object"?a.param(c):c,f=d.search||"?";return d.hrefNoSearch+f+(f.charAt(f.length-1)!=="?"?"&":"")+e+(d.hash||"")},convertUrlToDataUrl:function(a){var c=h.parseUrl(a);return h.isEmbeddedPage(c)?c.hash.split(n)[0].replace(/^#/,""):h.isSameDomain(c,q)?c.hrefNoHash.replace(q.domain,"").split(n)[0]:b.decodeURIComponent(a)},get:function(a){return a===d&&(a=h.parseLocation().hash),h.stripHash(a).replace(/[^\/]*\.[^\/*]+$/,"")},getFilePath:function(b){var c="&"+a.mobile.subPageUrlKey;return b&&b.split(c)[0].split(n)[0]},set:function(a){location.hash=a},isPath:function(a){return/\//.test(a)},clean:function(a){return a.replace(q.domain,"")},stripHash:function(a){return a.replace(/^#/,"")},cleanHash:function(a){return h.stripHash(a.replace(/\?.*$/,"").replace(n,""))},isHashValid:function(a){return/^#[^#]+$/.test(a)},isExternal:function(a){var b=h.parseUrl(a);return b.protocol&&b.domain!==p.domain?!0:!1},hasProtocol:function(a){return/^(:?\w+:)/.test(a)},isFirstPageUrl:function(b){var c=h.parseUrl(h.makeUrlAbsolute(b,q)),e=c.hrefNoHash===p.hrefNoHash||r&&c.hrefNoHash===q.hrefNoHash,f=a.mobile.firstPage,g=f&&f[0]?f[0].id:d;return e&&(!c.hash||c.hash==="#"||g&&c.hash.replace(/^#/,"")===g)},isEmbeddedPage:function(a){var b=h.parseUrl(a);return b.protocol!==""?b.hash&&(b.hrefNoHash===p.hrefNoHash||r&&b.hrefNoHash===q.hrefNoHash):/^#/.test(b.href)},isPermittedCrossDomainRequest:function(b,c){return a.mobile.allowCrossDomainPages&&b.protocol==="file:"&&c.search(/^https?:/)!==-1}},i=null,j={stack:[],activeIndex:0,getActive:function(){return j.stack[j.activeIndex]},getPrev:function(){return j.stack[j.activeIndex-1]},getNext:function(){return j.stack[j.activeIndex+1]},addNew:function(a,b,c,d,e){j.getNext()&&j.clearForward(),j.stack.push({url:a,transition:b,title:c,pageUrl:d,role:e}),j.activeIndex=j.stack.length-1},clearForward:function(){j.stack=j.stack.slice(0,j.activeIndex+1)},directHashChange:function(b){var c,e,f,g=this.getActive();a.each(j.stack,function(a,d){decodeURIComponent(b.currentUrl)===decodeURIComponent(d.url)&&(c=a<j.activeIndex,e=!c,f=a)}),this.activeIndex=f!==d?f:this.activeIndex,c?(b.either||b.isBack)(!0):e&&(b.either||b.isForward)(!1)},ignoreNextHashChange:!1},k="[tabindex],a,button:visible,select:visible,input",l=[],m=!1,n="&ui-state=dialog",o=g.children("base"),p=h.parseLocation(),q=o.length?h.parseUrl(h.makeUrlAbsolute(o.attr("href"),p.href)):p,r=p.hrefNoHash!==q.hrefNoHash,s=a.mobile.getScreenHeight,t=a.support.dynamicBaseTag?{element:o.length?o:a("<base>",{href:q.hrefNoHash}).prependTo(g),set:function(a){t.element.attr("href",h.makeUrlAbsolute(a,q))},reset:function(){t.element.attr("href",q.hrefNoHash)}}:d;a.mobile.back=function(){var a=b.navigator;this.phonegapNavigationEnabled&&a&&a.app&&a.app.backHistory?a.app.backHistory():b.history.back()},a.mobile.focusPage=function(a){var b=a.find("[autofocus]"),c=a.find(".ui-title:eq(0)");if(b.length){b.focus();return}c.length?c.focus():a.focus()};var w=!0,x,y;x=function(){if(!w)return;var b=a.mobile.urlHistory.getActive();if(b){var c=e.scrollTop();b.lastScroll=c<a.mobile.minScrollBack?a.mobile.defaultHomeScroll:c}},y=function(){setTimeout(x,100)},e.bind(a.support.pushState?"popstate":"hashchange",function(){w=!1}),e.one(a.support.pushState?"popstate":"hashchange",function(){w=!0}),e.one("pagecontainercreate",function(){a.mobile.pageContainer.bind("pagechange",function(){w=!0,e.unbind("scrollstop",y),e.bind("scrollstop",y)})}),e.bind("scrollstop",y),a.mobile._maybeDegradeTransition=a.mobile._maybeDegradeTransition||function(a){return a},a.fn.animationComplete=function(b){return a.support.cssTransitions?a(this).one("webkitAnimationEnd animationend",b):(setTimeout(b,0),a(this))},a.mobile.path=h,a.mobile.base=t,a.mobile.urlHistory=j,a.mobile.dialogHashKey=n,a.mobile.allowCrossDomainPages=!1,a.mobile.getDocumentUrl=function(b){return b?a.extend({},p):p.href},a.mobile.getDocumentBase=function(b){return b?a.extend({},q):q.href},a.mobile._bindPageRemove=function(){var b=a(this);!b.data("page").options.domCache&&b.is(":jqmData(external-page='true')")&&b.bind("pagehide.remove",function(){var b=a(this),c=new a.Event("pageremove");b.trigger(c),c.isDefaultPrevented()||b.removeWithDependents()})},a.mobile.loadPage=function(b,c){var e=a.Deferred(),f=a.extend({},a.mobile.loadPage.defaults,c),g=null,i=null,j=function(){var b=a.mobile.activePage&&D(a.mobile.activePage);return b||q.hrefNoHash},k=h.makeUrlAbsolute(b,j());f.data&&f.type==="get"&&(k=h.addSearchParams(k,f.data),f.data=d),f.data&&f.type==="post"&&(f.reloadPage=!0);var l=h.getFilePath(k),m=h.convertUrlToDataUrl(k);f.pageContainer=f.pageContainer||a.mobile.pageContainer,g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']"),g.length===0&&m&&!h.isPath(m)&&(g=f.pageContainer.children("#"+m).attr("data-"+a.mobile.ns+"url",m).jqmData("url",m));if(g.length===0)if(a.mobile.firstPage&&h.isFirstPageUrl(l))a.mobile.firstPage.parent().length&&(g=a(a.mobile.firstPage));else if(h.isEmbeddedPage(l))return e.reject(k,c),e.promise();if(g.length){if(!f.reloadPage)return B(g,f.role),e.resolve(k,c,g),e.promise();i=g}var n=f.pageContainer,o=new a.Event("pagebeforeload"),r={url:b,absUrl:k,dataUrl:m,deferred:e,options:f};n.trigger(o,r);if(o.isDefaultPrevented())return e.promise();if(f.showLoadMsg)var s=setTimeout(function(){a.mobile.showPageLoadingMsg()},f.loadMsgDelay),u=function(){clearTimeout(s),a.mobile.hidePageLoadingMsg()};return t&&t.reset(),!a.mobile.allowCrossDomainPages&&!h.isSameDomain(p,k)?e.reject(k,c):a.ajax({url:l,type:f.type,data:f.data,dataType:"html",success:function(d,j,n){var o=a("<div></div>"),p=d.match(/<title[^>]*>([^<]*)/)&&RegExp.$1,q=new RegExp("(<[^>]+\\bdata-"+a.mobile.ns+"role=[\"']?page[\"']?[^>]*>)"),s=new RegExp("\\bdata-"+a.mobile.ns+"url=[\"']?([^\"'>]*)[\"']?");q.test(d)&&RegExp.$1&&s.test(RegExp.$1)&&RegExp.$1&&(b=l=h.getFilePath(a("<div>"+RegExp.$1+"</div>").text())),t&&t.set(l),o.get(0).innerHTML=d,g=o.find(":jqmData(role='page'), :jqmData(role='dialog')").first(),g.length||(g=a("<div data-"+a.mobile.ns+"role='page'>"+d.split(/<\/?body[^>]*>/gmi)[1]+"</div>")),p&&!g.jqmData("title")&&(~p.indexOf("&")&&(p=a("<div>"+p+"</div>").text()),g.jqmData("title",p));if(!a.support.dynamicBaseTag){var v=h.get(l);g.find("[src], link[href], a[rel='external'], :jqmData(ajax='false'), a[target]").each(function(){var b=a(this).is("[href]")?"href":a(this).is("[src]")?"src":"action",c=a(this).attr(b);c=c.replace(location.protocol+"//"+location.host+location.pathname,""),/^(\w+:|#|\/)/.test(c)||a(this).attr(b,v+c)})}g.attr("data-"+a.mobile.ns+"url",h.convertUrlToDataUrl(l)).attr("data-"+a.mobile.ns+"external-page",!0).appendTo(f.pageContainer),g.one("pagecreate",a.mobile._bindPageRemove),B(g,f.role),k.indexOf("&"+a.mobile.subPageUrlKey)>-1&&(g=f.pageContainer.children("[data-"+a.mobile.ns+"url='"+m+"']")),f.showLoadMsg&&u(),r.xhr=n,r.textStatus=j,r.page=g,f.pageContainer.trigger("pageload",r),e.resolve(k,c,g,i)},error:function(b,d,g){t&&t.set(h.get()),r.xhr=b,r.textStatus=d,r.errorThrown=g;var i=new a.Event("pageloadfailed");f.pageContainer.trigger(i,r);if(i.isDefaultPrevented())return;f.showLoadMsg&&(u(),a.mobile.showPageLoadingMsg(a.mobile.pageLoadErrorMessageTheme,a.mobile.pageLoadErrorMessage,!0),setTimeout(a.mobile.hidePageLoadingMsg,1500)),e.reject(k,c)}}),e.promise()},a.mobile.loadPage.defaults={type:"get",data:d,reloadPage:!1,role:d,showLoadMsg:!1,pageContainer:d,loadMsgDelay:50},a.mobile.changePage=function(b,e){if(m){l.unshift(arguments);return}var f=a.extend({},a.mobile.changePage.defaults,e);f.pageContainer=f.pageContainer||a.mobile.pageContainer,f.fromPage=f.fromPage||a.mobile.activePage;var g=f.pageContainer,i=new a.Event("pagebeforechange"),k={toPage:b,options:f};g.trigger(i,k);if(i.isDefaultPrevented())return;b=k.toPage,m=!0;if(typeof b=="string"){a.mobile.loadPage(b,f).done(function(b,c,d,e){m=!1,c.duplicateCachedPage=e,a.mobile.changePage(d,c)}).fail(function(a,b){m=!1,u(!0),v(),f.pageContainer.trigger("pagechangefailed",k)});return}b[0]===a.mobile.firstPage[0]&&!f.dataUrl&&(f.dataUrl=p.hrefNoHash);var o=f.fromPage,q=f.dataUrl&&h.convertUrlToDataUrl(f.dataUrl)||b.jqmData("url"),r=q,s=h.getFilePath(q),t=j.getActive(),w=j.activeIndex===0,x=0,y=c.title,A=f.role==="dialog"||b.jqmData("role")==="dialog";if(o&&o[0]===b[0]&&!f.allowSamePageTransition){m=!1,g.trigger("pagechange",k),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){},isForward:function(){}});return}B(b,f.role),f.fromHashChange&&j.directHashChange({currentUrl:q,isBack:function(){x=-1},isForward:function(){x=1}});try{c.activeElement&&c.activeElement.nodeName.toLowerCase()!=="body"?a(c.activeElement).blur():a("input:focus, textarea:focus, select:focus").blur()}catch(C){}var D=!1;A&&t&&(t.url.indexOf(n)>-1&&!a.mobile.activePage.is(".ui-dialog")&&(f.changeHash=!1,D=!0),q=(t.url||"")+(D?"":n),j.activeIndex===0&&q===j.initialDst&&(q+=n)),f.changeHash!==!1&&q&&(j.ignoreNextHashChange=!0,h.set(q));var E=t?b.jqmData("title")||b.children(":jqmData(role='header')").find(".ui-title").getEncodedText():y;!!E&&y===c.title&&(y=E),b.jqmData("title")||b.jqmData("title",y),f.transition=f.transition||(x&&!w?t.transition:d)||(A?a.mobile.defaultDialogTransition:a.mobile.defaultPageTransition),x||(D&&(j.activeIndex=Math.max(0,j.activeIndex-1)),j.addNew(q,f.transition,y,r,f.role)),c.title=j.getActive().title,a.mobile.activePage=b,f.reverse=f.reverse||x<0,z(b,o,f.transition,f.reverse).done(function(c,d,e,h,i){u(),f.duplicateCachedPage&&f.duplicateCachedPage.remove(),i||a.mobile.focusPage(b),v(),g.trigger("pagechange",k)})},a.mobile.changePage.defaults={transition:d,reverse:!1,changeHash:!0,fromHashChange:!1,role:d,duplicateCachedPage:d,pageContainer:d,showLoadMsg:!0,dataUrl:d,fromPage:d,allowSamePageTransition:!1},a.mobile.navreadyDeferred=a.Deferred(),a.mobile.navreadyDeferred.done(function(){a(c).delegate("form","submit",function(b){var c=a(this);if(!a.mobile.ajaxEnabled||c.is(":jqmData(ajax='false')")||!c.jqmHijackable().length)return;var d=c.attr("method"),e=c.attr("target"),f=c.attr("action");f||(f=D(c),f===q.hrefNoHash&&(f=p.hrefNoSearch)),f=h.makeUrlAbsolute(f,D(c));if(h.isExternal(f)&&!h.isPermittedCrossDomainRequest(p,f)||e)return;a.mobile.changePage(f,{type:d&&d.length&&d.toLowerCase()||"get",data:c.serialize(),transition:c.jqmData("transition"),reverse:c.jqmData("direction")==="reverse",reloadPage:!0}),b.preventDefault()}),a(c).bind("vclick",function(b){if(b.which>1||!a.mobile.linkBindingEnabled)return;var c=C(b.target);if(!a(c).jqmHijackable().length)return;c&&h.parseUrl(c.getAttribute("href")||"#").hash!=="#"&&(u(!0),i=a(c).closest(".ui-btn").not(".ui-disabled"),i.addClass(a.mobile.activeBtnClass))}),a(c).bind("click",function(c){if(!a.mobile.linkBindingEnabled)return;var e=C(c.target),f=a(e),g;if(!e||c.which>1||!f.jqmHijackable().length)return;g=function(){b.setTimeout(function(){u(!0)},200)};if(f.is(":jqmData(rel='back')"))return a.mobile.back(),!1;var i=D(f),j=h.makeUrlAbsolute(f.attr("href")||"#",i);if(!a.mobile.ajaxEnabled&&!h.isEmbeddedPage(j)){g();return}if(j.search("#")!==-1){j=j.replace(/[^#]*#/,"");if(!j){c.preventDefault();return}h.isPath(j)?j=h.makeUrlAbsolute(j,i):j=h.makeUrlAbsolute("#"+j,p.hrefNoHash)}var k=f.is("[rel='external']")||f.is(":jqmData(ajax='false')")||f.is("[target]"),l=k||h.isExternal(j)&&!h.isPermittedCrossDomainRequest(p,j);if(l){g();return}var m=f.jqmData("transition"),n=f.jqmData("direction")==="reverse"||f.jqmData("back"),o=f.attr("data-"+a.mobile.ns+"rel")||d;a.mobile.changePage(j,{transition:m,reverse:n,role:o,link:f}),c.preventDefault()}),a(c).delegate(".ui-page","pageshow.prefetch",function(){var b=[];a(this).find("a:jqmData(prefetch)").each(function(){var c=a(this),d=c.attr("href");d&&a.inArray(d,b)===-1&&(b.push(d),a.mobile.loadPage(d,{role:c.attr("data-"+a.mobile.ns+"rel")}))})}),a.mobile._handleHashChange=function(c){var e=h.stripHash(c),f=a.mobile.urlHistory.stack.length===0?"none":d,g=new a.Event("navigate"),i={transition:f,changeHash:!1,fromHashChange:!0};0===j.stack.length&&(j.initialDst=e),a.mobile.pageContainer.trigger(g);if(g.isDefaultPrevented())return;if(!a.mobile.hashListeningEnabled||j.ignoreNextHashChange){j.ignoreNextHashChange=!1;return}if(j.stack.length>1&&e.indexOf(n)>-1&&j.initialDst!==e){if(!a.mobile.activePage.is(".ui-dialog")){j.directHashChange({currentUrl:e,isBack:function(){a.mobile.back()},isForward:function(){b.history.forward()}});return}j.directHashChange({currentUrl:e,either:function(b){var c=a.mobile.urlHistory.getActive();e=c.pageUrl,a.extend(i,{role:c.role,transition:c.transition,reverse:b})}})}e?(e=typeof e=="string"&&!h.isPath(e)?h.makeUrlAbsolute("#"+e,q):e,e===h.makeUrlAbsolute("#"+j.initialDst,q)&&j.stack.length&&j.stack[0].url!==j.initialDst.replace(n,"")&&(e=a.mobile.firstPage),a.mobile.changePage(e,i)):a.mobile.changePage(a.mobile.firstPage,i)},e.bind("hashchange",function(b,c){a.mobile._handleHashChange(h.parseLocation().hash)}),a(c).bind("pageshow",A),a(b).bind("throttledresize",A)})}(a),function(a,b){var e={},f=e,g=a(b),h=a.mobile.path.parseLocation(),i=a.Deferred(),j=a.Deferred();a(c).ready(a.proxy(j,"resolve")),a(c).one("mobileinit",a.proxy(i,"resolve")),a.extend(e,{initialFilePath:function(){return h.pathname+h.search}(),hashChangeTimeout:200,hashChangeEnableTimer:d,initialHref:h.hrefNoHash,state:function(){return{hash:a.mobile.path.parseLocation().hash||"#"+f.initialFilePath,title:c.title,initialHref:f.initialHref}},resetUIKeys:function(b){var c=a.mobile.dialogHashKey,d="&"+a.mobile.subPageUrlKey,e=b.indexOf(c);return e>-1?b=b.slice(0,e)+"#"+b.slice(e):b.indexOf(d)>-1&&(b=b.split(d).join("#"+d)),b},nextHashChangePrevented:function(b){a.mobile.urlHistory.ignoreNextHashChange=b,f.onHashChangeDisabled=b},onHashChange:function(b){if(f.onHashChangeDisabled)return;var d,e,g=a.mobile.path.parseLocation().hash,h=a.mobile.path.isPath(g),i=h?a.mobile.path.getLocation():a.mobile.getDocumentUrl();g=h?g.replace("#",""):g,e=f.state(),d=a.mobile.path.makeUrlAbsolute(g,i),h&&(d=f.resetUIKeys(d)),history.replaceState(e,c.title,d)},onPopState:function(b){var c=b.originalEvent.state,d,e,g;c&&(clearTimeout(f.hashChangeEnableTimer),f.nextHashChangePrevented(!1),a.mobile._handleHashChange(c.hash),f.nextHashChangePrevented(!0),f.hashChangeEnableTimer=setTimeout(function(){f.nextHashChangePrevented(!1)},f.hashChangeTimeout))},init:function(){g.bind("hashchange",f.onHashChange),g.bind("popstate",f.onPopState),location.hash===""&&history.replaceState(f.state(),c.title,a.mobile.path.getLocation())}}),a.when(j,i,a.mobile.navreadyDeferred).done(function(){a.mobile.pushStateEnabled&&a.support.pushState&&e.init()})}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flip="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.flow="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.pop="fade"}(a,this),function(a,b,c){a.mobile.transitionHandlers.slide=a.mobile.transitionHandlers.simultaneous,a.mobile.transitionFallbacks.slide="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidedown="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slidefade="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.slideup="fade"}(a,this),function(a,b,c){a.mobile.transitionFallbacks.turn="fade"}(a,this),function(a,b){a.mobile.page.prototype.options.degradeInputs={color:!1,date:!1,datetime:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:"number",search:"text",tel:!1,time:!1,url:!1,week:!1},a(c).bind("pagecreate create",function(b){var c=a.mobile.closestPageData(a(b.target)),d;if(!c)return;d=c.options,a(b.target).find("input").not(c.keepNativeSelector()).each(function(){var b=a(this),c=this.getAttribute("type"),e=d.degradeInputs[c]||"text";if(d.degradeInputs[c]){var f=a("<div>").html(b.clone()).html(),g=f.indexOf(" type=")>-1,h=g?/\s+type=["']?\w+['"]?/:/\/?>/,i=' type="'+e+'" data-'+a.mobile.ns+'type="'+c+'"'+(g?"":">");b.replaceWith(f.replace(h,i))}})})}(a),function(a,b,d){a.widget("mobile.dialog",a.mobile.widget,{options:{closeBtnText:"Close",overlayTheme:"a",initSelector:":jqmData(role='dialog')"},_create:function(){var b=this,c=this.element,d=a("<a href='#' data-"+a.mobile.ns+"icon='delete' data-"+a.mobile.ns+"iconpos='notext'>"+this.options.closeBtnText+"</a>"),e=a("<div/>",{role:"dialog","class":"ui-dialog-contain ui-corner-all ui-overlay-shadow"});c.addClass("ui-dialog ui-overlay-"+this.options.overlayTheme),c.wrapInner(e).children().find(":jqmData(role='header')").prepend(d).end().children(":first-child").addClass("ui-corner-top").end().children(":last-child").addClass("ui-corner-bottom"),d.bind("click",function(){b.close()}),c.bind("vclick submit",function(b){var c=a(b.target).closest(b.type==="vclick"?"a":"form"),d;c.length&&!c.jqmData("transition")&&(d=a.mobile.urlHistory.getActive()||{},c.attr("data-"+a.mobile.ns+"transition",d.transition||a.mobile.defaultDialogTransition).attr("data-"+a.mobile.ns+"direction","reverse"))}).bind("pagehide",function(b,c){a(this).find("."+a.mobile.activeBtnClass).not(".ui-slider-bg").removeClass(a.mobile.activeBtnClass)}).bind("pagebeforeshow",function(){b._isCloseable=!0,b.options.overlayTheme&&b.element.page("removeContainerBackground").page("setContainerBackground",b.options.overlayTheme)})},close:function(){var b;this._isCloseable&&(this._isCloseable=!1,a.mobile.hashListeningEnabled?a.mobile.back():(b=a.mobile.urlHistory.getPrev().url,a.mobile.path.isPath(b)||(b=a.mobile.path.makeUrlAbsolute("#"+b)),a.mobile.changePage(b,{changeHash:!1,fromHashChange:!0})))}}),a(c).delegate(a.mobile.dialog.prototype.options.initSelector,"pagecreate",function(){a.mobile.dialog.prototype.enhance(this)})}(a,this),function(a,b){a.mobile.page.prototype.options.backBtnText="Back",a.mobile.page.prototype.options.addBackBtn=!1,a.mobile.page.prototype.options.backBtnTheme=null,a.mobile.page.prototype.options.headerTheme="a",a.mobile.page.prototype.options.footerTheme="a",a.mobile.page.prototype.options.contentTheme=null,a(c).bind("pagecreate",function(b){var c=a(b.target),d=c.data("page").options,e=c.jqmData("role"),f=d.theme;a(":jqmData(role='header'), :jqmData(role='footer'), :jqmData(role='content')",c).jqmEnhanceable().each(function(){var b=a(this),g=b.jqmData("role"),h=b.jqmData("theme"),i=h||d.contentTheme||e==="dialog"&&f,j,k,l,m;b.addClass("ui-"+g);if(g==="header"||g==="footer"){var n=h||(g==="header"?d.headerTheme:d.footerTheme)||f;b.addClass("ui-bar-"+n).attr("role",g==="header"?"banner":"contentinfo"),g==="header"&&(j=b.children("a, button"),k=j.hasClass("ui-btn-left"),l=j.hasClass("ui-btn-right"),k=k||j.eq(0).not(".ui-btn-right").addClass("ui-btn-left").length,l=l||j.eq(1).addClass("ui-btn-right").length),d.addBackBtn&&g==="header"&&a(".ui-page").length>1&&c.jqmData("url")!==a.mobile.path.stripHash(location.hash)&&!k&&(m=a("<a href='javascript:void(0);' class='ui-btn-left' data-"+a.mobile.ns+"rel='back' data-"+a.mobile.ns+"icon='arrow-l'>"+d.backBtnText+"</a>").attr("data-"+a.mobile.ns+"theme",d.backBtnTheme||n).prependTo(b)),b.children("h1, h2, h3, h4, h5, h6").addClass("ui-title").attr({role:"heading","aria-level":"1"})}else g==="content"&&(i&&b.addClass("ui-body-"+i),b.attr("role","main"))})})}(a),function(a,b){a.fn.fieldcontain=function(a){return this.addClass("ui-field-contain ui-body ui-br").contents().filter(function(){return this.nodeType===3&&!/\S/.test(this.nodeValue)}).remove()},a(c).bind("pagecreate create",function(b){a(":jqmData(role='fieldcontain')",b.target).jqmEnhanceable().fieldcontain()})}(a),function(a,b){a.fn.grid=function(b){return this.each(function(){var c=a(this),d=a.extend({grid:null},b),e=c.children(),f={solo:1,a:2,b:3,c:4,d:5},g=d.grid,h;if(!g)if(e.length<=5)for(var i in f)f[i]===e.length&&(g=i);else g="a",c.addClass("ui-grid-duo");h=f[g],c.addClass("ui-grid-"+g),e.filter(":nth-child("+h+"n+1)").addClass("ui-block-a"),h>1&&e.filter(":nth-child("+h+"n+2)").addClass("ui-block-b"),h>2&&e.filter(":nth-child("+h+"n+3)").addClass("ui-block-c"),h>3&&e.filter(":nth-child("+h+"n+4)").addClass("ui-block-d"),h>4&&e.filter(":nth-child("+h+"n+5)").addClass("ui-block-e")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(":jqmData(role='nojs')",b.target).addClass("ui-nojs")})}(a),function(a,b){function d(a){var b;while(a){b=typeof a.className=="string"&&a.className+" ";if(b&&b.indexOf("ui-btn ")>-1&&b.indexOf("ui-disabled ")<0)break;a=a.parentNode}return a}a.fn.buttonMarkup=function(d){var f=this,g=function(b,c){j.setAttribute("data-"+a.mobile.ns+b,c),i.jqmData(b,c)};d=d&&a.type(d)==="object"?d:{};for(var h=0;h<f.length;h++){var i=f.eq(h),j=i[0],k=a.extend({},a.fn.buttonMarkup.defaults,{icon:d.icon!==b?d.icon:i.jqmData("icon"),iconpos:d.iconpos!==b?d.iconpos:i.jqmData("iconpos"),theme:d.theme!==b?d.theme:i.jqmData("theme")||a.mobile.getInheritedTheme(i,"c"),inline:d.inline!==b?d.inline:i.jqmData("inline"),shadow:d.shadow!==b?d.shadow:i.jqmData("shadow"),corners:d.corners!==b?d.corners:i.jqmData("corners"),iconshadow:d.iconshadow!==b?d.iconshadow:i.jqmData("iconshadow"),mini:d.mini!==b?d.mini:i.jqmData("mini")},d),l="ui-btn-inner",m="ui-btn-text",n,o,p,q,r,s;a.each(k,g),i.jqmData("rel")==="popup"&&i.attr("href")&&(j.setAttribute("aria-haspopup",!0),j.setAttribute("aria-owns",j.getAttribute("href"))),s=a.data(j.tagName==="INPUT"||j.tagName==="BUTTON"?j.parentNode:j,"buttonElements"),s?(j=s.outer,i=a(j),p=s.inner,q=s.text,a(s.icon).remove(),s.icon=null):(p=c.createElement(k.wrapperEls),q=c.createElement(k.wrapperEls)),r=k.icon?c.createElement("span"):null,e&&!s&&e(),k.theme||(k.theme=a.mobile.getInheritedTheme(i,"c")),n="ui-btn ui-btn-up-"+k.theme,n+=k.shadow?" ui-shadow":"",n+=k.corners?" ui-btn-corner-all":"",k.mini!==b&&(n+=k.mini===!0?" ui-mini":" ui-fullsize"),k.inline!==b&&(n+=k.inline===!0?" ui-btn-inline":" ui-btn-block"),k.icon&&(k.icon="ui-icon-"+k.icon,k.iconpos=k.iconpos||"left",o="ui-icon "+k.icon,k.iconshadow&&(o+=" ui-icon-shadow")),k.iconpos&&(n+=" ui-btn-icon-"+k.iconpos,k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText())),l+=k.corners?" ui-btn-corner-all":"",k.iconpos&&k.iconpos==="notext"&&!i.attr("title")&&i.attr("title",i.getEncodedText()),s&&i.removeClass(s.bcls||""),i.removeClass("ui-link").addClass(n),p.className=l,q.className=m,s||p.appendChild(q);if(r){r.className=o;if(!s||!s.icon)r.innerHTML="&#160;",p.appendChild(r)}while(j.firstChild&&!s)q.appendChild(j.firstChild);s||j.appendChild(p),s={bcls:n,outer:j,inner:p,text:q,icon:r},a.data(j,"buttonElements",s),a.data(p,"buttonElements",s),a.data(q,"buttonElements",s),r&&a.data(r,"buttonElements",s)}return this},a.fn.buttonMarkup.defaults={corners:!0,shadow:!0,iconshadow:!0,wrapperEls:"span"};var e=function(){var b=a.mobile.buttonMarkup.hoverDelay,f,g;a(c).bind({"vmousedown vmousecancel vmouseup vmouseover vmouseout focus blur scrollstart":function(c){var e,h=a(d(c.target)),i=c.originalEvent&&/^touch/.test(c.originalEvent.type),j=c.type;if(h.length){e=h.attr("data-"+a.mobile.ns+"theme");if(j==="vmousedown")i?f=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-down-"+e);else if(j==="vmousecancel"||j==="vmouseup")h.removeClass("ui-btn-down-"+e).addClass("ui-btn-up-"+e);else if(j==="vmouseover"||j==="focus")i?g=setTimeout(function(){h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e)},b):h.removeClass("ui-btn-up-"+e).addClass("ui-btn-hover-"+e);else if(j==="vmouseout"||j==="blur"||j==="scrollstart")h.removeClass("ui-btn-hover-"+e+" ui-btn-down-"+e).addClass("ui-btn-up-"+e),f&&clearTimeout(f),g&&clearTimeout(g)}},"focusin focus":function(b){a(d(b.target)).addClass(a.mobile.focusClass)},"focusout blur":function(b){a(d(b.target)).removeClass(a.mobile.focusClass)}}),e=null};a(c).bind("pagecreate create",function(b){a(":jqmData(role='button'), .ui-bar > a, .ui-header > a, .ui-footer > a, .ui-bar > :jqmData(role='controlgroup') > a",b.target).jqmEnhanceable().not("button, input, .ui-btn, :jqmData(role='none'), :jqmData(role='nojs')").buttonMarkup()})}(a),function(a,b){a.widget("mobile.collapsible",a.mobile.widget,{options:{expandCueText:" click to expand contents",collapseCueText:" click to collapse contents",collapsed:!0,heading:"h1,h2,h3,h4,h5,h6,legend",theme:null,contentTheme:null,inset:!0,mini:!1,initSelector:":jqmData(role='collapsible')"},_create:function(){var c=this.element,d=this.options,e=c.addClass("ui-collapsible"),f=c.children(d.heading).first(),g=c.jqmData("collapsed-icon")||d.collapsedIcon,h=c.jqmData("expanded-icon")||d.expandedIcon,i=e.wrapInner("<div class='ui-collapsible-content'></div>").children(".ui-collapsible-content"),j=c.closest(":jqmData(role='collapsible-set')").addClass("ui-collapsible-set");f.is("legend")&&(f=a("<div role='heading'>"+f.html()+"</div>").insertBefore(f),f.next().remove()),j.length?(d.theme||(d.theme=j.jqmData("theme")||a.mobile.getInheritedTheme(j,"c")),d.contentTheme||(d.contentTheme=j.jqmData("content-theme")),d.collapsedIcon||(d.collapsedIcon=j.jqmData("collapsed-icon")),d.expandedIcon||(d.expandedIcon=j.jqmData("expanded-icon")),d.iconPos||(d.iconPos=j.jqmData("iconpos")),j.jqmData("inset")!==b?d.inset=j.jqmData("inset"):d.inset=!0,d.mini||(d.mini=j.jqmData("mini"))):d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),!d.inset||e.addClass("ui-collapsible-inset"),i.addClass(d.contentTheme?"ui-body-"+d.contentTheme:""),g=c.jqmData("collapsed-icon")||d.collapsedIcon||"plus",h=c.jqmData("expanded-icon")||d.expandedIcon||"minus",f.insertBefore(i).addClass("ui-collapsible-heading").append("<span class='ui-collapsible-heading-status'></span>").wrapInner("<a href='#' class='ui-collapsible-heading-toggle'></a>").find("a").first().buttonMarkup({shadow:!1,corners:!1,iconpos:c.jqmData("iconpos")||d.iconPos||"left",icon:g,mini:d.mini,theme:d.theme}),!d.inset||f.find("a").first().add(".ui-btn-inner",c).addClass("ui-corner-top ui-corner-bottom"),e.bind("expand collapse",function(b){if(!b.isDefaultPrevented()){var c=a(this),k=b.type==="collapse",l=d.contentTheme;b.preventDefault(),f.toggleClass("ui-collapsible-heading-collapsed",k).find(".ui-collapsible-heading-status").text(k?d.expandCueText:d.collapseCueText).end().find(".ui-icon").toggleClass("ui-icon-"+h,!k).toggleClass("ui-icon-"+g,k||h===g).end().find("a").first().removeClass(a.mobile.activeBtnClass),c.toggleClass("ui-collapsible-collapsed",k),i.toggleClass("ui-collapsible-content-collapsed",k).attr("aria-hidden",k),l&&!!d.inset&&(!j.length||e.jqmData("collapsible-last"))&&(f.find("a").first().add(f.find(".ui-btn-inner")).toggleClass("ui-corner-bottom",k),i.toggleClass("ui-corner-bottom",!k)),i.trigger("updatelayout")}}).trigger(d.collapsed?"collapse":"expand"),f.bind("tap",function(b){f.find("a").first().addClass(a.mobile.activeBtnClass)}).bind("click",function(a){var b=f.is(".ui-collapsible-heading-collapsed")?"expand":"collapse";e.trigger(b),a.preventDefault(),a.stopPropagation()})}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsible.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.collapsibleset",a.mobile.widget,{options:{initSelector:":jqmData(role='collapsible-set')"},_create:function(){var c=this.element.addClass("ui-collapsible-set"),d=this.options;d.theme||(d.theme=a.mobile.getInheritedTheme(c,"c")),d.contentTheme||(d.contentTheme=c.jqmData("content-theme")),c.jqmData("inset")!==b&&(d.inset=c.jqmData("inset")),d.inset=d.inset!==b?d.inset:!0,c.jqmData("collapsiblebound")||c.jqmData("collapsiblebound",!0).bind("expand collapse",function(b){var c=b.type==="collapse",e=a(b.target).closest(".ui-collapsible"),f=e.data("collapsible");e.jqmData("collapsible-last")&&!!d.inset&&(e.find(".ui-collapsible-heading").first().find("a").first().toggleClass("ui-corner-bottom",c).find(".ui-btn-inner").toggleClass("ui-corner-bottom",c),e.find(".ui-collapsible-content").toggleClass("ui-corner-bottom",!c))}).bind("expand",function(b){var c=a(b.target).closest(".ui-collapsible");c.parent().is(":jqmData(role='collapsible-set')")&&c.siblings(".ui-collapsible").trigger("collapse")})},_init:function(){var a=this.element,b=a.children(":jqmData(role='collapsible')"),c=b.filter(":jqmData(collapsed='false')");this.refresh(),c.trigger("expand")},refresh:function(){var b=this.element,c=this.options,d=b.children(":jqmData(role='collapsible')");a.mobile.collapsible.prototype.enhance(d.not(".ui-collapsible")),!c.inset||(d.each(function(){a(this).jqmRemoveData("collapsible-last").find(".ui-collapsible-heading").find("a").first().removeClass("ui-corner-top ui-corner-bottom").find(".ui-btn-inner").removeClass("ui-corner-top ui-corner-bottom")}),d.first().find("a").first().addClass("ui-corner-top").find(".ui-btn-inner").addClass("ui-corner-top"),d.last().jqmData("collapsible-last",!0).find("a").first().addClass("ui-corner-bottom").find(".ui-btn-inner").addClass("ui-corner-bottom"))}}),a(c).bind("pagecreate create",function(b){a.mobile.collapsibleset.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.widget("mobile.navbar",a.mobile.widget,{options:{iconpos:"top",grid:null,initSelector:":jqmData(role='navbar')"},_create:function(){var c=this.element,d=c.find("a"),e=d.filter(":jqmData(icon)").length?this.options.iconpos:b;c.addClass("ui-navbar ui-mini").attr("role","navigation").find("ul").jqmEnhanceable().grid({grid:this.options.grid}),d.buttonMarkup({corners:!1,shadow:!1,inline:!0,iconpos:e}),c.delegate("a","vclick",function(b){a(b.target).hasClass("ui-disabled")||(d.removeClass(a.mobile.activeBtnClass),a(this).addClass(a.mobile.activeBtnClass))}),c.closest(".ui-page").bind("pagebeforeshow",function(){d.filter(".ui-state-persist").addClass(a.mobile.activeBtnClass)})}}),a(c).bind("pagecreate create",function(b){a.mobile.navbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){var d={};a.widget("mobile.listview",a.mobile.widget,{options:{theme:null,countTheme:"c",headerTheme:"b",dividerTheme:"b",splitIcon:"arrow-r",splitTheme:"b",inset:!1,initSelector:":jqmData(role='listview')"},_create:function(){var a=this,b="";b+=a.options.inset?" ui-listview-inset ui-corner-all ui-shadow ":"",a.element.addClass(function(a,c){return c+" ui-listview "+b}),a.refresh(!0)},_removeCorners:function(a,b){var c="ui-corner-top ui-corner-tr ui-corner-tl",d="ui-corner-bottom ui-corner-br ui-corner-bl";a=a.add(a.find(".ui-btn-inner, .ui-li-link-alt, .ui-li-thumb")),b==="top"?a.removeClass(c):b==="bottom"?a.removeClass(d):a.removeClass(c+" "+d)},_refreshCorners:function(a){var b,c,d,e;b=this.element.children("li"),c=a||b.filter(":visible").length===0?b.not(".ui-screen-hidden"):b.filter(":visible"),b.filter(".ui-li-last").removeClass("ui-li-last"),this.options.inset?(this._removeCorners(b),d=c.first().addClass("ui-corner-top"),d.add(d.find(".ui-btn-inner").not(".ui-li-link-alt span:first-child")).addClass("ui-corner-top").end().find(".ui-li-link-alt, .ui-li-link-alt span:first-child").addClass("ui-corner-tr").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-tl"),e=c.last().addClass("ui-corner-bottom ui-li-last"),e.add(e.find(".ui-btn-inner")).find(".ui-li-link-alt").addClass("ui-corner-br").end().find(".ui-li-thumb").not(".ui-li-icon").addClass("ui-corner-bl")):c.last().addClass("ui-li-last"),a||this.element.trigger("updatelayout")},_findFirstElementByTagName:function(a,b,c,d){var e={};e[c]=e[d]=!0;while(a){if(e[a.nodeName])return a;a=a[b]}return null},_getChildrenByTagName:function(b,c,d){var e=[],f={};f[c]=f[d]=!0,b=b.firstChild;while(b)f[b.nodeName]&&e.push(b),b=b.nextSibling;return a(e)},_addThumbClasses:function(b){var c,d,e=b.length;for(c=0;c<e;c++)d=a(this._findFirstElementByTagName(b[c].firstChild,"nextSibling","img","IMG")),d.length&&(d.addClass("ui-li-thumb"),a(this._findFirstElementByTagName(d[0].parentNode,"parentNode","li","LI")).addClass(d.is(".ui-li-icon")?"ui-li-has-icon":"ui-li-has-thumb"))},refresh:function(b){this.parentPage=this.element.closest(".ui-page"),this._createSubPages();var d=this.options,e=this.element,f=this,g=e.jqmData("dividertheme")||d.dividerTheme,h=e.jqmData("splittheme"),i=e.jqmData("spliticon"),j=this._getChildrenByTagName(e[0],"li","LI"),k=!!a.nodeName(e[0],"ol"),l=!a.support.cssPseudoElement,m=e.attr("start"),n={},o,p,q,r,s,t,u,v,w,x,y,z,A,B;k&&l&&e.find(".ui-li-dec").remove(),k&&(m||m===0?l?u=parseFloat(m):(v=parseFloat(m)-1,e.css("counter-reset","listnumbering "+v)):l&&(u=1)),d.theme||(d.theme=a.mobile.getInheritedTheme(this.element,"c"));for(var C=0,D=j.length;C<D;C++){o=j.eq(C),p="ui-li";if(b||!o.hasClass("ui-li")){q=o.jqmData("theme")||d.theme,r=this._getChildrenByTagName(o[0],"a","A");var E=o.jqmData("role")==="list-divider";r.length&&!E?(y=o.jqmData("icon"),o.buttonMarkup({wrapperEls:"div",shadow:!1,corners:!1,iconpos:"right",icon:r.length>1||y===!1?!1:y||"arrow-r",theme:q}),y!==!1&&r.length===1&&o.addClass("ui-li-has-arrow"),r.first().removeClass("ui-link").addClass("ui-link-inherit"),r.length>1&&(p+=" ui-li-has-alt",s=r.last(),t=h||s.jqmData("theme")||d.splitTheme,B=s.jqmData("icon"),s.appendTo(o).attr("title",s.getEncodedText()).addClass("ui-li-link-alt").empty().buttonMarkup({shadow:!1,corners:!1,theme:q,icon:!1,iconpos:"notext"}).find(".ui-btn-inner").append(a(c.createElement("span")).buttonMarkup({shadow:!0,corners:!0,theme:t,iconpos:"notext",icon:B||y||i||d.splitIcon})))):E?(p+=" ui-li-divider ui-bar-"+g,o.attr("role","heading"),k&&(m||m===0?l?u=parseFloat(m):(w=parseFloat(m)-1,o.css("counter-reset","listnumbering "+w)):l&&(u=1))):p+=" ui-li-static ui-btn-up-"+q}k&&l&&p.indexOf("ui-li-divider")<0&&(x=p.indexOf("ui-li-static")>0?o:o.find(".ui-link-inherit"),x.addClass("ui-li-jsnumbering").prepend("<span class='ui-li-dec'>"+u++ +". </span>")),n[p]||(n[p]=[]),n[p].push(o[0])}for(p in n)a(n[p]).addClass(p).children(".ui-btn-inner").addClass(p);e.find("h1, h2, h3, h4, h5, h6").addClass("ui-li-heading").end().find("p, dl").addClass("ui-li-desc").end().find(".ui-li-aside").each(function(){var b=a(this);b.prependTo(b.parent())}).end().find(".ui-li-count").each(function(){a(this).closest("li").addClass("ui-li-has-count")}).addClass("ui-btn-up-"+(e.jqmData("counttheme")||this.options.countTheme)+" ui-btn-corner-all"),this._addThumbClasses(j),this._addThumbClasses(e.find(".ui-link-inherit")),this._refreshCorners(b),this._trigger("afterrefresh")},_idStringEscape:function(a){return a.replace(/[^a-zA-Z0-9]/g,"-")},_createSubPages:function(){var b=this.element,c=b.closest(".ui-page"),e=c.jqmData("url"),f=e||c[0][a.expando],g=b.attr("id"),h=this.options,i="data-"+a.mobile.ns,j=this,k=c.find(":jqmData(role='footer')").jqmData("id"),l;typeof d[f]=="undefined"&&(d[f]=-1),g=g||++d[f],a(b.find("li>ul, li>ol").toArray().reverse()).each(function(c){var d=this,f=a(this),j=f.attr("id")||g+"-"+c,m=f.parent(),n=a(f.prevAll().toArray().reverse()),p=n.length?n:a("<span>"+a.trim(m.contents()[0].nodeValue)+"</span>"),q=p.first().getEncodedText(),r=(e||"")+"&"+a.mobile.subPageUrlKey+"="+j,s=f.jqmData("theme")||h.theme,t=f.jqmData("counttheme")||b.jqmData("counttheme")||h.countTheme,u,v;l=!0,u=f.detach().wrap("<div "+i+"role='page' "+i+"url='"+r+"' "+i+"theme='"+s+"' "+i+"count-theme='"+t+"'><div "+i+"role='content'></div></div>").parent().before("<div "+i+"role='header' "+i+"theme='"+h.headerTheme+"'><div class='ui-title'>"+q+"</div></div>").after(k?a("<div "+i+"role='footer' "+i+"id='"+k+"'>"):"").parent().appendTo(a.mobile.pageContainer),u.page(),v=m.find("a:first"),v.length||(v=a("<a/>").html(p||q).prependTo(m.empty())),v.attr("href","#"+r)}).listview();if(l&&c.is(":jqmData(external-page='true')")&&c.data("page").options.domCache===!1){var m=function(b,d){var f=d.nextPage,g,h=new a.Event("pageremove");d.nextPage&&(g=f.jqmData("url"),g.indexOf(e+"&"+a.mobile.subPageUrlKey)!==0&&(j.childPages().remove(),c.trigger(h),h.isDefaultPrevented()||c.removeWithDependents()))};c.unbind("pagehide.remove").bind("pagehide.remove",m)}},childPages:function(){var b=this.parentPage.jqmData("url");return a(":jqmData(url^='"+b+"&"+a.mobile.subPageUrlKey+"')")}}),a(c).bind("pagecreate create",function(b){a.mobile.listview.prototype.enhanceWithin(b.target)})}(a),function(a,b){a.mobile.listview.prototype.options.autodividers=!1,a.mobile.listview.prototype.options.autodividersSelector=function(a){var b=a.text()||null;return b?(b=b.slice(0,1).toUpperCase(),b):null},a(c).delegate("ul,ol","listviewcreate",function(){var b=a(this),d=b.data("listview");if(!d||!d.options.autodividers)return;var e=function(){b.find("li:jqmData(role='list-divider')").remove();var e=b.find("li"),f=null,g,h;for(var i=0;i<e.length;i++){g=e[i],h=d.options.autodividersSelector(a(g));if(h&&f!==h){var j=c.createElement("li");j.appendChild(c.createTextNode(h)),j.setAttribute("data-"+a.mobile.ns+"role","list-divider"),g.parentNode.insertBefore(j,g)}f=h}},f=function(){b.unbind("listviewafterrefresh",f),e(),d.refresh(),b.bind("listviewafterrefresh",f)};f()})}(a),function(a,b){a.widget("mobile.checkboxradio",a.mobile.widget,{options:{theme:null,initSelector:"input[type='checkbox'],input[type='radio']"},_create:function(){var d=this,e=this.element,f=function(a,b){return a.jqmData(b)||a.closest("form, fieldset").jqmData(b)},g=a(e).closest("label"),h=g.length?g:a(e).closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("label").filter("[for='"+e[0].id+"']").first(),i=e[0].type,j=f(e,"mini"),k=i+"-on",l=i+"-off",m=e.parents(":jqmData(type='horizontal')").length?b:l,n=f(e,"iconpos"),o=m?"":" "+a.mobile.activeBtnClass,p="ui-"+k+o,q="ui-"+l,r="ui-icon-"+k,s="ui-icon-"+l;if(i!=="checkbox"&&i!=="radio")return;a.extend(this,{label:h,inputtype:i,checkedClass:p,uncheckedClass:q,checkedicon:r,uncheckedicon:s}),this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),h.buttonMarkup({theme:this.options.theme,icon:m,shadow:!1,mini:j,iconpos:n});var t=c.createElement("div");t.className="ui-"+i,e.add(h).wrapAll(t),h.bind({vmouseover:function(b){a(this).parent().is(".ui-disabled")&&b.stopPropagation()},vclick:function(a){if(e.is(":disabled")){a.preventDefault();return}return d._cacheVals(),e.prop("checked",i==="radio"&&!0||!e.prop("checked")),e.triggerHandler("click"),d._getInputSet().not(e).prop("checked",!1),d._updateAll(),!1}}),e.bind({vmousedown:function(){d._cacheVals()},vclick:function(){var b=a(this);b.is(":checked")?(b.prop("checked",!0),d._getInputSet().not(b).prop("checked",!1)):b.prop("checked",!1),d._updateAll()},focus:function(){h.addClass(a.mobile.focusClass)},blur:function(){h.removeClass(a.mobile.focusClass)}}),this.refresh()},_cacheVals:function(){this._getInputSet().each(function(){a(this).jqmData("cacheVal",this.checked)})},_getInputSet:function(){return this.inputtype==="checkbox"?this.element:this.element.closest("form, fieldset, :jqmData(role='page'), :jqmData(role='dialog')").find("input[name='"+this.element[0].name+"'][type='"+this.inputtype+"']")},_updateAll:function(){var b=this;this._getInputSet().each(function(){var c=a(this);(this.checked||b.inputtype==="checkbox")&&c.trigger("change")}).checkboxradio("refresh")},refresh:function(){var a=this.element[0],b=this.label,c=b.find(".ui-icon");a.checked?(b.addClass(this.checkedClass).removeClass(this.uncheckedClass),c.addClass(this.checkedicon).removeClass(this.uncheckedicon)):(b.removeClass(this.checkedClass).addClass(this.uncheckedClass),c.removeClass(this.checkedicon).addClass(this.uncheckedicon)),a.disabled?this.disable():this.enable()},disable:function(){this.element.prop("disabled",!0).parent().addClass("ui-disabled")},enable:function(){this.element.prop("disabled",!1).parent().removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.checkboxradio.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.widget("mobile.button",a.mobile.widget,{options:{theme:null,icon:null,iconpos:null,corners:!0,shadow:!0,iconshadow:!0,initSelector:"button, [type='button'], [type='submit'], [type='reset']"},_create:function(){var d=this.element,e,f=this.options,g,h,i=f.inline||d.jqmData("inline"),j=f.mini||d.jqmData("mini"),k="",l;if(d[0].tagName==="A"){d.hasClass("ui-btn")||d.buttonMarkup();return}this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.element,"c")),!~d[0].className.indexOf("ui-btn-left")||(k="ui-btn-left"),!~d[0].className.indexOf("ui-btn-right")||(k="ui-btn-right");if(d.attr("type")==="submit"||d.attr("type")==="reset")k?k+=" ui-submit":k="ui-submit";a("label[for='"+d.attr("id")+"']").addClass("ui-submit"),this.button=a("<div></div>")[d.html()?"html":"text"](d.html()||d.val()).insertBefore(d).buttonMarkup({theme:f.theme,icon:f.icon,iconpos:f.iconpos,inline:i,corners:f.corners,shadow:f.shadow,iconshadow:f.iconshadow,mini:j}).addClass(k).append(d.addClass("ui-btn-hidden")),e=this.button,g=d.attr("type"),h=d.attr("name"),g!=="button"&&g!=="reset"&&h&&d.bind("vclick",function(){l===b&&(l=a("<input>",{type:"hidden",name:d.attr("name"),value:d.attr("value")}).insertBefore(d),a(c).one("submit",function(){l.remove(),l=b}))}),d.bind({focus:function(){e.addClass(a.mobile.focusClass)},blur:function(){e.removeClass(a.mobile.focusClass)}}),this.refresh()},enable:function(){return this.element.attr("disabled",!1),this.button.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.button.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)},refresh:function(){var b=this.element;b.prop("disabled")?this.disable():this.enable(),a(this.button.data("buttonElements").text)[b.html()?"html":"text"](b.html()||b.val())}}),a(c).bind("pagecreate create",function(b){a.mobile.button.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.fn.controlgroup=function(b){function c(a,b){a.removeClass("ui-btn-corner-all ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-controlgroup-last ui-shadow").eq(0).addClass(b[0]).end().last().addClass(b[1]).addClass("ui-controlgroup-last")}return this.each(function(){var d=a(this),e=a.extend({direction:d.jqmData("type")||"vertical",shadow:!1,excludeInvisible:!0,mini:d.jqmData("mini")},b),f=d.children("legend"),g=d.children(".ui-controlgroup-label"),h=d.children(".ui-controlgroup-controls"),i=e.direction==="horizontal"?["ui-corner-left","ui-corner-right"]:["ui-corner-top","ui-corner-bottom"],j=d.find("input").first().attr("type");h.length&&h.contents().unwrap(),d.wrapInner("<div class='ui-controlgroup-controls'></div>"),f.length?(a("<div role='heading' class='ui-controlgroup-label'>"+f.html()+"</div>").insertBefore(d.children(0)),f.remove()):g.length&&d.prepend(g),d.addClass("ui-corner-all ui-controlgroup ui-controlgroup-"+e.direction),c(d.find(".ui-btn"+(e.excludeInvisible?":visible":"")).not(".ui-slider-handle"),i),c(d.find(".ui-btn-inner"),i),e.shadow&&d.addClass("ui-shadow"),e.mini&&d.addClass("ui-mini")})}}(a),function(a,b){a(c).bind("pagecreate create",function(b){a(b.target).find("a").jqmEnhanceable().not(".ui-btn, .ui-link-inherit, :jqmData(role='none'), :jqmData(role='nojs')").addClass("ui-link")})}(a),function(a,d){function e(a,b,c,d){var e=d;return a<b?e=c+(a-b)/2:e=Math.min(Math.max(c,d-b/2),c+a-b),e}function f(){var c=a(b);return{x:c.scrollLeft(),y:c.scrollTop(),cx:b.innerWidth||c.width(),cy:b.innerHeight||c.height()}}a.widget("mobile.popup",a.mobile.widget,{options:{theme:null,overlayTheme:null,shadow:!0,corners:!0,transition:"none",positionTo:"origin",tolerance:null,initSelector:":jqmData(role='popup')",closeLinkSelector:"a:jqmData(rel='back')",closeLinkEvents:"click.popup",navigateEvents:"navigate.popup",closeEvents:"navigate.popup pagebeforechange.popup",history:!a.mobile.browser.ie},_eatEventAndClose:function(a){return a.preventDefault(),a.stopImmediatePropagation(),this.close(),!1},_resizeScreen:function(){var a=this._ui.container.outerHeight(!0);this._ui.screen.removeAttr("style"),a>this._ui.screen.height()&&this._ui.screen.height(a)},_handleWindowKeyUp:function(b){if(this._isOpen&&b.keyCode===a.mobile.keyCode.ESCAPE)return this._eatEventAndClose(b)},_maybeRefreshTimeout:function(){var b=f();if(this._resizeData){if(b.x===this._resizeData.winCoords.x&&b.y===this._resizeData.winCoords.y&&b.cx===this._resizeData.winCoords.cx&&b.cy===this._resizeData.winCoords.cy)return!1;clearTimeout(this._resizeData.timeoutId)}return this._resizeData={timeoutId:setTimeout(a.proxy(this,"_resizeTimeout"),200),winCoords:b},!0},_resizeTimeout:function(){this._maybeRefreshTimeout()||(this._trigger("beforeposition"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(this._placementCoords(this._desiredCoords(d,d,"window"))),this._resizeScreen(),this._resizeData=null,this._orientationchangeInProgress=!1)},_handleWindowResize:function(a){this._isOpen&&this._maybeRefreshTimeout()},_handleWindowOrientationchange:function(a){this._orientationchangeInProgress||(this._ui.container.addClass("ui-selectmenu-hidden").removeAttr("style"),this._orientationchangeInProgress=!0)},_create:function(){var c={screen:a("<div class='ui-screen-hidden ui-popup-screen'></div>"),placeholder:a("<div style='display: none;'><!-- placeholder --></div>"),container:a("<div class='ui-popup-container ui-selectmenu-hidden'></div>")},e=this.element.closest(".ui-page"),f=this.element.attr("id"),g=this;this.options.history=this.options.history&&a.mobile.ajaxEnabled&&a.mobile.hashListeningEnabled,e.length===0&&(e=a("body")),this.options.container=this.options.container||a.mobile.pageContainer,e.append(c.screen),c.container.insertAfter(c.screen),c.placeholder.insertAfter(this.element),f&&(c.screen.attr("id",f+"-screen"),c.container.attr("id",f+"-popup"),c.placeholder.html("<!-- placeholder for "+f+" -->")),c.container.append(this.element),this.element.addClass("ui-popup"),a.extend(this,{_page:e,_ui:c,_fallbackTransition:"",_currentTransition:!1,_prereqs:null,_isOpen:!1,_tolerance:null,_resizeData:null,_orientationchangeInProgress:!1,_globalHandlers:[{src:a(b),handler:{orientationchange:a.proxy(this,"_handleWindowOrientationchange"),resize:a.proxy(this,"_handleWindowResize"),keyup:a.proxy(this,"_handleWindowKeyUp")}}]}),a.each(this.options,function(a,b){g.options[a]=d,g._setOption(a,b,!0)}),c.screen.bind("vclick",a.proxy(this,"_eatEventAndClose")),a.each(this._globalHandlers,function(a,b){b.src.bind(b.handler)})},_applyTheme:function(a,b,c){var d=(a.attr("class")||"").split(" "),e=!0,f=null,g,h=String(b);while(d.length>0){f=d.pop(),g=(new RegExp("^ui-"+c+"-([a-z])$")).exec(f);if(g&&g.length>1){f=g[1];break}f=null}b!==f&&(a.removeClass("ui-"+c+"-"+f),b!==null&&b!=="none"&&a.addClass("ui-"+c+"-"+h))},_setTheme:function(a){this._applyTheme(this.element,a,"body")},_setOverlayTheme:function(a){this._applyTheme(this._ui.screen,a,"overlay"),this._isOpen&&this._ui.screen.addClass("in")},_setShadow:function(a){this.element.toggleClass("ui-overlay-shadow",a)},_setCorners:function(a){this.element.toggleClass("ui-corner-all",a)},_applyTransition:function(b){this._ui.container.removeClass(this._fallbackTransition),b&&b!=="none"&&(this._fallbackTransition=a.mobile._maybeDegradeTransition(b),this._ui.container.addClass(this._fallbackTransition))},_setTransition:function(a){this._currentTransition||this._applyTransition(a)},_setTolerance:function(b){var c={t:30,r:15,b:30,l:15};if(b){var d=String(b).split(",");a.each(d,function(a,b){d[a]=parseInt(b,10)});switch(d.length){case 1:isNaN(d[0])||(c.t=c.r=c.b=c.l=d[0]);break;case 2:isNaN(d[0])||(c.t=c.b=d[0]),isNaN(d[1])||(c.l=c.r=d[1]);break;case 4:isNaN(d[0])||(c.t=d[0]),isNaN(d[1])||(c.r=d[1]),isNaN(d[2])||(c.b=d[2]),isNaN(d[3])||(c.l=d[3]);break;default:}}this._tolerance=c},_setOption:function(b,c){var e,f="_set"+b.charAt(0).toUpperCase()+b.slice(1);this[f]!==d&&this[f](c),e=["initSelector","closeLinkSelector","closeLinkEvents","navigateEvents","closeEvents","history","container"],a.mobile.widget.prototype._setOption.apply(this,arguments),a.inArray(b,e)===-1&&this.element.attr("data-"+(a.mobile.ns||"")+b.replace(/([A-Z])/,"-$1").toLowerCase(),c)},_placementCoords:function(a){var b=f(),d={x:this._tolerance.l,y:b.y+this._tolerance.t,cx:b.cx-this._tolerance.l-this._tolerance.r,cy:b.cy-this._tolerance.t-this._tolerance.b},g,h;this._ui.container.css("max-width",d.cx),g={cx:this._ui.container.outerWidth(!0),cy:this._ui.container.outerHeight(!0)},h={x:e(d.cx,g.cx,d.x,a.x),y:e(d.cy,g.cy,d.y,a.y)},h.y=Math.max(0,h.y);var i=c.documentElement,j=c.body,k=Math.max(i.clientHeight,j.scrollHeight,j.offsetHeight,i.scrollHeight,i.offsetHeight);return h.y-=Math.min(h.y,Math.max(0,h.y+g.cy-k)),{left:h.x,top:h.y}},_createPrereqs:function(b,c,d){var e=this,f;f={screen:a.Deferred(),container:a.Deferred()},f.screen.then(function(){f===e._prereqs&&b()}),f.container.then(function(){f===e._prereqs&&c()}),a.when(f.screen,f.container).done(function(){f===e._prereqs&&(e._prereqs=null,d())}),e._prereqs=f},_animate:function(b){this._ui.screen.removeClass(b.classToRemove).addClass(b.screenClassToAdd),b.prereqs.screen.resolve(),b.transition&&b.transition!=="none"?(b.applyTransition&&this._applyTransition(b.transition),this._ui.container.animationComplete(a.proxy(b.prereqs.container,"resolve")).addClass(b.containerClassToAdd).removeClass(b.classToRemove)):b.prereqs.container.resolve()},_desiredCoords:function(b,c,d){var e=null,g,h=f();if(d&&d!=="origin")if(d==="window")b=h.cx/2+h.x,c=h.cy/2+h.y;else{try{e=a(d)}catch(i){e=null}e&&(e.filter(":visible"),e.length===0&&(e=null))}e&&(g=e.offset(),b=g.left+e.outerWidth()/2,c=g.top+e.outerHeight()/2);if(a.type(b)!=="number"||isNaN(b))b=h.cx/2+h.x;if(a.type(c)!=="number"||isNaN(c))c=h.cy/2+h.y;return{x:b,y:c}},_openPrereqsComplete:function(){var a=this;a._ui.container.addClass("ui-popup-active"),a._isOpen=!0,a._resizeScreen(),setTimeout(function(){a._ui.container.attr("tabindex","0").focus(),a._trigger("afteropen")})},_open:function(c){var d,e,f=function(){var a=b,c=navigator.userAgent,d=c.match(/AppleWebKit\/([0-9\.]+)/),e=!!d&&d[1],f=c.match(/Android (\d+(?:\.\d+))/),g=!!f&&f[1],h=c.indexOf("Chrome")>-1;return f!==null&&g==="4.0"&&e&&e>534.13&&!h?!0:!1}();c=c||{},e=c.transition||this.options.transition,this._trigger("beforeposition"),d=this._placementCoords(this._desiredCoords(c.x,c.y,c.positionTo||this.options.positionTo||"origin")),this._createPrereqs(a.noop,a.noop,a.proxy(this,"_openPrereqsComplete")),e?(this._currentTransition=e,this._applyTransition(e)):e=this.options.transition,this.options.theme||this._setTheme(this._page.jqmData("theme")||a.mobile.getInheritedTheme(this._page,"c")),this._ui.screen.removeClass("ui-screen-hidden"),this._ui.container.removeClass("ui-selectmenu-hidden").offset(d),this.options.overlayTheme&&f&&this.element.closest(".ui-page").addClass("ui-popup-open"),this._animate({additionalCondition:!0,transition:e,classToRemove:"",screenClassToAdd:"in",containerClassToAdd:"in",applyTransition:!1,prereqs:this._prereqs})},_closePrereqScreen:function(){this._ui.screen.removeClass("out").addClass("ui-screen-hidden")},_closePrereqContainer:function(){this._ui.container.removeClass("reverse out").addClass("ui-selectmenu-hidden").removeAttr("style")},_closePrereqsDone:function(){var b=this,c=b.options;b._ui.container.removeAttr("tabindex"),c.container.unbind(c.closeEvents),b.element.undelegate(c.closeLinkSelector,c.closeLinkEvents),a.mobile.popup.active=d,b._trigger("afterclose")},_close:function(){this._ui.container.removeClass("ui-popup-active"),this._page.removeClass("ui-popup-open"),this._isOpen=!1,this._createPrereqs(a.proxy(this,"_closePrereqScreen"),a.proxy(this,"_closePrereqContainer"),a.proxy(this,"_closePrereqsDone")),this._animate({additionalCondition:this._ui.screen.hasClass("in"),transition:this._currentTransition||this.options.transition,classToRemove:"in",screenClassToAdd:"out",containerClassToAdd:"reverse out",applyTransition:!0,prereqs:this._prereqs})},_destroy:function(){var b=this;b._close(),b._setTheme("none"),b.element.insertAfter(b._ui.placeholder).removeClass("ui-popup ui-overlay-shadow ui-corner-all"),b._ui.screen.remove(),b._ui.container.remove(),b._ui.placeholder.remove(),a.each(b._globalHandlers,function(b,c){a.each(c.handler,function(a,b){c.src.unbind(a,b)})})},_bindContainerClose:function(){var b=this;b.options.container.one(b.options.closeEvents,a.proxy(b._close,b))},open:function(b){var c=this,e=this.options,f,g,h,i,j,k;if(a.mobile.popup.active)return;a.mobile.popup.active=this;if(!e.history){c._open(b),c._bindContainerClose(),c.element.delegate(e.closeLinkSelector,e.closeLinkEvents,function(a){return c._close(),!1});return}g=a.mobile.dialogHashKey,h=a.mobile.activePage,i=h.is(".ui-dialog"),f=a.mobile.urlHistory.getActive().url,j=f.indexOf(g)>-1&&!i,k=a.mobile.urlHistory;if(j){c._open(b),c._bindContainerClose();return}f.indexOf(g)===-1&&!i?f=f+g:f=a.mobile.path.parseLocation().hash+g,k.activeIndex===0&&f===k.initialDst&&(f+=g),e.container.one(e.navigateEvents,function(a){a.preventDefault(),c._open(b),c._bindContainerClose()}),k.ignoreNextHashChange=i,k.addNew(f,d,d,d,"dialog"),a.mobile.path.set(f)},close:function(){if(!a.mobile.popup.active)return;this.options.history?a.mobile.back():this._close()}}),a.mobile.popup.handleLink=function(b){var c=b.closest(":jqmData(role='page')"),d=c.length===0?a("body"):c,e=a(a.mobile.path.parseUrl(b.attr("href")).hash,d[0]),f;e.data("popup")&&(f=b.offset(),e.popup("open",{x:f.left+b.outerWidth()/2,y:f.top+b.outerHeight()/2,transition:b.jqmData("transition"),positionTo:b.jqmData("position-to"),link:b})),setTimeout(function(){b.removeClass(a.mobile.activeBtnClass)},300)},a(c).bind("pagebeforechange",function(b,c){c.options.role==="popup"&&(a.mobile.popup.handleLink(c.options.link),b.preventDefault())}),a(c).bind("pagecreate create",function(b){a.mobile.popup.prototype.enhanceWithin(b.target,!0)})}(a),function(a){var b=a("meta[name=viewport]"),c=b.attr("content"),d=c+",maximum-scale=1, user-scalable=no",e=c+",maximum-scale=10, user-scalable=yes",f=/(user-scalable[\s]*=[\s]*no)|(maximum-scale[\s]*=[\s]*1)[$,\s]/.test(c);a.mobile.zoom=a.extend({},{enabled:!f,locked:!1,disable:function(c){!f&&!a.mobile.zoom.locked&&(b.attr("content",d),a.mobile.zoom.enabled=!1,a.mobile.zoom.locked=c||!1)},enable:function(c){!f&&(!a.mobile.zoom.locked||c===!0)&&(b.attr("content",e),a.mobile.zoom.enabled=!0,a.mobile.zoom.locked=!1)},restore:function(){f||(b.attr("content",c),a.mobile.zoom.enabled=!0)}})}(a),function(a,d){a.widget("mobile.textinput",a.mobile.widget,{options:{theme:null,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"input[type='text'], input[type='search'], :jqmData(type='search'), input[type='number'], :jqmData(type='number'), input[type='password'], input[type='email'], input[type='url'], input[type='tel'], textarea, input[type='time'], input[type='date'], input[type='month'], input[type='week'], input[type='datetime'], input[type='datetime-local'], input[type='color'], input:not([type])",clearSearchButtonText:"clear text",disabled:!1},_create:function(){function m(){setTimeout(function(){l.toggleClass("ui-input-clear-hidden",!e.val())},0)}var d=this,e=this.element,f=this.options,g=f.theme||a.mobile.getInheritedTheme(this.element,"c"),h=" ui-body-"+g,i=e.jqmData("mini")===!0,j=i?" ui-mini":"",k,l;a("label[for='"+e.attr("id")+"']").addClass("ui-input-text"),k=e.addClass("ui-input-text ui-body-"+g),typeof e[0].autocorrect!="undefined"&&!a.support.touchOverflow&&(e[0].setAttribute("autocorrect","off"),e[0].setAttribute("autocomplete","off")),e.is("[type='search'],:jqmData(type='search')")?(k=e.wrap("<div class='ui-input-search ui-shadow-inset ui-btn-corner-all ui-btn-shadow ui-icon-searchfield"+h+j+"'></div>").parent(),l=a("<a href='#' class='ui-input-clear' title='"+f.clearSearchButtonText+"'>"+f.clearSearchButtonText+"</a>").bind("click",function(a){e.val("").focus().trigger("change"),l.addClass("ui-input-clear-hidden"),a.preventDefault()}).appendTo(k).buttonMarkup({icon:"delete",iconpos:"notext",corners:!0,shadow:!0,mini:i}),m(),e.bind("paste cut keyup focus change blur",m)):e.addClass("ui-corner-all ui-shadow-inset"+h+j),e.focus(function(){k.addClass(a.mobile.focusClass)}).blur(function(){k.removeClass(a.mobile.focusClass)}).bind("focus",function(){f.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("blur",function(){f.preventFocusZoom&&a.mobile.zoom.enable(!0)});if(e.is("textarea")){var n=15,o=100,p;this._keyup=function(){var a=e[0].scrollHeight,b=e[0].clientHeight;b<a&&e.height(a+n)},e.keyup(function(){clearTimeout(p),p=setTimeout(d._keyup,o)}),this._on(a(c),{pagechange:"_keyup"}),a.trim(e.val())&&this._on(a(b),{load:"_keyup"})}e.attr("disabled")&&this.disable()},disable:function(){var a;return this.element.attr("disabled",!0).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.addClass("ui-disabled"),this._setOption("disabled",!0)},enable:function(){var a;return this.element.attr("disabled",!1).is("[type='search'], :jqmData(type='search')")?a=this.element.parent():a=this.element,a.removeClass("ui-disabled"),this._setOption("disabled",!1)}}),a(c).bind("pagecreate create",function(b){a.mobile.textinput.prototype.enhanceWithin(b.target,!0)})}(a),function(a,b){a.mobile.listview.prototype.options.filter=!1,a.mobile.listview.prototype.options.filterPlaceholder="Filter items...",a.mobile.listview.prototype.options.filterTheme="c";var d=function(a,b,c){return a.toString().toLowerCase().indexOf(b)===-1};a.mobile.listview.prototype.options.filterCallback=d,a(c).delegate(":jqmData(role='listview')","listviewcreate",function(){var b=a(this),c=b.data("listview");if(!c.options.filter)return;var e=a("<form>",{"class":"ui-listview-filter ui-bar-"+c.options.filterTheme,role:"search"}),f=a("<input>",{placeholder:c.options.filterPlaceholder}).attr("data-"+a.mobile.ns+"type","search").jqmData("lastval","").bind("keyup change",function(){var e=a(this),f=this.value.toLowerCase(),g=null,h=e.jqmData("lastval")+"",i=!1,j="",k,l=c.options.filterCallback!==d;c._trigger("beforefilter","beforefilter",{input:this}),e.jqmData("lastval",f),l||f.length<h.length||f.indexOf(h)!==0?g=b.children():g=b.children(":not(.ui-screen-hidden)");if(f){for(var m=g.length-1;m>=0;m--)k=a(g[m]),j=k.jqmData("filtertext")||k.text(),k.is("li:jqmData(role=list-divider)")?(k.toggleClass("ui-filter-hidequeue",!i),i=!1):c.options.filterCallback(j,f,k)?k.toggleClass("ui-filter-hidequeue",!0):i=!0;g.filter(":not(.ui-filter-hidequeue)").toggleClass("ui-screen-hidden",!1),g.filter(".ui-filter-hidequeue").toggleClass("ui-screen-hidden",!0).toggleClass("ui-filter-hidequeue",!1)}else g.toggleClass("ui-screen-hidden",!1);c._refreshCorners()}).appendTo(e).textinput();c.options.inset&&e.addClass("ui-listview-filter-inset"),e.bind("submit",function(){return!1}).insertBefore(b)})}(a),function(a,d){a.widget("mobile.slider",a.mobile.widget,{widgetEventPrefix:"slide",options:{theme:null,trackTheme:null,disabled:!1,initSelector:"input[type='range'], :jqmData(type='range'), :jqmData(role='slider')",mini:!1},_create:function(){var e=this,f=this.element,g=a.mobile.getInheritedTheme(f,"c"),h=this.options.theme||g,i=this.options.trackTheme||g,j=f[0].nodeName.toLowerCase(),k=j==="select"?"ui-slider-switch":"",l=f.attr("id"),m=a("[for='"+l+"']"),n=m.attr("id")||l+"-label",o=m.attr("id",n),p=function(){return j==="input"?parseFloat(f.val()):f[0].selectedIndex},q=j==="input"?parseFloat(f.attr("min")):0,r=j==="input"?parseFloat(f.attr("max")):f.find("option").length-1,s=b.parseFloat(f.attr("step")||1),t=this.options.inline||f.jqmData("inline")===!0?" ui-slider-inline":"",u=this.options.mini||f.jqmData("mini")?" ui-slider-mini":"",v=c.createElement("a"),w=a(v),x=c.createElement("div"),y=a(x),z=f.jqmData("highlight")&&j!=="select"?function(){var b=c.createElement("div");return b.className="ui-slider-bg "+a.mobile.activeBtnClass+" ui-btn-corner-all",a(b).prependTo(y)}():!1,A;this._type=j,v.setAttribute("href","#"),x.setAttribute("role","application"),x.className=["ui-slider ",k," ui-btn-down-",i," ui-btn-corner-all",t,u].join(""),v.className="ui-slider-handle",x.appendChild(v),w.buttonMarkup({corners:!0,theme:h,shadow:!0}).attr({role:"slider","aria-valuemin":q,"aria-valuemax":r,"aria-valuenow":p(),"aria-valuetext":p(),title:p(),"aria-labelledby":n}),a.extend(this,{slider:y,handle:w,valuebg:z,dragging:!1,beforeStart:null,userModified:!1,mouseMoved:!1});if(j==="select"){var B=c.createElement("div");B.className="ui-slider-inneroffset";for(var C=0,D=x.childNodes.length;C<D;C++)B.appendChild(x.childNodes[C]);x.appendChild(B),w.addClass("ui-slider-handle-snapping"),A=f.find("option");for(var E=0,F=A.length;E<F;E++){var G=E?"a":"b",H=E?" "+a.mobile.activeBtnClass:" ui-btn-down-"+i,I=c.createElement("div"),J=c.createElement("span");J.className=["ui-slider-label ui-slider-label-",G,H," ui-btn-corner-all"].join(""),J.setAttribute("role","img"),J.appendChild(c.createTextNode(A[E].innerHTML)),a(J).prependTo(y)}e._labels=a(".ui-slider-label",y)}o.addClass("ui-slider"),f.addClass(j==="input"?"ui-slider-input":"ui-slider-switch").change(function(){e.mouseMoved||e.refresh(p(),!0)}).keyup(function(){e.refresh(p(),!0,!0)}).blur(function(){e.refresh(p(),!0)}),this._preventDocumentDrag=function(a){if(e.dragging&&!e.options.disabled)return e.mouseMoved=!0,j==="select"&&w.removeClass("ui-slider-handle-snapping"),e.refresh(a),e.userModified=e.beforeStart!==f[0].selectedIndex,!1},this._on(a(c),{vmousemove:this._preventDocumentDrag}),f.bind("vmouseup",a.proxy(e._checkedRefresh,e)),y.bind("vmousedown",function(a){return e.options.disabled?!1:(e.dragging=!0,e.userModified=!1,e.mouseMoved=!1,j==="select"&&(e.beforeStart=f[0].selectedIndex),e.refresh(a),e._trigger("start"),!1)}).bind("vclick",!1),this._sliderMouseUp=function(){if(e.dragging)return e.dragging=!1,j==="select"&&(w.addClass("ui-slider-handle-snapping"),e.mouseMoved?e.userModified?e.refresh(e.beforeStart===0?1:0):e.refresh(e.beforeStart):e.refresh(e.beforeStart===0?1:0)),e.mouseMoved=!1,e._trigger("stop"),!1},this._on(y.add(c),{vmouseup:this._sliderMouseUp}),y.insertAfter(f),j==="select"&&this.handle.bind({focus:function(){y.addClass(a.mobile.focusClass)},blur:function(){y.removeClass(a.mobile.focusClass)}}),this.handle.bind({vmousedown:function(){a(this).focus()},vclick:!1,keydown:function(b){var c=p();if(e.options.disabled)return;switch(b.keyCode){case a.mobile.keyCode.HOME:case a.mobile.keyCode.END:case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:b.preventDefault(),e._keySliding||(e._keySliding=!0,a(this).addClass("ui-state-active"))}switch(b.keyCode){case a.mobile.keyCode.HOME:e.refresh(q);break;case a.mobile.keyCode.END:e.refresh(r);break;case a.mobile.keyCode.PAGE_UP:case a.mobile.keyCode.UP:case a.mobile.keyCode.RIGHT:e.refresh(c+s);break;case a.mobile.keyCode.PAGE_DOWN:case a.mobile.keyCode.DOWN:case a.mobile.keyCode.LEFT:e.refresh(c-s)}},keyup:function(b){e._keySliding&&(e._keySliding=!1,a(this).removeClass("ui-state-active"))}}),this.refresh(d,d,!0)},_checkedRefresh:function(){this.value!=this._value()&&this.refresh(this._value())},_value:function(){return this._type==="input"?parseFloat(this.element.val()):this.element[0].selectedIndex},refresh:function(b,c,d){(this.options.disabled||this.element.attr("disabled"))&&this.disable(),this.value=this._value();var e=this.element,f,g=e[0].nodeName.toLowerCase(),h=g==="input"?parseFloat(e.attr("min")):0,i=g==="input"?parseFloat(e.attr("max")):e.find("option").length-1,j=g==="input"&&parseFloat(e.attr("step"))>0?parseFloat(e.attr("step")):1;if(typeof b=="object"){var k=b,l=8;if(!this.dragging||k.pageX<this.slider.offset().left-l||k.pageX>this.slider.offset().left+this.slider.width()+l)return;f=Math.round((k.pageX-this.slider.offset().left)/this.slider.width()*100)}else b==null&&(b=g==="input"?parseFloat(e.val()||0):e[0].selectedIndex),f=(parseFloat(b)-h)/(i-h)*100;if(isNaN(f))return;f<0&&(f=0),f>100&&(f=100);var m=f/100*(i-h)+h,n=(m-h)%j,o=m-n;Math.abs(n)*2>=j&&(o+=n>0?j:-j),m=parseFloat(o.toFixed(5)),m<h&&(m=h),m>i&&(m=i),this.handle.css("left",f+"%"),this.handle.attr({"aria-valuenow":g==="input"?m:e.find("option").eq(m).attr("value"),"aria-valuetext":g==="input"?m:e.find("option").eq(m).getEncodedText(),title:g==="input"?m:e.find("option").eq(m).getEncodedText()}),this.valuebg&&this.valuebg.css("width",f+"%");if(this._labels){var p=this.handle.width()/this.slider.width()*100,q=f&&p+(100-p)*f/100,r=f===100?0:Math.min(p+100-q,100);this._labels.each(function(){var b=a(this).is(".ui-slider-label-a");a(this).width((b?q:r)+"%")})}if(!d){var s=!1;g==="input"?(s=e.val()!==m,e.val(m)):(s=e[0].selectedIndex!==m,e[0].selectedIndex=m),!c&&s&&e.trigger("change")}},enable:function(){return this.element.attr("disabled",!1),this.slider.removeClass("ui-disabled").attr("aria-disabled",!1),this._setOption("disabled",!1)},disable:function(){return this.element.attr("disabled",!0),this.slider.addClass("ui-disabled").attr("aria-disabled",!0),this._setOption("disabled",!0)}}),a(c).bind("pagecreate create",function(b){a.mobile.slider.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){a.widget("mobile.selectmenu",a.mobile.widget,{options:{theme:null,disabled:!1,icon:"arrow-d",iconpos:"right",inline:!1,corners:!0,shadow:!0,iconshadow:!0,overlayTheme:"a",hidePlaceholderMenuItems:!0,closeText:"Close",nativeMenu:!0,preventFocusZoom:/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1,initSelector:"select:not( :jqmData(role='slider') )",mini:!1},_button:function(){return a("<div/>")},_setDisabled:function(a){return this.element.attr("disabled",a),this.button.attr("aria-disabled",a),this._setOption("disabled",a)},_focusButton:function(){var a=this;setTimeout(function(){a.button.focus()},40)},_selectOptions:function(){return this.select.find("option")},_preExtension:function(){var b="";!~this.element[0].className.indexOf("ui-btn-left")||(b=" ui-btn-left"),!~this.element[0].className.indexOf("ui-btn-right")||(b=" ui-btn-right"),this.select=this.element.wrap("<div class='ui-select"+b+"'>"),this.selectID=this.select.attr("id"),this.label=a("label[for='"+this.selectID+"']").addClass("ui-select"),this.isMultiple=this.select[0].multiple,this.options.theme||(this.options.theme=a.mobile.getInheritedTheme(this.select,"c"))},_create:function(){this._preExtension(),this._trigger("beforeCreate"),this.button=this._button();var c=this,d=this.options,e=d.inline||this.select.jqmData("inline"),f=d.mini||this.select.jqmData("mini"),g=d.icon?d.iconpos||this.select.jqmData("iconpos"):!1,h=this.select[0].selectedIndex===-1?0:this.select[0].selectedIndex,i=this.button.insertBefore(this.select).buttonMarkup({theme:d.theme,icon:d.icon,iconpos:g,inline:e,corners:d.corners,shadow:d.shadow,iconshadow:d.iconshadow,mini:f});this.setButtonText(),d.nativeMenu&&b.opera&&b.opera.version&&i.addClass("ui-select-nativeonly"),this.isMultiple&&(this.buttonCount=a("<span>").addClass("ui-li-count ui-btn-up-c ui-btn-corner-all").hide().appendTo(i.addClass("ui-li-has-count"))),(d.disabled||this.element.attr("disabled"))&&this.disable(),this.select.change(function(){c.refresh()}),this.build()},build:function(){var b=this;this.select.appendTo(b.button).bind("vmousedown",function(){b.button.addClass(a.mobile.activeBtnClass)}).bind("focus",function(){b.button.addClass(a.mobile.focusClass)}).bind("blur",function(){b.button.removeClass(a.mobile.focusClass)}).bind("focus vmouseover",function(){b.button.trigger("vmouseover")}).bind("vmousemove",function(){b.button.removeClass(a.mobile.activeBtnClass)}).bind("change blur vmouseout",function(){b.button.trigger("vmouseout").removeClass(a.mobile.activeBtnClass)}).bind("change blur",function(){b.button.removeClass("ui-btn-down-"+b.options.theme)}),b.button.bind("vmousedown",function(){b.options.preventFocusZoom&&a.mobile.zoom.disable(!0)}).bind("mouseup",function(){b.options.preventFocusZoom&&setTimeout(function(){a.mobile.zoom.enable(!0)},0)})},selected:function(){return this._selectOptions().filter(":selected")},selectedIndices:function(){var a=this;return this.selected().map(function(){return a._selectOptions().index(this)}).get()},setButtonText:function(){var b=this,d=this.selected(),e=this.placeholder,f=a(c.createElement("span"));this.button.find(".ui-btn-text").html(function(){return d.length?e=d.map(function(){return a(this).text()}).get().join(", "):e=b.placeholder,f.text(e).addClass(b.select.attr("class")).addClass(d.attr("class"))})},setButtonCount:function(){var a=this.selected();this.isMultiple&&this.buttonCount[a.length>1?"show":"hide"]().text(a.length)},refresh:function(){this.setButtonText(),this.setButtonCount()},open:a.noop,close:a.noop,disable:function(){this._setDisabled(!0),this.button.addClass("ui-disabled")},enable:function(){this._setDisabled(!1),this.button.removeClass("ui-disabled")}}),a(c).bind("pagecreate create",function(b){a.mobile.selectmenu.prototype.enhanceWithin(b.target,!0)})}(a),function(a,d){var e=function(d){var e=d.select,f=d.selectID,g=d.label,h=d.select.closest(".ui-page"),i=d._selectOptions(),j=d.isMultiple=d.select[0].multiple,k=f+"-button",l=f+"-menu",m=a("<div data-"+a.mobile.ns+"role='dialog' data-"+a.mobile.ns+"theme='"+d.options.theme+"' data-"+a.mobile.ns+"overlay-theme='"+d.options.overlayTheme+"'>"+"<div data-"+a.mobile.ns+"role='header'>"+"<div class='ui-title'>"+g.getEncodedText()+"</div>"+"</div>"+"<div data-"+a.mobile.ns+"role='content'></div>"+"</div>"),n=a("<div>",{"class":"ui-selectmenu"}).insertAfter(d.select).popup({theme:"a"}),o=a("<ul>",{"class":"ui-selectmenu-list",id:l,role:"listbox","aria-labelledby":k}).attr("data-"+a.mobile.ns+"theme",d.options.theme).appendTo(n),p=a("<div>",{"class":"ui-header ui-bar-"+d.options.theme}).prependTo(n),q=a("<h1>",{"class":"ui-title"}).appendTo(p),r,s,t;d.isMultiple&&(t=a("<a>",{text:d.options.closeText,href:"#","class":"ui-btn-left"}).attr("data-"+a.mobile.ns+"iconpos","notext").attr("data-"+a.mobile.ns+"icon","delete").appendTo(p).buttonMarkup()),a.extend(d,{select:d.select,selectID:f,buttonId:k,menuId:l,thisPage:h,menuPage:m,label:g,selectOptions:i,isMultiple:j,theme:d.options.theme,listbox:n,list:o,header:p,headerTitle:q,headerClose:t,menuPageContent:r,menuPageClose:s,placeholder:"",build:function(){var b=this;b.refresh(),b.select.attr("tabindex","-1").focus(function(){a(this).blur(),b.button.focus()}),b.button.bind("vclick keydown",function(c){if(c.type==="vclick"||c.keyCode&&(c.keyCode===a.mobile.keyCode.ENTER||c.keyCode===a.mobile.keyCode.SPACE))b.open(),c.preventDefault()}),b.list.attr("role","listbox").bind("focusin",function(b){a(b.target).attr("tabindex","0").trigger("vmouseover")}).bind("focusout",function(b){a(b.target).attr("tabindex","-1").trigger("vmouseout")}).delegate("li:not(.ui-disabled, .ui-li-divider)","click",function(c){var e=b.select[0].selectedIndex,f=b.list.find("li:not(.ui-li-divider)").index(this),g=b._selectOptions().eq(f)[0];g.selected=b.isMultiple?!g.selected:!0,b.isMultiple&&a(this).find(".ui-icon").toggleClass("ui-icon-checkbox-on",g.selected).toggleClass("ui-icon-checkbox-off",!g.selected),(b.isMultiple||e!==f)&&b.select.trigger("change"),b.isMultiple?b.list.find("li:not(.ui-li-divider)").eq(f).addClass("ui-btn-down-"+d.options.theme).find("a").first().focus():b.close(),c.preventDefault()}).keydown(function(b){var c=a(b.target),e=c.closest("li"),f,g;switch(b.keyCode){case 38:return f=e.prev().not(".ui-selectmenu-placeholder"),f.is(".ui-li-divider")&&(f=f.prev()),f.length&&(c.blur().attr("tabindex","-1"),f.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 40:return g=e.next(),g.is(".ui-li-divider")&&(g=g.next()),g.length&&(c.blur().attr("tabindex","-1"),g.addClass("ui-btn-down-"+d.options.theme).find("a").first().focus()),!1;case 13:case 32:return c.trigger("click"),!1}}),b.menuPage.bind("pagehide",function(){b.list.appendTo(b.listbox),b._focusButton(),a.mobile._bindPageRemove.call(b.thisPage)}),b.listbox.bind("popupafterclose",function(a){b.close()}),b.isMultiple&&b.headerClose.click(function(){if(b.menuType==="overlay")return b.close(),!1}),b.thisPage.addDependents(this.menuPage)},_isRebuildRequired:function(){var a=this.list.find("li"),b=this._selectOptions();return b.text()!==a.text()},selected:function(){return this._selectOptions().filter(":selected:not( :jqmData(placeholder='true') )")},refresh:function(b,c){var d=this,e=this.element,f=this.isMultiple,g;(b||this._isRebuildRequired())&&d._buildList(),g=this.selectedIndices(),d.setButtonText(),d.setButtonCount(),d.list.find("li:not(.ui-li-divider)").removeClass(a.mobile.activeBtnClass).attr("aria-selected",!1).each(function(b){if(a.inArray(b,g)>-1){var c=a(this);c.attr("aria-selected",!0),d.isMultiple?c.find(".ui-icon").removeClass("ui-icon-checkbox-off").addClass("ui-icon-checkbox-on"):c.is(".ui-selectmenu-placeholder")?c.next().addClass(a.mobile.activeBtnClass):c.addClass(a.mobile.activeBtnClass)}})},close:function(){if(this.options.disabled||!this.isOpen)return;var b=this;b.menuType==="page"?a.mobile.back():(b.listbox.popup("close"),b.list.appendTo(b.listbox),b._focusButton()),b.isOpen=!1},open:function(){function o(){var b=c.list.find("."+a.mobile.activeBtnClass+" a");b.length===0&&(b=c.list.find("li.ui-btn:not( :jqmData(placeholder='true') ) a")),b.first().focus().closest("li").addClass("ui-btn-down-"+d.options.theme)}if(this.options.disabled)return;var c=this,e=a(b),f=c.list.parent(),g=f.outerHeight(),h=f.outerWidth(),i=a("."+a.mobile.activePageClass),j=e.scrollTop(),k=c.button.offset().top,l=e.height(),n=e.width();c.button.addClass(a.mobile.activeBtnClass),setTimeout(function(){c.button.removeClass(a.mobile.activeBtnClass)},300),g>l-80||!a.support.scrollTop?(c.menuPage.appendTo(a.mobile.pageContainer).page(),c.menuPageContent=m.find(".ui-content"),c.menuPageClose=m.find(".ui-header a"),c.thisPage.unbind("pagehide.remove"),j===0&&k>l&&c.thisPage.one("pagehide",function(){a(this).jqmData("lastScroll",k)}),c.menuPage.one("pageshow",function(){o(),c.isOpen=!0}),c.menuType="page",c.menuPageContent.append(c.list),c.menuPage.find("div .ui-title").text(c.label.text()),a.mobile.changePage(c.menuPage,{transition:a.mobile.defaultDialogTransition})):(c.menuType="overlay",c.listbox.one("popupafteropen",o).popup("open",{x:c.button.offset().left+c.button.outerWidth()/2,y:c.button.offset().top+c.button.outerHeight()/2}),c.isOpen=!0)},_buildList:function(){var b=this,d=this.options,e=this.placeholder,f=!0,g=[],h=[],i=b.isMultiple?"checkbox-off":"false";b.list.empty().filter(".ui-listview").listview("destroy");var j=b.select.find("option"),k=j.length,l=this.select[0],m="data-"+a.mobile.ns,n=m+"option-index",o=m+"icon",p=m+"role",q=m+"placeholder",r=c.createDocumentFragment(),s=!1,t;for(var u=0;u<k;u++,s=!1){var v=j[u],w=a(v),x=v.parentNode,y=w.text(),z=c.createElement("a"),A=[];z.setAttribute("href","#"),z.appendChild(c.createTextNode(y));if(x!==l&&x.nodeName.toLowerCase()==="optgroup"){var B=x.getAttribute("label");if(B!==t){var C=c.createElement("li");C.setAttribute(p,"list-divider"),C.setAttribute("role","option"),C.setAttribute("tabindex","-1"),C.appendChild(c.createTextNode(B)),r.appendChild(C),t=B}}f&&(!v.getAttribute("value")||y.length===0||w.jqmData("placeholder"))&&(f=!1,s=!0,v.setAttribute(q,!0),d.hidePlaceholderMenuItems&&A.push("ui-selectmenu-placeholder"),e||(e=b.placeholder=y));var D=c.createElement("li");v.disabled&&(A.push("ui-disabled"),D.setAttribute("aria-disabled",!0)),D.setAttribute(n,u),D.setAttribute(o,i),s&&D.setAttribute(q,!0),D.className=A.join(" "),D.setAttribute("role","option"),z.setAttribute("tabindex","-1"),D.appendChild(z),r.appendChild(D)}b.list[0].appendChild(r),!this.isMultiple&&!e.length?this.header.hide():this.headerTitle.text(this.placeholder),b.list.listview()},_button:function(){return a("<a>",{href:"#",role:"button",id:this.buttonId,"aria-haspopup":"true","aria-owns":this.menuId})}})};a(c).bind("selectmenubeforecreate",function(b){var c=a(b.target).data("selectmenu");!c.options.nativeMenu&&c.element.parents(":jqmData(role='popup')").length===0&&e(c)})}(a),function(a,d){a.widget("mobile.fixedtoolbar",a.mobile.widget,{options:{visibleOnPageShow:!0,disablePageZoom:!0,transition:"slide",fullscreen:!1,tapToggle:!0,tapToggleBlacklist:"a, button, input, select, textarea, .ui-header-fixed, .ui-footer-fixed, .ui-popup",hideDuringFocus:"input, textarea, select",updatePagePadding:!0,trackPersistentToolbars:!0,supportBlacklist:function(){var a=b,c=navigator.userAgent,d=navigator.platform,e=c.match(/AppleWebKit\/([0-9]+)/),f=!!e&&e[1],g=c.match(/Fennec\/([0-9]+)/),h=!!g&&g[1],i=c.match(/Opera Mobi\/([0-9]+)/),j=!!i&&i[1];return(d.indexOf("iPhone")>-1||d.indexOf("iPad")>-1||d.indexOf("iPod")>-1)&&f&&f<534||a.operamini&&{}.toString.call(a.operamini)==="[object OperaMini]"||i&&j<7458||c.indexOf("Android")>-1&&f&&f<533||h&&h<6||"palmGetResource"in b&&f&&f<534||c.indexOf("MeeGo")>-1&&c.indexOf("NokiaBrowser/8.5.0")>-1?!0:!1},initSelector:":jqmData(position='fixed')"},_create:function(){var a=this,b=a.options,c=a.element,d=c.is(":jqmData(role='header')")?"header":"footer",e=c.closest(".ui-page");if(b.supportBlacklist()){a.destroy();return}c.addClass("ui-"+d+"-fixed"),b.fullscreen?(c.addClass("ui-"+d+"-fullscreen"),e.addClass("ui-page-"+d+"-fullscreen")):e.addClass("ui-page-"+d+"-fixed"),a._addTransitionClass(),a._bindPageEvents(),a._bindToggleHandlers()},_addTransitionClass:function(){var a=this.options.transition;a&&a!=="none"&&(a==="slide"&&(a=this.element.is(".ui-header")?"slidedown":"slideup"),this.element.addClass(a))},_bindPageEvents:function(){var c=this,d=c.options,e=c.element;e.closest(".ui-page").bind("pagebeforeshow",function(){d.disablePageZoom&&a.mobile.zoom.disable(!0),d.visibleOnPageShow||c.hide(!0)}).bind("webkitAnimationStart animationstart updatelayout",function(){var a=this;d.updatePagePadding&&c.updatePagePadding(a)}).bind("pageshow",function(){var e=this;c.updatePagePadding(e),d.updatePagePadding&&a(b).bind("throttledresize."+c.widgetName,function(){c.updatePagePadding(e)})}).bind("pagebeforehide",function(e,f){d.disablePageZoom&&a.mobile.zoom.enable(!0),d.updatePagePadding&&a(b).unbind("throttledresize."+c.widgetName);if(d.trackPersistentToolbars){var g=a(".ui-footer-fixed:jqmData(id)",this),h=a(".ui-header-fixed:jqmData(id)",this),i=g.length&&f.nextPage&&a(".ui-footer-fixed:jqmData(id='"+g.jqmData("id")+"')",f.nextPage)||a(),j=h.length&&f.nextPage&&a(".ui-header-fixed:jqmData(id='"+h.jqmData("id")+"')",f.nextPage)||a();if(i.length||j.length)i.add(j).appendTo(a.mobile.pageContainer),f.nextPage.one("pageshow",function(){i.add(j).appendTo(this)})}})},_visible:!0,updatePagePadding:function(b){var c=this.element,d=c.is(".ui-header");if(this.options.fullscreen)return;b=b||c.closest(".ui-page"),a(b).css("padding-"+(d?"top":"bottom"),c.outerHeight())},_useTransition:function(c){var d=a(b),e=this.element,f=d.scrollTop(),g=e.height(),h=e.closest(".ui-page").height(),i=a.mobile.getScreenHeight(),j=e.is(":jqmData(role='header')")?"header":"footer";return!c&&(this.options.transition&&this.options.transition!=="none"&&(j==="header"&&!this.options.fullscreen&&f>g||j==="footer"&&!this.options.fullscreen&&f+i<h-g)||this.options.fullscreen)},show:function(a){var b="ui-fixed-hidden",c=this.element;this._useTransition(a)?c.removeClass("out "+b).addClass("in"):c.removeClass(b),this._visible=!0},hide:function(a){var b="ui-fixed-hidden",c=this.element,d="out"+(this.options.transition==="slide"?" reverse":"");this._useTransition(a)?c.addClass(d).removeClass("in").animationComplete(function(){c.addClass(b).removeClass(d)}):c.addClass(b).removeClass(d),this._visible=!1},toggle:function(){this[this._visible?"hide":"show"]()},_bindToggleHandlers:function(){var b=this,c=b.options,d=b.element;d.closest(".ui-page").bind("vclick",function(d){c.tapToggle&&!a(d.target).closest(c.tapToggleBlacklist).length&&b.toggle()}).bind("focusin focusout",function(d){screen.width<500&&a(d.target).is(c.hideDuringFocus)&&!a(d.target).closest(".ui-header-fixed, .ui-footer-fixed").length&&b[d.type==="focusin"&&b._visible?"hide":"show"]()})},destroy:function(){this.element.removeClass("ui-header-fixed ui-footer-fixed ui-header-fullscreen ui-footer-fullscreen in out fade slidedown slideup ui-fixed-hidden"),this.element.closest(".ui-page").removeClass("ui-page-header-fixed ui-page-footer-fixed ui-page-header-fullscreen ui-page-footer-fullscreen")}}),a(c).bind("pagecreate create",function(b){a(b.target).jqmData("fullscreen")&&a(a.mobile.fixedtoolbar.prototype.options.initSelector,b.target).not(":jqmData(fullscreen)").jqmData("fullscreen",!0),a.mobile.fixedtoolbar.prototype.enhanceWithin(b.target)})}(a),function(a,b){function i(a){d=a.originalEvent,h=d.accelerationIncludingGravity,e=Math.abs(h.x),f=Math.abs(h.y),g=Math.abs(h.z),!b.orientation&&(e>7||(g>6&&f<8||g<8&&f>6)&&e>5)?c.enabled&&c.disable():c.enabled||c.enable()}if(!(/iPhone|iPad|iPod/.test(navigator.platform)&&navigator.userAgent.indexOf("AppleWebKit")>-1))return;var c=a.mobile.zoom,d,e,f,g,h;a(b).bind("orientationchange.iosorientationfix",c.enable).bind("devicemotion.iosorientationfix",i)}(a,this),function(a,b,d){function h(){e.removeClass("ui-mobile-rendering")}var e=a("html"),f=a("head"),g=a(b);a(b.document).trigger("mobileinit");if(!a.mobile.gradeA())return;a.mobile.ajaxBlacklist&&(a.mobile.ajaxEnabled=!1),e.addClass("ui-mobile ui-mobile-rendering"),setTimeout(h,5e3),a.extend(a.mobile,{initializePage:function(){var b=a(":jqmData(role='page'), :jqmData(role='dialog')"),d=a.mobile.path.parseLocation().hash.replace("#",""),e=c.getElementById(d);b.length||(b=a("body").wrapInner("<div data-"+a.mobile.ns+"role='page'></div>").children(0)),b.each(function(){var b=a(this);b.jqmData("url")||b.attr("data-"+a.mobile.ns+"url",b.attr("id")||location.pathname+location.search)}),a.mobile.firstPage=b.first(),a.mobile.pageContainer=b.first().parent().addClass("ui-mobile-viewport"),g.trigger("pagecontainercreate"),a.mobile.showPageLoadingMsg(),h(),!a.mobile.hashListeningEnabled||!a.mobile.path.isHashValid(location.hash)||!a(e).is(':jqmData(role="page")')&&!a.mobile.path.isPath(d)&&d!==a.mobile.dialogHashKey?(a.mobile.path.isHashValid(location.hash)&&(a.mobile.urlHistory.initialDst=d.replace("#","")),a.mobile.changePage(a.mobile.firstPage,{transition:"none",reverse:!0,changeHash:!1,fromHashChange:!0})):g.trigger("hashchange",[!0])}}),a.mobile.navreadyDeferred.resolve(),a(function(){b.scrollTo(0,1),a.mobile.defaultHomeScroll=!a.support.scrollTop||a(b).scrollTop()===1?0:1,a.fn.controlgroup&&a(c).bind("pagecreate create",function(b){a(":jqmData(role='controlgroup')",b.target).jqmEnhanceable().controlgroup({excludeInvisible:!1})}),a.mobile.autoInitializePage&&a.mobile.initializePage(),g.load(a.mobile.silentScroll),a.support.cssPointerEvents||a(c).delegate(".ui-disabled","vclick",function(a){a.preventDefault(),a.stopImmediatePropagation()})})}(a,this)});
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/manifest.json b/wearable/tct-behavior-tests/manifest.json
new file mode 100755 (executable)
index 0000000..4996ae2
--- /dev/null
@@ -0,0 +1,15 @@
+{
+    "version": "3.0",
+    "name": "tct-behavior-tests",
+    "permissions": ["tabs", "unlimited_storage", "notifications", "http://*/*", "https://*/*"],
+    "description": "tct-behavior-tests",
+    "file_name": "manifest.json",
+    "app": {
+        "launch": {
+            "local_path": "index.html"
+        }
+    },
+    "icons": {
+        "128": "icon.png"
+    }
+}
diff --git a/wearable/tct-behavior-tests/pack.py b/wearable/tct-behavior-tests/pack.py
new file mode 100755 (executable)
index 0000000..e67cd36
--- /dev/null
@@ -0,0 +1,1104 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2014 Intel Corporation.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# * Redistributions of works must retain the original copyright notice, this
+#   list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the original copyright
+#   notice, this list of conditions and the following disclaimer in the
+#   documentation and/or other materials provided with the distribution.
+# * Neither the name of Intel Corporation nor the names of its contributors
+#   may be used to endorse or promote products derived from this work without
+#   specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# Authors:
+#         Fan, Yugang <yugang.fan@intel.com>
+
+import os
+import shutil
+import glob
+import time
+import sys
+import stat
+import random
+import json
+import logging
+import zipfile
+import signal
+import subprocess
+from optparse import OptionParser
+
+reload(sys)
+sys.setdefaultencoding('utf8')
+
+TOOL_VERSION = "v0.1"
+VERSION_FILE = "VERSION"
+DEFAULT_CMD_TIMEOUT = 600
+PKG_TYPES = ["apk", "xpk", "wgt", "apk-aio", "cordova-aio", "cordova", "embeddingapi"]
+PKG_MODES = ["shared", "embedded"]
+PKG_ARCHS = ["x86", "arm"]
+PKG_BLACK_LIST = []
+PKG_NAME = None
+BUILD_PARAMETERS = None
+BUILD_ROOT = None
+BUILD_ROOT_SRC = None
+BUILD_ROOT_SRC_PKG = None
+BUILD_ROOT_SRC_PKG_APP = None
+BUILD_ROOT_SRC_SUB_APP = None
+BUILD_ROOT_PKG = None
+BUILD_ROOT_PKG_APP = None
+LOG = None
+LOG_LEVEL = logging.DEBUG
+
+
+class ColorFormatter(logging.Formatter):
+
+    def __init__(self, msg):
+        logging.Formatter.__init__(self, msg)
+
+    def format(self, record):
+        red, green, yellow, blue = range(4)
+        colors = {'INFO': green, 'DEBUG': blue,
+                  'WARNING': yellow, 'ERROR': red}
+        msg = record.msg
+        if msg[0] == "+":
+            msg = "\33[01m" + msg[1:] + "\033[0m"
+        elif msg[0] == "=":
+            msg = "\33[07m" + msg + "\033[0m"
+        levelname = record.levelname
+        if levelname in colors:
+            msg_color = "\033[0;%dm" % (
+                31 + colors[levelname]) + msg + "\033[0m"
+            record.msg = msg_color
+
+        return logging.Formatter.format(self, record)
+
+
+def pidExists(pid):
+    if pid < 0:
+        return False
+    try:
+        os.kill(pid, 0)
+    except OSError:
+        return False
+    else:
+        return True
+
+
+def isWindows():
+    return sys.platform == "cygwin" or sys.platform.startswith("win")
+
+
+def killProcesses(ppid=None):
+    if isWindows():
+        subprocess.check_call("TASKKILL /F /PID %s /T" % ppid)
+    else:
+        ppid = str(ppid)
+        pidgrp = []
+
+        def GetChildPids(ppid):
+            command = "ps -ef | awk '{if ($3 ==%s) print $2;}'" % str(ppid)
+            pids = os.popen(command).read()
+            pids = pids.split()
+            return pids
+
+        pidgrp.extend(GetChildPids(ppid))
+        for pid in pidgrp:
+            pidgrp.extend(GetChildPids(pid))
+
+        pidgrp.insert(0, ppid)
+        while len(pidgrp) > 0:
+            pid = pidgrp.pop()
+            try:
+                os.kill(int(pid), signal.SIGKILL)
+                return True
+            except OSError:
+                try:
+                    os.popen("kill -9 %d" % int(pid))
+                    return True
+                except Exception:
+                    return False
+
+
+def safelyGetValue(origin_json=None, key=None):
+    if origin_json and key and key in origin_json:
+        return origin_json[key]
+    return None
+
+
+def checkContains(origin_str=None, key_str=None):
+    if origin_str.upper().find(key_str.upper()) >= 0:
+        return True
+    return False
+
+
+def getRandomStr():
+    str_pool = list("abcdefghijklmnopqrstuvwxyz1234567890")
+    random_str = ""
+    for i in range(15):
+        index = random.randint(0, len(str_pool) - 1)
+        random_str = random_str + str_pool[index]
+
+    return random_str
+
+
+def zipDir(dir_path, zip_file):
+    try:
+        if os.path.exists(zip_file):
+            if not doRemove([zip_file]):
+                return False
+        if not os.path.exists(os.path.dirname(zip_file)):
+            os.makedirs(os.path.dirname(zip_file))
+        z_file = zipfile.ZipFile(zip_file, "w")
+        orig_dir = os.getcwd()
+        os.chdir(dir_path)
+        for root, dirs, files in os.walk("."):
+            for i_file in files:
+                LOG.info("zip %s" % os.path.join(root, i_file))
+                z_file.write(os.path.join(root, i_file))
+        z_file.close()
+        os.chdir(orig_dir)
+    except Exception as e:
+        LOG.error("Fail to pack %s to %s: %s" % (dir_path, zip_file, e))
+        return False
+    LOG.info("Done to zip %s to %s" % (dir_path, zip_file))
+    return True
+
+
+def overwriteCopy(src, dest, symlinks=False, ignore=None):
+    if not os.path.exists(dest):
+        os.makedirs(dest)
+        shutil.copystat(src, dest)
+    sub_list = os.listdir(src)
+    if ignore:
+        excl = ignore(src, sub_list)
+        sub_list = [x for x in sub_list if x not in excl]
+    for i_sub in sub_list:
+        s_path = os.path.join(src, i_sub)
+        d_path = os.path.join(dest, i_sub)
+        if symlinks and os.path.islink(s_path):
+            if os.path.lexists(d_path):
+                os.remove(d_path)
+            os.symlink(os.readlink(s_path), d_path)
+            try:
+                s_path_s = os.lstat(s_path)
+                s_path_mode = stat.S_IMODE(s_path_s.st_mode)
+                os.lchmod(d_path, s_path_mode)
+            except Exception:
+                pass
+        elif os.path.isdir(s_path):
+            overwriteCopy(s_path, d_path, symlinks, ignore)
+        else:
+            shutil.copy2(s_path, d_path)
+
+
+def doCopy(src_item=None, dest_item=None):
+    LOG.info("Copying %s to %s" % (src_item, dest_item))
+    try:
+        if os.path.isdir(src_item):
+            overwriteCopy(src_item, dest_item, symlinks=True)
+        else:
+            if not os.path.exists(os.path.dirname(dest_item)):
+                LOG.info("Create non-existent dir: %s" %
+                         os.path.dirname(dest_item))
+                os.makedirs(os.path.dirname(dest_item))
+            shutil.copy2(src_item, dest_item)
+    except Exception as e:
+        LOG.error("Fail to copy file %s: %s" % (src_item, e))
+        return False
+
+    return True
+
+
+def doRemove(target_file_list=None):
+    for i_file in target_file_list:
+        LOG.info("Removing %s" % i_file)
+        try:
+            if os.path.isdir(i_file):
+                shutil.rmtree(i_file)
+            else:
+                os.remove(i_file)
+        except Exception as e:
+            LOG.error("Fail to remove file %s: %s" % (i_file, e))
+            return False
+    return True
+
+
+def updateCopylistPrefix(src_default, dest_default, src_sub, dest_sub):
+    src_new = ""
+    dest_new = ""
+    PACK_TOOL_TAG = "PACK-TOOL-ROOT"
+
+    if src_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        src_new = src_sub.replace(PACK_TOOL_TAG, BUILD_PARAMETERS.pkgpacktools)
+    else:
+        src_new = os.path.join(src_default, src_sub)
+
+    if dest_sub[0:len(PACK_TOOL_TAG)] == PACK_TOOL_TAG:
+        dest_new = dest_sub.replace(PACK_TOOL_TAG, BUILD_ROOT)
+    else:
+        dest_new = os.path.join(dest_default, dest_sub)
+
+    return (src_new, dest_new)
+
+
+def buildSRC(src=None, dest=None, build_json=None):
+    if not os.path.exists(src):
+        LOG.info("+Src dir does not exist, skip build src process ...")
+        return True
+    if not doCopy(src, dest):
+        return False
+    if "blacklist" in build_json:
+        if build_json["blacklist"].count("") > 0:
+            build_json["blacklist"].remove("")
+        black_file_list = []
+        for i_black in build_json["blacklist"]:
+            black_file_list = black_file_list + \
+                glob.glob(os.path.join(dest, i_black))
+
+        black_file_list = list(set(black_file_list))
+        if not doRemove(black_file_list):
+            return False
+
+    if "copylist" in build_json:
+        for i_s_key in build_json["copylist"].keys():
+            if i_s_key and build_json["copylist"][i_s_key]:
+                (src_updated, dest_updated) = updateCopylistPrefix(
+                    src, dest, i_s_key, build_json["copylist"][i_s_key])
+                if not doCopy(src_updated, dest_updated):
+                    return False
+
+    return True
+
+
+def exitHandler(return_code=1):
+    LOG.info("+Cleaning build root folder ...")
+    if not BUILD_PARAMETERS.bnotclean and os.path.exists(BUILD_ROOT):
+        if not doRemove([BUILD_ROOT]):
+            LOG.error("Fail to clean build root, exit ...")
+            sys.exit(1)
+
+    if return_code == 0:
+        LOG.info("================ DONE ================")
+    else:
+        LOG.error(
+            "================ Found Something Wrong !!! ================")
+    sys.exit(return_code)
+
+
+def prepareBuildRoot():
+    LOG.info("+Preparing build root folder ...")
+    global BUILD_ROOT
+    global BUILD_ROOT_SRC
+    global BUILD_ROOT_SRC_PKG
+    global BUILD_ROOT_SRC_PKG_APP
+    global BUILD_ROOT_SRC_SUB_APP
+    global BUILD_ROOT_PKG
+    global BUILD_ROOT_PKG_APP
+
+    while True:
+        BUILD_ROOT = os.path.join("/tmp", getRandomStr())
+        if os.path.exists(BUILD_ROOT):
+            continue
+        else:
+            break
+
+    BUILD_ROOT_SRC = os.path.join(BUILD_ROOT, PKG_NAME)
+    BUILD_ROOT_SRC_PKG = os.path.join(BUILD_ROOT, "pkg")
+    BUILD_ROOT_SRC_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app")
+    BUILD_ROOT_SRC_SUB_APP = os.path.join(BUILD_ROOT, "sub-app")
+    BUILD_ROOT_PKG = os.path.join(BUILD_ROOT, "pkg", "opt", PKG_NAME)
+    BUILD_ROOT_PKG_APP = os.path.join(BUILD_ROOT, "pkg-app", "opt", PKG_NAME)
+
+    if not doCopy(BUILD_PARAMETERS.srcdir, BUILD_ROOT_SRC):
+        return False
+    if not doRemove(
+            glob.glob(os.path.join(BUILD_ROOT_SRC, "%s*.zip" % PKG_NAME))):
+        return False
+
+    return True
+
+
+def doCMD(cmd, time_out=DEFAULT_CMD_TIMEOUT, no_check_return=False):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    cmd_proc = subprocess.Popen(args=cmd, shell=True)
+    while True:
+        cmd_exit_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_exit_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        else:
+            if not no_check_return and cmd_exit_code != 0:
+                LOG.error("Fail to exe CMD")
+                return False
+            break
+        time.sleep(2)
+    return True
+
+
+def doCMDWithOutput(cmd, time_out=DEFAULT_CMD_TIMEOUT):
+    LOG.info("Doing CMD: [ %s ]" % cmd)
+    pre_time = time.time()
+    output = []
+    cmd_return_code = 1
+    cmd_proc = subprocess.Popen(
+        cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
+
+    while True:
+        output_line = cmd_proc.stdout.readline().strip("\r\n")
+        cmd_return_code = cmd_proc.poll()
+        elapsed_time = time.time() - pre_time
+        if cmd_return_code is None:
+            if elapsed_time >= time_out:
+                killProcesses(ppid=cmd_proc.pid)
+                LOG.error("Timeout to exe CMD")
+                return False
+        elif output_line == '' and cmd_return_code is not None:
+            break
+
+        sys.stdout.write("%s\n" % output_line)
+        sys.stdout.flush()
+        output.append(output_line)
+    if cmd_return_code != 0:
+        LOG.error("Fail to exe CMD")
+
+    return (cmd_return_code, output)
+
+
+def packXPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "make_xpk.py")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "make_xpk.py"),
+                pack_tool):
+            return False
+    orig_dir = os.getcwd()
+    os.chdir(BUILD_ROOT)
+    if os.path.exists("key.file"):
+        if not doRemove(["key.file"]):
+            os.chdir(orig_dir)
+            return False
+
+    key_file = safelyGetValue(build_json, "key-file")
+    if key_file == "key.file":
+        LOG.error(
+            "\"key.file\" is reserved name for default key file, "
+            "pls change the key file name ...")
+        os.chdir(orig_dir)
+        return False
+    if key_file:
+        pack_cmd = "python make_xpk.py %s %s -o %s" % (
+            app_src, key_file, os.path.join(app_dest, "%s.xpk" % app_name))
+    else:
+        pack_cmd = "python make_xpk.py %s key.file -o %s" % (
+            app_src, os.path.join(app_dest, "%s.xpk" % app_name))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packWGT(build_json=None, app_src=None, app_dest=None, app_name=None):
+    if not zipDir(app_src, os.path.join(app_dest, "%s.wgt" % app_name)):
+        return False
+
+    if BUILD_PARAMETERS.signature == True:
+        if safelyGetValue(build_json, "sign-flag") == "true":
+            if not os.path.exists(os.path.join(BUILD_ROOT, "signing")):
+                if not doCopy(
+                        os.path.join(BUILD_PARAMETERS.pkgpacktools, "signing"),
+                        os.path.join(BUILD_ROOT, "signing")):
+                    return False
+            signing_cmd = "%s --dist platform %s" % (
+                os.path.join(BUILD_ROOT, "signing", "sign-widget.sh"),
+                os.path.join(app_dest, "%s.wgt" % app_name))
+            if not doCMD(signing_cmd, DEFAULT_CMD_TIMEOUT):
+                return False
+
+    return True
+
+
+def packAPK(build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    if not os.path.exists(os.path.join(BUILD_ROOT, "crosswalk")):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "crosswalk"),
+                os.path.join(BUILD_ROOT, "crosswalk")):
+            return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doRemove(files):
+            return False
+
+    ext_opt = ""
+    cmd_opt = ""
+    url_opt = ""
+    mode_opt = ""
+    arch_opt = ""
+    icon_opt = ""
+
+    common_opts = safelyGetValue(build_json, "apk-common-opts")
+    if common_opts is None:
+        common_opts = ""
+
+    tmp_opt = safelyGetValue(build_json, "apk-ext-opt")
+    if tmp_opt:
+        ext_opt = "--extensions='%s'" % os.path.join(BUILD_ROOT_SRC, tmp_opt)
+
+    tmp_opt = safelyGetValue(build_json, "apk-cmd-opt")
+    if tmp_opt:
+        cmd_opt = "--xwalk-command-line='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-url-opt")
+    if tmp_opt:
+        url_opt = "--app-url='%s'" % tmp_opt
+
+    tmp_opt = safelyGetValue(build_json, "apk-mode-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_MODES:
+            mode_opt = "--mode=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app mode: %s" % tmp_opt)
+            return False
+    else:
+        mode_opt = "--mode=%s" % BUILD_PARAMETERS.pkgmode
+
+    tmp_opt = safelyGetValue(build_json, "apk-arch-opt")
+    if tmp_opt:
+        if tmp_opt in PKG_ARCHS:
+            arch_opt = "--arch=%s" % tmp_opt
+        else:
+            LOG.error("Got wrong app arch: %s" % tmp_opt)
+            return False
+    else:
+        arch_opt = "--arch=%s" % BUILD_PARAMETERS.pkgarch
+
+    tmp_opt = safelyGetValue(build_json, "apk-icon-opt")
+    if tmp_opt:
+        icon_opt = "--icon=%s" % tmp_opt
+    elif tmp_opt == "":
+        icon_opt = ""
+    else:
+        icon_opt = "--icon=%s/icon.png" % app_src
+
+    if safelyGetValue(build_json, "apk-type") == "MANIFEST":
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s " \
+            "--manifest=%s/manifest.json  %s %s %s %s %s" % (
+                app_name, app_src, mode_opt, arch_opt,
+                ext_opt, cmd_opt, common_opts)
+    elif safelyGetValue(build_json, "apk-type") == "HOSTEDAPP":
+        if not url_opt:
+            LOG.error(
+                "Fail to find the key \"apk-url-opt\" for hosted APP packing")
+            return False
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s %s " \
+                   "%s %s %s %s %s" % (
+                       app_name, app_name, mode_opt, arch_opt, ext_opt,
+                       cmd_opt, url_opt, common_opts)
+    else:
+        pack_cmd = "python make_apk.py --package=org.xwalk.%s --name=%s " \
+                   "--app-root=%s --app-local-path=index.html %s %s " \
+                   "%s %s %s %s" % (
+                       app_name, app_name, app_src, icon_opt, mode_opt,
+                       arch_opt, ext_opt, cmd_opt, common_opts)
+
+    orig_dir = os.getcwd()
+    os.chdir(os.path.join(BUILD_ROOT, "crosswalk"))
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    files = glob.glob(os.path.join(BUILD_ROOT, "crosswalk", "*.apk"))
+    if files:
+        if not doCopy(files[0], os.path.join(app_dest, "%s.apk" % app_name)):
+            os.chdir(orig_dir)
+            return False
+    else:
+        LOG.error("Fail to find the apk file")
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(orig_dir)
+    return True
+
+
+def packCordova(build_json=None, app_src=None, app_dest=None, app_name=None):
+    pack_tool = os.path.join(BUILD_ROOT, "cordova")
+    app_name = app_name.replace("-", "_")
+    if not os.path.exists(pack_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova"),
+                pack_tool):
+            return False
+
+    plugin_tool = os.path.join(BUILD_ROOT, "cordova_plugins")
+    if not os.path.exists(plugin_tool):
+        if not doCopy(
+                os.path.join(BUILD_PARAMETERS.pkgpacktools, "cordova_plugins"),
+                plugin_tool):
+            return False
+
+    orig_dir = os.getcwd()
+    os.chdir(pack_tool)
+    pack_cmd = "bin/create %s org.xwalk.%s %s" % (
+        app_name, app_name, app_name)
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(os.path.join(pack_tool, app_name))
+    plugin_dirs = os.listdir(plugin_tool)
+    for i_dir in plugin_dirs:
+        i_plugin_dir = os.path.join(plugin_tool, i_dir)
+        plugin_install_cmd = "plugman install --platform android --project " \
+                             "./ --plugin %s" % i_plugin_dir
+        if not doCMD(plugin_install_cmd, DEFAULT_CMD_TIMEOUT):
+            os.chdir(orig_dir)
+            return False
+    os.chdir(pack_tool)
+
+    if not doCopy(app_src, os.path.join(pack_tool, app_name, "assets", "www")):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(os.path.join(BUILD_ROOT, "cordova", app_name))
+    pack_cmd = "./cordova/build"
+    if not doCMD(pack_cmd, DEFAULT_CMD_TIMEOUT):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(
+            BUILD_ROOT, "cordova", app_name, "bin", "%s-debug.apk" %
+            app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packEmbeddingAPI(
+        build_json=None, app_src=None, app_dest=None, app_name=None):
+    app_name = app_name.replace("-", "_")
+
+    library_dir_name = safelyGetValue(build_json, "embeddingapi-library-name")
+    if not library_dir_name:
+        LOG.error("Fail to get embeddingapi-library-name ...")
+        return False
+
+    new_library_dir_name = "core_library"
+    pack_tool = os.path.join(app_src, "..", new_library_dir_name)
+
+    if os.path.exists(pack_tool):
+        if not doRemove([pack_tool]):
+            return False
+
+    if not doCopy(
+            os.path.join(BUILD_PARAMETERS.pkgpacktools, library_dir_name),
+            pack_tool):
+        return False
+
+    if os.path.exists(os.path.join(pack_tool, "bin", "res", "crunch")):
+        if not doRemove([os.path.join(pack_tool, "bin", "res", "crunch")]):
+            return False
+
+    orig_dir = os.getcwd()
+    android_project_path = os.path.join(app_src, "android-project")
+    try:
+        os.makedirs(android_project_path)
+    except Exception as e:
+        LOG.error("Fail to create tmp project dir: %s" % e)
+        return False
+
+    (return_code, output) = doCMDWithOutput("android list target")
+    api_level = ""
+    for line in output:
+        if "API level" in line:
+            api_level = line.split(":")[1].strip()
+            break
+    if not api_level:
+        LOG.error("Fail to get Android API Level")
+        os.chdir(orig_dir)
+        return False
+
+    android_project_cmd = "android create project --name %s --target " \
+                          "android-%s --path %s --package com.%s " \
+                          "--activity MainActivity" % (
+                              app_name, api_level, android_project_path, app_name)
+    if not doCMD(android_project_cmd):
+        os.chdir(orig_dir)
+        return False
+
+    try:
+        update_file = open(
+            os.path.join(android_project_path, "project.properties"), "a+")
+        update_file.writelines(
+            "{0}\n".format(
+                "android.library.reference.1=../%s" %
+                new_library_dir_name))
+        update_file.close()
+    except Exception as e:
+        LOG.error(
+            "Fail to update %s: %s" %
+            (os.path.join(
+                android_project_path,
+                "project.properties"),
+                e))
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(os.path.join(android_project_path, "build.xml"),
+                  os.path.join(app_src, "build.xml")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "project.properties"),
+            os.path.join(app_src, "project.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(app_src, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(android_project_path, "local.properties"),
+            os.path.join(pack_tool, "local.properties")):
+        os.chdir(orig_dir)
+        return False
+
+    os.chdir(app_src)
+    if not doCMD("ant debug"):
+        os.chdir(orig_dir)
+        return False
+
+    if not doCopy(
+            os.path.join(app_src, "bin", "%s-debug.apk" % app_name),
+            os.path.join(app_dest, "%s.apk" % app_name)):
+        os.chdir(orig_dir)
+        return False
+    os.chdir(orig_dir)
+    return True
+
+
+def packAPP(build_json=None, app_src=None, app_dest=None, app_name=None):
+    LOG.info("Packing %s(%s)" % (app_name, app_src))
+    if not os.path.exists(app_dest):
+        try:
+            os.makedirs(app_dest)
+        except Exception as e:
+            LOG.error("Fail to init package install dest dir: %s" % e)
+            return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not packXPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not packWGT(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "APK"):
+        if not packAPK(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "CORDOVA"):
+        if not packCordova(build_json, app_src, app_dest, app_name):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "EMBEDDINGAPI"):
+        if not packEmbeddingAPI(build_json, app_src, app_dest, app_name):
+            return False
+    else:
+        LOG.error("Got wrong pkg type: %s" % BUILD_PARAMETERS.pkgtype)
+        return False
+
+    LOG.info("Success to pack APP: %s" % app_name)
+    return True
+
+
+def createIndexFile(index_file_path=None, hosted_app=None):
+    try:
+        if hosted_app:
+            index_url = "http://127.0.0.1/opt/%s/webrunner/index.html?" \
+                "testsuite=../tests.xml&testprefix=../../.." % PKG_NAME
+        else:
+            index_url = "opt/%s/webrunner/index.html?testsuite=../tests.xml" \
+                        "&testprefix=../../.." % PKG_NAME
+        html_content = "<!doctype html><head><meta http-equiv='Refresh' " \
+                       "content='1; url=%s'></head>" % index_url
+        index_file = open(index_file_path, "w")
+        index_file.write(html_content)
+        index_file.close()
+    except Exception as e:
+        LOG.error("Fail to create index.html for top-app: %s" % e)
+        return False
+    LOG.info("Success to create index file %s" % index_file_path)
+    return True
+
+
+def buildSubAPP(app_dir=None, build_json=None, app_dest_default=None):
+    app_dir_inside = safelyGetValue(build_json, "app-dir")
+    if app_dir_inside:
+        app_dir = app_dir_inside
+    LOG.info("+Building sub APP(s) from %s ..." % app_dir)
+    app_dir = os.path.join(BUILD_ROOT_SRC, app_dir)
+    app_name = safelyGetValue(build_json, "app-name")
+    if not app_name:
+        app_name = os.path.basename(app_dir)
+
+    app_src = os.path.join(BUILD_ROOT_SRC_SUB_APP, app_name)
+    if buildSRC(app_dir, app_src, build_json):
+        app_dest = safelyGetValue(build_json, "install-path")
+        if app_dest:
+            app_dest = os.path.join(app_dest_default, app_dest)
+        else:
+            app_dest = app_dest_default
+
+        if safelyGetValue(build_json, "all-apps") == "true":
+            app_dirs = os.listdir(app_src)
+            apps_num = 0
+            for i_app_dir in app_dirs:
+                if os.path.isdir(os.path.join(app_src, i_app_dir)):
+                    i_app_name = os.path.basename(i_app_dir)
+                    if not packAPP(
+                            build_json, os.path.join(app_src, i_app_name),
+                            app_dest, i_app_name):
+                        return False
+                    else:
+                        apps_num = apps_num + 1
+            if apps_num > 0:
+                LOG.info("Totally packed %d apps in %s" % (apps_num, app_dir))
+                return True
+        else:
+            return packAPP(build_json, app_src, app_dest, app_name)
+    return False
+
+
+def buildPKGAPP(build_json=None):
+    LOG.info("+Building package APP ...")
+    if not doCopy(os.path.join(BUILD_ROOT_SRC, "icon.png"),
+                  os.path.join(BUILD_ROOT_SRC_PKG_APP, "icon.png")):
+        return False
+
+    if checkContains(BUILD_PARAMETERS.pkgtype, "XPK"):
+        if not doCopy(
+                os.path.join(BUILD_ROOT_SRC, "manifest.json"),
+                os.path.join(BUILD_ROOT_SRC_PKG_APP, "manifest.json")):
+            return False
+    elif checkContains(BUILD_PARAMETERS.pkgtype, "WGT"):
+        if not doCopy(os.path.join(BUILD_ROOT_SRC, "config.xml"),
+                      os.path.join(BUILD_ROOT_SRC_PKG_APP, "config.xml")):
+            return False
+
+    hosted_app = False
+    if safelyGetValue(build_json, "hosted-app") == "true":
+        hosted_app = True
+    if not createIndexFile(
+            os.path.join(BUILD_ROOT_SRC_PKG_APP, "index.html"), hosted_app):
+        return False
+
+    if not hosted_app:
+        if "blacklist" not in build_json:
+            build_json.update({"blacklist": []})
+        build_json["blacklist"].extend(PKG_BLACK_LIST)
+        if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG_APP, build_json):
+            return False
+
+        if "subapp-list" in build_json:
+            for i_sub_app in build_json["subapp-list"].keys():
+                if not buildSubAPP(
+                        i_sub_app, build_json["subapp-list"][i_sub_app],
+                        BUILD_ROOT_PKG_APP):
+                    return False
+
+    if not packAPP(
+            build_json, BUILD_ROOT_SRC_PKG_APP, BUILD_ROOT_PKG, PKG_NAME):
+        return False
+
+    return True
+
+
+def buildPKG(build_json=None):
+    if "blacklist" not in build_json:
+        build_json.update({"blacklist": []})
+    build_json["blacklist"].extend(PKG_BLACK_LIST)
+    if not buildSRC(BUILD_ROOT_SRC, BUILD_ROOT_PKG, build_json):
+        return False
+
+    if "subapp-list" in build_json:
+        for i_sub_app in build_json["subapp-list"].keys():
+            if not buildSubAPP(
+                    i_sub_app, build_json["subapp-list"][i_sub_app],
+                    BUILD_ROOT_PKG):
+                return False
+
+    if "pkg-app" in build_json:
+        if not buildPKGAPP(build_json["pkg-app"]):
+            return False
+
+    return True
+
+
+def main():
+    global LOG
+    LOG = logging.getLogger("pack-tool")
+    LOG.setLevel(LOG_LEVEL)
+    stream_handler = logging.StreamHandler()
+    stream_handler.setLevel(LOG_LEVEL)
+    stream_formatter = ColorFormatter("[%(asctime)s] %(message)s")
+    stream_handler.setFormatter(stream_formatter)
+    LOG.addHandler(stream_handler)
+
+    try:
+        usage = "Usage: ./pack.py -t apk -m shared -a x86"
+        opts_parser = OptionParser(usage=usage)
+        opts_parser.add_option(
+            "-c",
+            "--cfg",
+            dest="pkgcfg",
+            help="specify the path of config json file")
+        opts_parser.add_option(
+            "-t",
+            "--type",
+            dest="pkgtype",
+            help="specify the pkg type, e.g. apk, xpk, wgt ...")
+        opts_parser.add_option(
+            "-m",
+            "--mode",
+            dest="pkgmode",
+            help="specify the apk mode, e.g. shared, embedded")
+        opts_parser.add_option(
+            "-a",
+            "--arch",
+            dest="pkgarch",
+            help="specify the apk arch, e.g. x86, arm")
+        opts_parser.add_option(
+            "-d",
+            "--dest",
+            dest="destdir",
+            help="specify the installation folder for packed package")
+        opts_parser.add_option(
+            "-s",
+            "--src",
+            dest="srcdir",
+            help="specify the path of pkg resource for packing")
+        opts_parser.add_option(
+            "--tools",
+            dest="pkgpacktools",
+            help="specify the parent folder of pack tools")
+        opts_parser.add_option(
+            "--notclean",
+            dest="bnotclean",
+            action="store_true",
+            help="disable the build root clean after the packing")
+        opts_parser.add_option(
+            "--sign",
+            dest="signature",
+            action="store_true",
+            help="signature operation will be done when packing wgt")
+        opts_parser.add_option(
+            "-v",
+            "--version",
+            dest="bversion",
+            action="store_true",
+            help="show this tool's version")
+        opts_parser.add_option(
+            "--pkg-version",
+            dest="pkgversion",
+            help="specify the pkg version, e.g. 0.0.0.1")
+
+        if len(sys.argv) == 1:
+            sys.argv.append("-h")
+
+        global BUILD_PARAMETERS
+        (BUILD_PARAMETERS, args) = opts_parser.parse_args()
+    except Exception as e:
+        LOG.error("Got wrong options: %s, exit ..." % e)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.bversion:
+        print "Version: %s" % TOOL_VERSION
+        sys.exit(0)
+
+    if not BUILD_PARAMETERS.srcdir:
+        BUILD_PARAMETERS.srcdir = os.getcwd()
+    BUILD_PARAMETERS.srcdir = os.path.expanduser(BUILD_PARAMETERS.srcdir)
+
+    if not os.path.exists(
+            os.path.join(BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)):
+        if not os.path.exists(
+                os.path.join(BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)):
+            if not os.path.exists(
+                    os.path.join(BUILD_PARAMETERS.srcdir, VERSION_FILE)):
+                LOG.info(
+                    "Not found pkg version file, try to use option --pkg-version")
+                pkg_version_file_path = None
+            else:
+                pkg_version_file_path = os.path.join(
+                    BUILD_PARAMETERS.srcdir, VERSION_FILE)
+        else:
+            pkg_version_file_path = os.path.join(
+                BUILD_PARAMETERS.srcdir, "..", VERSION_FILE)
+    else:
+        pkg_version_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", VERSION_FILE)
+
+    try:
+        pkg_main_version = 0
+        pkg_release_version = 0
+        if BUILD_PARAMETERS.pkgversion:
+            LOG.info("Using %s as pkg version " % BUILD_PARAMETERS.pkgversion)
+            pkg_main_version = BUILD_PARAMETERS.pkgversion
+        else:
+            if pkg_version_file_path is not None:
+                LOG.info("Using pkg version file: %s" % pkg_version_file_path)
+                with open(pkg_version_file_path, "rt") as pkg_version_file:
+                    pkg_version_raw = pkg_version_file.read()
+                    pkg_version_file.close()
+                    pkg_version_json = json.loads(pkg_version_raw)
+                    pkg_main_version = pkg_version_json["main-version"]
+                    pkg_release_version = pkg_version_json["release-version"]
+    except Exception as e:
+        LOG.error("Fail to read pkg version file: %s, exit ..." % e)
+        sys.exit(1)
+
+    if not BUILD_PARAMETERS.pkgtype:
+        LOG.error("No pkg type provided, exit ...")
+        sys.exit(1)
+    elif not BUILD_PARAMETERS.pkgtype in PKG_TYPES:
+        LOG.error("Wrong pkg type, only support: %s, exit ..." %
+                  PKG_TYPES)
+        sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk" or \
+       BUILD_PARAMETERS.pkgtype == "apk-aio":
+        if not BUILD_PARAMETERS.pkgmode:
+            LOG.error("No pkg mode option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgmode in PKG_MODES:
+            LOG.error(
+                "Wrong pkg mode option provided, only support:%s, exit ..." %
+                PKG_MODES)
+            sys.exit(1)
+
+        if not BUILD_PARAMETERS.pkgarch:
+            LOG.error("No pkg arch option provided, exit ...")
+            sys.exit(1)
+        elif not BUILD_PARAMETERS.pkgarch in PKG_ARCHS:
+            LOG.error(
+                "Wrong pkg arch option provided, only support:%s, exit ..." %
+                PKG_ARCHS)
+            sys.exit(1)
+
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        if not BUILD_PARAMETERS.destdir or not os.path.exists(
+                BUILD_PARAMETERS.destdir):
+            LOG.error("No all-in-one installation dest dir found, exit ...")
+            sys.exit(1)
+
+    elif not BUILD_PARAMETERS.destdir:
+        BUILD_PARAMETERS.destdir = BUILD_PARAMETERS.srcdir
+    BUILD_PARAMETERS.destdir = os.path.expanduser(BUILD_PARAMETERS.destdir)
+
+    if not BUILD_PARAMETERS.pkgpacktools:
+        BUILD_PARAMETERS.pkgpacktools = os.path.join(
+            BUILD_PARAMETERS.srcdir, "..", "..", "tools")
+    BUILD_PARAMETERS.pkgpacktools = os.path.expanduser(
+        BUILD_PARAMETERS.pkgpacktools)
+
+    config_json = None
+    if BUILD_PARAMETERS.pkgcfg:
+        config_json_file_path = BUILD_PARAMETERS.pkgcfg
+    else:
+        config_json_file_path = os.path.join(
+            BUILD_PARAMETERS.srcdir, "suite.json")
+    try:
+        LOG.info("Using config json file: %s" % config_json_file_path)
+        with open(config_json_file_path, "rt") as config_json_file:
+            config_raw = config_json_file.read()
+            config_json_file.close()
+            config_json = json.loads(config_raw)
+    except Exception as e:
+        LOG.error("Fail to read config json file: %s, exit ..." % e)
+        sys.exit(1)
+
+    global PKG_NAME
+    PKG_NAME = safelyGetValue(config_json, "pkg-name")
+    if not PKG_NAME:
+        PKG_NAME = os.path.basename(BUILD_PARAMETERS.srcdir)
+        LOG.warning(
+            "Fail to read pkg name from json, "
+            "using src dir name as pkg name ...")
+
+    LOG.info("================= %s (%s-%s) ================" %
+             (PKG_NAME, pkg_main_version, pkg_release_version))
+
+    if not safelyGetValue(config_json, "pkg-list"):
+        LOG.error("Fail to read pkg-list, exit ...")
+        sys.exit(1)
+
+    pkg_json = None
+    for i_pkg in config_json["pkg-list"].keys():
+        i_pkg_list = i_pkg.replace(" ", "").split(",")
+        if BUILD_PARAMETERS.pkgtype in i_pkg_list:
+            pkg_json = config_json["pkg-list"][i_pkg]
+
+    if not pkg_json:
+        LOG.error("Fail to read pkg json, exit ...")
+        sys.exit(1)
+
+    if not prepareBuildRoot():
+        exitHandler(1)
+
+    if "pkg-blacklist" in config_json:
+        PKG_BLACK_LIST.extend(config_json["pkg-blacklist"])
+
+    if not buildPKG(pkg_json):
+        exitHandler(1)
+
+    LOG.info("+Building package ...")
+    if BUILD_PARAMETERS.pkgtype == "apk-aio" or \
+       BUILD_PARAMETERS.pkgtype == "cordova-aio":
+        pkg_file_list = os.listdir(os.path.join(BUILD_ROOT, "pkg"))
+        for i_file in pkg_file_list:
+            if not doCopy(
+                    os.path.join(BUILD_ROOT, "pkg", i_file),
+                    os.path.join(BUILD_PARAMETERS.destdir, i_file)):
+                exitHandler(1)
+    else:
+        pkg_file = os.path.join(
+            BUILD_PARAMETERS.destdir,
+            "%s-%s.%s.zip" %
+            (PKG_NAME,
+             pkg_main_version,
+             pkg_release_version))
+             
+
+        if not zipDir(os.path.join(BUILD_ROOT, "pkg"), pkg_file):
+            exitHandler(1)
+
+if __name__ == "__main__":
+    main()
+    exitHandler(0)
diff --git a/wearable/tct-behavior-tests/packaging/behavior.changes b/wearable/tct-behavior-tests/packaging/behavior.changes
new file mode 100755 (executable)
index 0000000..5f161ab
--- /dev/null
@@ -0,0 +1,471 @@
+* Wed Sep 18 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130913.023311@993b24f
+- Update version numbers for ww39.0 release
+- Fix TTS-2007 by handling unable to re-install widget issues in behavior
+- Fix TTS-2015 by improvement function and description in behavior
+- Fix TTS-2009 by enable the Pass button
+- Update packaging/behavior.changes
+
+* Fri Sep 13 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@d1074ff
+- Update version numbers for ww37.5 release
+- Merge "Fix TTS-1998 by update DBV to latest on RC8" into tizen_2.2
+- Fix TTS-1854 by adding code to save the children TCs result
+- Fix TTS-2006 by lack slash character in PackageManagement
+- Fix TTS-1998 by update DBV to latest on RC8
+- Merge "Fix TTS-1964 to improve unreadable descripition" into tizen_2.2
+- Update packaging/behavior.changes
+- Fix TTS-1964 to improve unreadable descripition
+
+* Fri Sep 06 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130829.085656@8c4196f
+- Update version numbers for ww36.5 release
+- Merge "Fix TTS-1960 by add component name of UserAgentString in tests.xml" into tizen_2.2
+- Merge "Fix TDIS-6958 by modify directories as file URI path" into tizen_2.2
+- Fix TTS-1960 by add component name of UserAgentString in tests.xml
+- Fix TTS-1959 by removing unsupport feature test in webkit
+- Fix TDIS-6958 by modify directories as file URI path
+- Fix TTS-1951 by optimize case styles in behavior
+- update packaging/behavior.changes
+
+* Thu Aug 29 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130823.034631@2b6acf1
+- Updated version numbers for ww35.5 release
+- Fixed TTS-1943 by adding user agent string test to behavior
+- Fixed TTS-1927 by checking the install location by manual in setting-install-location-prefer-external-with-card
+- Fixed bug TTS-1931 for Page Visibility status check
+- Updated COPYING files
+
+* Thu Aug 22 2013 jiehua.xiong <jiehuax.xiong@intel.com> submit/tizen_2.2/20130815.093033@bef70bc
+- Updated version numbers for ww34.5 release
+- Simplify tests.xml
+- Merge "Fixed TTS-1910 by updating system directory path in Security" into tizen_2.2
+- Merge "Behavior TC NFC Receive message added" into tizen_2.2
+- Fixed TTS-1910 by updating system directory path in Security
+- Fixed TTS-1909 by updating incorrect path
+- Merge "Fixed TTS-1880 by splitting upstream resource to single file due to license issue" into tizen_2.2
+- Merge "Update all icon for sub widgets in behavior tool" into tizen_2.2
+- Fixed TTS-1880 by splitting upstream resource to single file due to license issue
+- Merge "Fixed TTS-1898 by updating the media and image resources with license" into tizen_2.2
+- Fixed TTS-1898 by updating the media and image resources with license
+- Update all icon for sub widgets in behavior tool
+- Behavior TC NFC Receive message added
+- Behavior TC Push clientApp modify
+- Behavior TC Application icon image changed
+- update packaging/behavior.changes
+
+* Thu Aug 15 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130808.063316@ed40b71
+- Updated version numbers for ww33.5 release
+- Added 2 npruntime cases to behavior tool
+- Merge "Code review: Updated report-uri-single-violated in behavior tool" into tizen_2.2
+- Merge "Updated icon and config.xml for sub widget in behavior tool" into tizen_2.2
+- Merge "update usage test in behavior" into tizen_2.2
+- Merge "Behavior TC Notification update api modify" into tizen_2.2
+- update usage test in behavior
+- Behavior TC Notification update api modify
+- Code review: Updated report-uri-single-violated in behavior tool
+- Fixed bug TTS-1854 to add confirm infos.
+- Merge "Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt" into tizen_2.2
+- Merge "Fixed bug TTS-1831 to update the case descriptions." into tizen_2.2
+- add 2 usage tcs of canvas and CSS
+- Fixed TTS-1880 to clear the resource origin and license, unify icons for wgt
+- Updated icon and config.xml for sub widget in behavior tool
+- Fixed bug TTS-1831 to update the case descriptions.
+- Update icons due to license issue.
+- Merge "Fixed bug TTS-1851 update config.xml." into tizen_2.2
+- Merge "improve accelerometer in behavior" into tizen_2.2
+- Updated the files in css/images/
+- improve accelerometer in behavior
+- Fixed bug TTS-1851 update config.xml.
+
+* Thu Aug 08 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130801.152701@1c522e3
+- Updated version numbers for ww32.5 release
+- Merge "Updated main index.html to add blank in title menu for behavior tools" into tizen_2.2
+- Merge "Updated the description for CSP moudle in behavior tools" into tizen_2.2
+- Merge "Fixed bug TTS-1850 to add the case resourse." into tizen_2.2
+- Merge "Behavior TC Application whitespace remove" into tizen_2.2
+- Updated the description for CSP moudle in behavior tools
+- Updated main index.html to add blank in title menu for behavior tools
+- Fixed bug TTS-1850 to add the case resourse.
+- Merge "Fixed bug TTS-1848 to update the case description." into tizen_2.2
+- Merge "Add PackageManagement cases to the behavior tool." into tizen_2.2
+- Merge "Add ConfigurationExtension cases to the behavior tool." into tizen_2.2
+- Merge "Add WRTSupport cases to the behavior tool." into tizen_2.2
+- Fixed bug TTS-1848 to update the case description.
+- Merge "Add Stability module to the behavior tool." into tizen_2.2
+- Behavior TC Application whitespace remove
+- Add Stability module to the behavior tool.
+- Add WRTSupport cases to the behavior tool.
+- Add ConfigurationExtension cases to the behavior tool.
+- Add PackageManagement cases to the behavior tool.
+- Add DynamicBox cases to the behavior tool.
+- Merge "Add license file for external media files and behavior tests." into tizen_2.2
+- Merge "Fix listview style issue in some tests and bypass the tizen object in normal browser." into tizen_2.2
+- Add license file for external media files and behavior tests.
+- Fix bug TTS-1832 TC displayed style does not match expected result
+- Fix listview style issue in some tests and bypass the tizen object in normal browser.
+- Behavior TC Notification Image(thumbnail) changed
+
+* Thu Aug 01 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.082203@b07dd79
+- Merge "Add PackageManagement module to behavior tool" into tizen_2.2
+- Add PackageManagement module to behavior tool
+- Merge "Add capability info to result xml file." into tizen_2.2
+- Merge "Add ConfigurationExtension module to behavior tool" into tizen_2.2
+- Merge "Added cases to DynamicBox moudle in behavior tool" into tizen_2.2
+- Add ConfigurationExtension module to behavior tool
+- Add WRTSupport module to behavior tool
+- Merge "Add WRTUI module to behavior tool" into tizen_2.2
+- Merge "Updated CSP module in behavior tool" into tizen_2.2
+- Merge "Updated the tct-behavior-tests.spec file to reduce the size of package" into tizen_2.2
+- Add WRTUI module to behavior tool
+- Added cases to DynamicBox moudle in behavior tool
+- Updated CSP module in behavior tool
+- Updated the tct-behavior-tests.spec file to reduce the size of package
+- Add corssplatform support in HybridApplication
+- Add capability info to result xml file.
+
+* Thu Jul 25 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130725.063839@55105a9
+- Update app icon and tests icons to fix license issue.
+- Merge "Updated behavior.spec" into tizen_2.2
+- Updated behavior.spec
+
+* Thu Jul 25 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130718.115214@0ced6ef
+- Updated version numbers for ww30.5 release
+- Added CSP moudle to behavior tools
+- update Developer Guide to v0.6
+- Behavior TC Package Button disabled modify
+- Disable unsupported test access and add unsupported label.
+- Behavior TC Bluetooth Update(Tizen_2.2) Change-Id: Ic9552491da016b9795b4f4d23c4efac64ecdfaa9
+- Behavior TC SystemInfo Update(Tizen_2.2)
+- Behavior TC Download progressbar modify
+
+* Thu Jul 18 2013 cici.x.li <cici.x.li@intel.com> submit/tizen_2.2/20130711.082532@41217f3
+- Updated version numbers for ww29.5 release
+- Merge "Behavior TC Bluetooth TTS-1711 update" into tizen_2.2
+- Merge "Migrate touchcancel event in Touch" into tizen_2.2
+- Merge "Fixed TTS-1362 by adding voice preview in Microphone" into tizen_2.2
+- Migrate touchcancel event in Touch
+- Fixed TTS-1362 by adding voice preview in Microphone
+- Merge changes Icdf3d5af,I29303eb5 into tizen_2.2
+- Behavior TC Bluetooth TTS-1711 update
+- Behavior TC Power info update
+- Behavior TC Notification Image(Tizen Logo) changed
+
+* Thu Jul 11 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130704.080051@38487b9
+- Updated version numbers for ww28.5 release
+- Update tests purpose to short version.
+- Added DynamicBox module into behavior tools
+- Behavior TC Bluetooth alert modified
+- Behavior TC Power info modified
+- Hide test ID in home page and using purpose for test name.
+
+* Thu Jul 04 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130627.082103@b239235
+- Updated version numbers for ww27.5 release
+- Merge "Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9" into tizen_2.2
+- Merge "Behavior TC Package Double Install block" into tizen_2.2
+- Merge "Behavior TC Bluetooth Disconnect Alert Add" into tizen_2.2
+- Behavior TC Button Disabled Add Change-Id: Ibc9022fcd47b667f743e1b757a2a4d2e95e942f9
+- Merge "Behavior TC NFC WriteTag Modify" into tizen_2.2
+- Behavior TC Package Double Install block
+- Behavior TC Bluetooth Disconnect Alert Add
+- Behavior TC NFC WriteTag Modify
+- Merge "Behavior TC SystemSettingNotificationEmail index.html footer modify" into tizen_2.2
+- Merge "Behavior TC Notification led attribute add" into tizen_2.2
+- Behavior TC SystemSettingNotificationEmail index.html footer modify
+- Behavior TC Notification led attribute add
+- Modify the AppControlExtending appearance.
+- Update guide doc for open source release.
+- Merge "Fixed wgt cannot installed issue" into tizen_2.2
+- Update dev guide for capability support.
+- Fixed wgt cannot installed issue
+- Merge "Integrate 17 TCs into CSSStyle" into tizen_2.2
+- Merge "Removed the description of performance checking in Expect Results of Media and Animation TCs" into tizen_2.2
+- Merge "add move event to Touch in behavior" into tizen_2.2
+- Merge "Add history back test to Viewport in behavior" into tizen_2.2
+- Integrate 17 TCs into CSSStyle
+- Removed the description of performance checking in Expect Results of Media and Animation TCs
+- Behavior TC Download File delete issue
+- add move event to Touch in behavior
+- Add history back test to Viewport in behavior
+
+* Thu Jun 27 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.2/20130621.054814@2795437
+- Updated version numbers for ww26.5 release
+- Behavior TC Bluetooth Message(Encode/Decode) add
+- Behavior TC PushClient Modify
+- Behavior TC SystemSettingScreen Image size modify
+- Behavior TC Application Filename display modify
+- Behavior TC Package errorCB add
+- Merge "Behavior TC Package comment remove" into tizen_2.2
+- Behavior TC Package comment remove
+- Behavior TC Installation message when installing wgt
+- Behavior TC Package disable button when the button ineffective Change-Id: I77f5a96c2cf1c8adccd7ca50152d8396c5ca7be3
+- Behavior TC 'info' update Change-Id: Ia0c09d0d7b82544b73779163641f758a427b843b
+- Update button icons and list font/size.
+- Behavior TC Pass/Fail button remove(disable/enable)
+- Behavior TC Bluetooth scenario changed
+- Update dev guide for tests.xml verification and coding style.
+- Merge "Update the description of PageVisibility" into tizen_2.2
+- Merge "Modify Security function" into tizen_2.2
+- Merge "Update the splitters of buttons" into tizen_2.2
+- Merge "Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126" into tizen_2.2
+- Merge "Fixed the footer botton position issue in 2D3DAnimation" into tizen_2.2
+- Merge "Modifying Vibration style in behavior" into tizen_2.2
+- Merge "Modify LocationNetwork style in behavior" into tizen_2.2
+- Merge "modify style of CSSStyle behavior" into tizen_2.2
+- Update the description of PageVisibility
+- Modify Security function
+- Update the splitters of buttons
+- Behavior TC NFC scenario changed Change-Id: I477771ec6f0b405e0f2e7c64f30223a33face126
+- Fixed the footer botton position issue in 2D3DAnimation
+- Modifying Vibration style in behavior
+- Modify LocationNetwork style in behavior
+- modify style of CSSStyle behavior
+- Disable the multi tests in behavior list view.
+- Behavior TC Naming Changed(special letters)
+- Updated tests.xml to create Web Runtime set and format PageVisibility style
+- Behavior TC Power Screen_Bright API removed
+- Merge "Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b" into tizen_2.2
+- Merge "Remove Test Note in tests.xml" into tizen_2.2
+- Behavior TC filesystem rw -> r Change-Id: Ie4c9b4cfb4fc84c0b2f2a2291bd5459527977c5b
+- Remove Test Note in tests.xml
+- Fixed scale issue of Viewport
+- Merge "modify Accelerometer module style" into tizen_2.2
+- Merge "Fixed Camera by modifying style css in behavior" into tizen_2.2
+- Merge "Improve LocationGPS by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve LocationNetwork by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Microphone by adding observation eare in behavior" into tizen_2.2
+- Merge "Improve Vibration by modifying button style in behavior" into tizen_2.2
+- Merge "Update CSSAnimation,SVGTransformation,Viewport style" into tizen_2.2
+- modify Accelerometer module style
+- Fixed Camera by modifying style css in behavior
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Improve LocationGPS by adding observation eare in behavior
+- Improve LocationNetwork by adding observation eare in behavior
+- Improve Microphone by adding observation eare in behavior
+- Improve Vibration by modifying button style in behavior
+- Update CSSAnimation,SVGTransformation,Viewport style
+- modify mediaPlayback and CSSStyle style
+- Merge "Adjust CSS in FileReader" into tizen_2.2
+- Merge "Adjust CSS in 2D3DAnimation" into tizen_2.2
+- Merge "Add touch info in Touch" into tizen_2.2
+- Merge "Improve case style in FullScreen" into tizen_2.2
+- Merge "Added ApplicationInvisible moudle to TCT behavior tools" into tizen_2.2
+- Merge "Improve case style in DragandDrop" into tizen_2.2
+- Merge "Improve case style in Clipboard" into tizen_2.2
+- Merge "Improve Camera by adding observation eare in behavior" into tizen_2.2
+- Adjust CSS in FileReader
+- Adjust CSS in 2D3DAnimation
+- Add touch info in Touch
+- Improve case style in FullScreen
+- Added ApplicationInvisible moudle to TCT behavior tools
+- Improve case style in DragandDrop
+- Improve case style in Clipboard
+- Improve Camera by adding observation eare in behavior
+
+* Fri Jun 21 2013 cici.li <cici.x.li@intel.com> submit/tizen_2.1/20130527.073412@3af9e30
+- Merge "Improve CameraViaUserMedia by adding observation eare in behavior" into tizen_2.2
+- Add hash-signer in spec
+- Improve CameraViaUserMedia by adding observation eare in behavior
+- Merge "Add timestamp for exported file" into tizen_2.2
+- Merge "Improve case style in HybridApplication" into tizen_2.2
+- Merge "Added test points for css animation in behavior" into tizen_2.2
+- Add timestamp for exported file
+- Improve case style in HybridApplication
+- Add disable and enable Pass Button in be havior about Camera Touch UserMedia Vibration
+- Added test points for css animation in behavior
+- Improve description in Behavior
+- Handle disable and enable Pass Button in behavior
+- Merge "Improve LocationGPS by adding speed in behavior" into tizen_2.2
+- Improve LocationGPS by adding speed in behavior
+- Integrate backgrounds TCs to CSSStyle
+- Handle disable and enable Pass Button in behavior
+- Update version for ww25.4 release.
+- Add two theme for pass/fail result highlight.
+- Not popup test information window by default, and comments out re-enter code
+- Fixed TTS-1554 on behavior by repaired the spelling mistake
+- Update tests xml scheme.
+- Handle disable and enable "Pass" Button in behavior
+- Add Enable/DisablePassButton method in HybridApplication
+- Merge "Add privilege of location and mediacapture in behavior" into tizen_2.1
+- Merge "Added AppControlExtending moudle to TCT behavior tools" into tizen_2.1
+- Add privilege of location and mediacapture in behavior
+- BehaviorTC SystemSetting rintones rw -> r
+- Added AppControlExtending moudle to TCT behavior tools
+- BehaviorTC Launch API success log, PassButton(Disable/Enable) Change-Id: Icfd48ee1e92417d2cb461d9feb156bafbac697d0
+- Behavior TC Messaging(SMS/MMS) scenario modify Change-Id: I03944a73cd08f49048bcd0bf0a34caa254e85aa3
+- Behavior TC SystemInfo Scenario Modify
+- Update saving result popup info.
+- Update version for tct web ww24.5 release.
+- Fix multiple capability issue
+- Behavior TC TTS-1509
+- update sample application
+- Fix capability missing when merge happen
+- Improve test description in 2d3danimation and filereader
+- Update popup info and delete unuseful console log.
+- Merge "Make tmpfile always there as a import option, plus some small cleanup" into tizen_2.1
+- Make tmpfile always there as a import option, plus some small cleanup
+- Repaired viewport style on behavior
+- Cleanup tmp file logic
+- Clean some unuseful vars and space consistent.
+- add logic to read tests.xml then murge tmp result if any
+- Merge "set the capability case result as fail in the _resetresult" into tizen_2.1
+- set the capability case result as fail in the _resetresult
+- Merge "Improve HybridApplication style" into tizen_2.1
+- Merge "Reduce svg height in SVGTransform" into tizen_2.1
+- Merge "Repaired clipboard style on behavior" into tizen_2.1
+- Merge "Repaired dragdrop style on behavior" into tizen_2.1
+- Merge "modify CSSStyle TCs" into tizen_2.1
+- Improve HybridApplication style
+- Reduce svg height in SVGTransform
+- Repaired clipboard style on behavior
+- Repaired dragdrop style on behavior
+- modify CSSStyle TCs
+- Fix LocationNetwork
+- Merge "Move Clipboard to Gesture category" into tizen_2.1
+- Simplify TC framework
+- Merge "Only first entry into testapp will auto-popup information window" into tizen_2.1
+- Move Clipboard to Gesture category
+- Only first entry into testapp will auto-popup information window
+- Update version for ww23.5 release.
+- Merge "Add capability for camera and microphone" into tizen_2.1
+- Update dev guide for latest test fw.
+- Add capability for camera and microphone
+- Update test FW to import tests from tests XML.
+- Modify pagevisibility component in TCT behavior
+- Provide a method to get current test app name
+- Merge "modify test step in MediaPlayback" into tizen_2.1
+- Merge "Enable/Disable only PASS button" into tizen_2.1
+- Merge "Update Security style" into tizen_2.1
+- Merge "Improve media content to res file" into tizen_2.1
+- Merge "Repaired ad2danimation style on behavior" into tizen_2.1
+- Merge "behavior vibration improve by modifying slider style" into tizen_2.1
+- modify test step in MediaPlayback
+- Enable/Disable only PASS button
+- Update Security style
+- Improve media content to res file
+- Repaired ad2danimation style on behavior
+- behavior vibration improve by modifying slider style
+- Rename Hybrid as HybridApplication
+- Merge "Submit wanglin's patch to fix 1504,1450,1347" into tizen_2.1
+- Submit wanglin's patch to fix 1504,1450,1347
+- Merge "behavior touch improve by modifying test step description" into tizen_2.1
+- behavior touch improve by modifying test step description
+- Modify the display status of 2D3DAnimation
+- Merge "Add Security TC to behavior" into tizen_2.1
+- Merge "Improve Accelerometer test information" into tizen_2.1
+- Merge "Repaired clipboard case for behavior" into tizen_2.1
+- Merge "Repaired dragdrop case for behavior" into tizen_2.1
+- Merge "Add test area for SVGTransform" into tizen_2.1
+- Merge "Modify 2D3DAnimation UI" into tizen_2.1
+- Merge "Improve CSSAnimation test UI and info description" into tizen_2.1
+- Merge "behavior Vibration improve" into tizen_2.1
+- Merge "behavior Touch improve" into tizen_2.1
+- Merge "Modify opacity controller and descripition in CSSStyle" into tizen_2.1
+- Merge "Improve Hybrid in behavior" into tizen_2.1
+- Improve Accelerometer test information
+- Add Security TC to behavior
+- Repaired clipboard case for behavior
+- Repaired dragdrop case for behavior
+- Add test area for SVGTransform
+- Modify 2D3DAnimation UI
+- Improve CSSAnimation test UI and info description
+- behavior Vibration improve
+- behavior Touch improve
+- Modify opacity controller and descripition in CSSStyle
+- Improve Hybrid in behavior
+- behavior Microphone improve
+- Merge "behavior LocationGps and LocationNetwork imporve" into tizen_2.1
+- Add volume controller in MediaPlayback
+- behavior LocationGps and LocationNetwork imporve
+- Repaired fullscreen case in behavior
+- Merge "Improve Camera into two TCs in behavior" into tizen_2.1
+- Improve Camera into two TCs in behavior
+- update the button name and info description in FileReader
+- [DataSync] add what intel QA wants
+- Add note for ringtone test
+- Update local build minor release version.
+- Fix not found wgt issue in Drag and Drop
+- Update tests category to algin with feedbacks.
+- Add viewport case for behavior
+- Merge "Fix incorrect description in Clipboard" into tizen_2.1
+- Merge "Add Hybrid TC into behavior" into tizen_2.1
+- Fix incorrect description in Clipboard
+- Add Hybrid TC into behavior
+- update Chatter sample
+- Behavior Test Update
+- Update release version for ww22.5 relase.
+- Add pagevisibility component in TCT behavior
+- Add clipboard and dragdrop cases for behavior
+- Merge "Add FileReader to TCT behavior" into tizen_2.1
+- Merge "add getusermedia to CameraBack in behavior" into tizen_2.1
+- Add FileReader to TCT behavior
+- add getusermedia to CameraBack in behavior
+- Merge "Add CSSAnimation test to TCT behavior" into tizen_2.1
+- Behavior Test Download : Delete All update Change-Id: Ia8e6c3105b8fef0f75a172e5fe85f1453442026e
+- Add CSSAnimation test to TCT behavior
+- Update icons
+- Add CSSStyle TC to behavior
+- Add SVG Transform TC to behavior
+- Merge "Add PositionError to LocationGps and improve style" into tizen_2.1
+- Merge "add browerstate and netinfo test point to LocationNetwork" into tizen_2.1
+- Merge "Make 2D3DAnimation element align center" into tizen_2.1
+- Add PositionError to LocationGps and improve style
+- add browerstate and netinfo test point to LocationNetwork
+- Make 2D3DAnimation element align center
+- Add FullScreen TC to behavior
+- Update tests ui version to 0.2.4.
+
+* Fri May 10 2013 Yugang Fan <yugang.fan@intel.com> submit/tizen_2.1/20130508.080845@104acf0
+- Merge "Update Camera Microphone Accelerometer 2D3DAnimation test  case"
+- Update Camera Microphone Accelerometer 2D3DAnimation test  case
+- Update footer button align to center.
+- Behavior Test Messaging : AppName modify
+- Behavior Test LongAppName modify Change-Id: Ifc65870a93fc561fff04fe734c87c0ca90939c36
+- Update wgt id and require version due to spec change.
+- Improve 2D3DAnimation Accelerometer and LocationNetwork case
+- Behavior Test WebAPI : header, footer fixed
+- res folder delete & file move. TTS-1381
+- Behavior Test NFC : Add Contact Button
+- Process rewriting
+- Update Device WebAPI(purpose, bugs)
+- TTS-1340
+- Update version for ww19.3 release.
+- Update jquery libs to SDK build-in version and fix some UI issues.
+- Push update
+- Improve TC testing method and update style
+- Behavior TC Update(Device WebAPI)
+- Merge "Move test steps to info in CameraBack and Microphone"
+- Merge "Update Device WebAPI Module"
+- Move test steps to info in CameraBack and Microphone
+- Improve icons of Application and Bluetooth
+- Update Device WebAPI Module
+- Update WebAPI 16, Remove Content 1, Add res 1
+- Improve test description
+- Update behavior tests Device Web API 16
+- Updater behavior tests release version for ww17.5.
+- Update icons from LaunchBox
+- Update main css file to fix result popup overflow and button size.
+- Update footer button size and move version to popup.
+- Update behavior ui style, show version in homepage and add dev guide doc.
+- Behavior_Test_SystemSetting(Screen)
+- Behavior_Test_SystemSetting(NotificationEmail)
+- Behavior_Test_SystemSetting(IncomingCall)
+- Behavior_Test_SystemInfo
+- Behavior_Test_Push
+- Behavior_Test_Packag
+- Behavior_Test_Package
+- Behavior_Test_Notification
+- Behavior_Test_NFC
+- Behavior_Test_Messaging(S.MMS)
+- Behavior_Test_Messaging(Email)
+- Behavior_Test_Download
+- Behavior_Test_DataSync
+- Behavior_Test_Content
+- Behavior_Test_Bluetooth
+- Behavior_Test_Alarm
+- Update behavior ww17.3 release info.
+- Merge "Add one TC; Add reset button; Improve description of TCs"
+- Add one TC; Add reset button; Improve description of TCs
+- Add one TC; Add reset button; Improve description of TCs
+- Delete template test and update release version.
+- Add 7 new TCs into behavior
+- Init Tizen TCT behavior tests repo.
+- Initial empty repository
+
diff --git a/wearable/tct-behavior-tests/packaging/behavior.spec b/wearable/tct-behavior-tests/packaging/behavior.spec
new file mode 100755 (executable)
index 0000000..866fc63
--- /dev/null
@@ -0,0 +1,84 @@
+%define _unpackaged_files_terminate_build 0 
+
+Summary: TCT Behavior Tests
+Name: tct-behavior-tests
+Version: 3.0
+Release: 1
+License: BSD
+Group: test/tct/behavior
+Source: %name-%version.tar.gz
+BuildRequires: zip
+BuildRequires: hash-signer
+
+%description
+This is TCT behavior tests
+
+%prep
+%setup -q
+
+%build
+unset LD_AS_NEEDED  
+./autogen
+./configure --prefix=/usr
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+make install DESTDIR=$RPM_BUILD_ROOT
+mkdir -p $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/index.html $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/config.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/icon.png $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests.full.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/subtestresult.xml $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/js $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/css $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/tests $RPM_BUILD_DIR/%name
+cp -a $RPM_BUILD_DIR/%name-%version/res $RPM_BUILD_DIR/%name
+cd $RPM_BUILD_DIR/%name
+mkdir -p $RPM_BUILD_ROOT/opt/%name/res/media
+cp -a $RPM_BUILD_DIR/%name-%version/res/font $RPM_BUILD_ROOT/opt/%name/res/font
+cp -a $RPM_BUILD_DIR/%name-%version/res/images $RPM_BUILD_ROOT/opt/%name/res/images
+cp -a $RPM_BUILD_DIR/%name-%version/res/js $RPM_BUILD_ROOT/opt/%name/res/js
+cp -a $RPM_BUILD_DIR/%name-%version/res/css $RPM_BUILD_ROOT/opt/%name/res/css
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/red-green.theora.ogv $RPM_BUILD_ROOT/opt/%name/res/media/
+cp -a $RPM_BUILD_DIR/%name-%version/res/media/movie_5.mp4 $RPM_BUILD_ROOT/opt/%name/res/media/
+zip -rq $RPM_BUILD_ROOT/opt/%name/%name.wgt *
+hash-signer.sh -ad -p platform $RPM_BUILD_ROOT/opt/%name/%name.wgt
+cd -
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+rm -rf $RPM_BUILD_DIR/%name
+rm -rf $RPM_BUILD_DIR/%name-%version
+
+%changelog
+
+%files
+/opt/%name
+
+%post
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Start install package /opt/%name.wgt"
+    [ -e /opt/%name/%name.wgt ] && $wgt_installer -i /opt/%name/%name.wgt
+else
+    echo "Fail to find wgt_installer"
+fi
+
+%preun
+wgt_installer="wrt-installer"
+which $wgt_installer > /dev/null 2>&1
+if [ $? -eq 0 ]; then
+    echo "Uninstall package %name"
+    i_pkg_nns=`wrt-launcher -l | grep %name | awk '{ print $5 }'`
+    for i_pkg_nn in $i_pkg_nns; do
+      echo "Package Name is $i_pkg_nn"
+      $wgt_installer -un $i_pkg_nn
+    done
+else
+    echo "Fail to find wgt_installer"
+fi
diff --git a/wearable/tct-behavior-tests/res/css/COPYING b/wearable/tct-behavior-tests/res/css/COPYING
new file mode 100755 (executable)
index 0000000..e24d498
--- /dev/null
@@ -0,0 +1,21 @@
+canvas-index.css comes from
+http://w3c-test.org/html/tests/approved/common/canvas-index.css
+without any modification.
+
+a-green.css comes from
+http://test.csswg.org/source/approved/css-masking/src/support/a-green.css
+without any modification.
+
+These tests are copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
+
+tests.css comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
diff --git a/wearable/tct-behavior-tests/res/css/a-green.css b/wearable/tct-behavior-tests/res/css/a-green.css
new file mode 100755 (executable)
index 0000000..636c1bc
--- /dev/null
@@ -0,0 +1 @@
+.a { color: green; }
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/css/blue-100x100.css b/wearable/tct-behavior-tests/res/css/blue-100x100.css
new file mode 100755 (executable)
index 0000000..84aded5
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+#test-blue {
+    background-color: blue;
+    height: 100px;
+    width: 100px;
+}
diff --git a/wearable/tct-behavior-tests/res/css/canvas-index.css b/wearable/tct-behavior-tests/res/css/canvas-index.css
new file mode 100755 (executable)
index 0000000..3e09ffb
--- /dev/null
@@ -0,0 +1,31 @@
+body {
+    font-size: small;
+    font-family: sans-serif;
+}
+
+a {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+h3 {
+    display: inline;
+    font-size: medium;
+}
+
+h3 + p {
+    display: inline;
+    margin-left: 0.5em;
+}
+
+li {
+    list-style-type: none;
+}
+
+ul {
+    padding-left: 2em;
+    margin-left: 0;
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/css/test.css b/wearable/tct-behavior-tests/res/css/test.css
new file mode 100755 (executable)
index 0000000..fc87d3a
--- /dev/null
@@ -0,0 +1 @@
+pre.prettyprint{padding:5px;font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;margin-bottom:10px;background-color:#eee;overflow:auto;width:auto;width:650px !ie7;padding-bottom:20px !ie7;max-height:600px;}pre.prettyprint{max-height:none\9;}code.prettyprint{font-family:Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,serif;background-color:#eee;}p code.prettyprint{padding:1px 5px 1px 5px;}.str{color:maroon;}.kwd{color:#00008b;}.com{color:gray;}.typ{color:#2b91af;}.lit{color:maroon;}.pun{color:#000;}.pln{color:#000;}.tag{color:maroon;}.atn{color:red;}.atv{color:blue;}.dec{color:purple;}@media print{.str{color:#060;}.kwd{color:#006;font-weight:bold;}.com{color:#600;font-style:italic;}.typ{color:#404;font-weight:bold;}.lit{color:#044;}.pun{color:#440;}.pln{color:#000;}.tag{color:#006;font-weight:bold;}.atn{color:#404;}.atv{color:#060;}}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/css/tests.css b/wearable/tct-behavior-tests/res/css/tests.css
new file mode 100755 (executable)
index 0000000..45d0432
--- /dev/null
@@ -0,0 +1,123 @@
+@charset "UTF-8";
+/* CSS Document */
+#testcasepage div,#testcasepage h1,#testcasepage p,#testcasepage table,#testcasepage tr,#testcasepage th,#testcasepage td
+       {
+       margin: 0;
+       padding: 0;
+       border: 0;
+       font-weight: inherit;
+       font-style: inherit;
+       font-size: 0.96em;
+       font-family: arial;
+       vertical-align: baseline;
+}
+
+#testcasepage p {
+       text-align: left;
+}
+
+#suite_title {
+       text-align: left;
+}
+
+#btc {
+       text-align: right;
+}
+
+#testcasepage table {
+       border-collapse: separate;
+       border-spacing: 0;
+       margin-bottom: 1.4em;
+       vertical-align: middle;
+}
+
+#testcasepage th,#testcasepage td {
+       text-align: left;
+       font-weight: normal;
+       padding: 4px 10px 4px 5px;
+       vertical-align: middle;
+}
+
+#cases table {
+       width: 101%;
+}
+
+#fail_cases table {
+       width: 101%;
+}
+
+#title table {
+       width: 101%;
+}
+
+#device table {
+       width: 50%;
+}
+
+#summary table {
+       width: 50%;
+}
+
+#testcasepage th {
+       border-bottom: 1px solid #000;
+       background-color: #AAAAAA;
+       border-left: 1px solid #000;
+       border-top: 1px solid #000;
+       color: #000;
+       font-weight: bold;
+       vertical-align: bottom;
+}
+
+#testcasepage th:last-child,#testcasepage td:last-child {
+       border-right: 1px solid #000;
+}
+
+#testcasepage td {
+       border-left: 1px solid;
+       font-weight: normal;
+       border-bottom: 1px solid;
+}
+
+#testcasepage td.yellow_rate {
+       background-color: #ffcc00;
+}
+
+#testcasepage td.green_rate {
+       background-color: #33cc33;
+}
+
+#testcasepage td.dgreen_rate {
+       background-color: #339933;
+}
+
+#testcasepage td.red_rate {
+       background-color: #FF3333;
+}
+
+#title table,#title tr,#title td {
+       border-left: none;
+       border-bottom: none;
+       text-align: center;
+}
+
+#title td:last-child {
+       border-right: none;
+}
+
+#testcasepage h1 {
+       font-size: 2em;
+       font-family: Arial, sans-serif;
+       font-weight: bold;
+       line-height: 1;
+       color: #000;
+       margin-bottom: 0.75em;
+       padding-top: 0.25em;
+       font-weight: bold;
+}
+
+#goTopBtn {
+       right: 0px;
+       bottom: 0px;
+       position: fixed; +position: absolute;
+       top: expression(parseInt(document.body.scrollTop)+document.body.clientHeight-40);
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/font/COPYING b/wearable/tct-behavior-tests/res/font/COPYING
new file mode 100755 (executable)
index 0000000..a926b6b
--- /dev/null
@@ -0,0 +1,15 @@
+CanvasTest.ttf comes from
+http://w3c-test.org/html/tests/approved/fonts/CanvasTest.ttf
+without any modification.
+
+csstest-basic-bold.ttf comes from
+http://test.csswg.org/source/approved/fonts/CSSTest/csstest-basic-bold.ttf
+without any modification.
+
+The font copyright by W3C and/or the author listed in the test
+file. The tests are dual-licensed under the W3C Test Suite License:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-license
+and the BSD 3-clause License:
+http://www.w3.org/Consortium/Legal/2008/03-bsd-license
+under W3C's test suite licensing policy:
+http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright
diff --git a/wearable/tct-behavior-tests/res/font/CanvasTest.ttf b/wearable/tct-behavior-tests/res/font/CanvasTest.ttf
new file mode 100755 (executable)
index 0000000..9023592
Binary files /dev/null and b/wearable/tct-behavior-tests/res/font/CanvasTest.ttf differ
diff --git a/wearable/tct-behavior-tests/res/font/csstest-basic-bold.ttf b/wearable/tct-behavior-tests/res/font/csstest-basic-bold.ttf
new file mode 100755 (executable)
index 0000000..8c53e6f
Binary files /dev/null and b/wearable/tct-behavior-tests/res/font/csstest-basic-bold.ttf differ
diff --git a/wearable/tct-behavior-tests/res/html/application.html b/wearable/tct-behavior-tests/res/html/application.html
new file mode 100755 (executable)
index 0000000..a1849e5
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Application Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-application</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("application" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access application api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/html/bluetooth.html b/wearable/tct-behavior-tests/res/html/bluetooth.html
new file mode 100755 (executable)
index 0000000..d8e3d8f
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Bluetooth Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-bluetooth</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("bluetooth" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access bluetooth api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/html/download.html b/wearable/tct-behavior-tests/res/html/download.html
new file mode 100755 (executable)
index 0000000..d2b1bbc
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Download Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-download</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("download" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access download api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/html/systeminfo.html b/wearable/tct-behavior-tests/res/html/systeminfo.html
new file mode 100755 (executable)
index 0000000..b17893a
--- /dev/null
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <title>WRT Test: deviceapi-access-by-external</title>
+    <link rel="author" title="samsung" />
+    <link rel="help" href="" />
+    <meta name="flags" content="" />
+    <meta name="assert" content="The WRT MUST NOT allow an external Web page to access the Tizen Systeminfo Device API." />
+    <meta charset="utf-8">
+  </head>
+  <body>
+    <h1>deviceapi-access-by-external-systeminfo</h1>
+    <p>Launch Result:</p><p id="result" style="color:Green">will shown after launched</p>
+    <script type="text/javascript">
+    try {
+        if("systeminfo" in tizen) {
+            document.getElementById("result").innerHTML="Fail:"+" External WebPage should not access systeminfo api";
+        } else {
+            document.write("Pass");
+        }
+    } catch(e) {
+        document.getElementById("result").innerHTML="Pass";
+    }
+    </script>
+ </body>
+</html>
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/images/1x1-white.png b/wearable/tct-behavior-tests/res/images/1x1-white.png
new file mode 100755 (executable)
index 0000000..dd43fae
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/1x1-white.png differ
diff --git a/wearable/tct-behavior-tests/res/images/COPYING b/wearable/tct-behavior-tests/res/images/COPYING
new file mode 100755 (executable)
index 0000000..5a13abf
--- /dev/null
@@ -0,0 +1,58 @@
+PNG_512x512_318Kb_BBB.png comes from
+http://testdata.meego.com
+without any modification.
+
+The file is under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+The ring.png comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/fast/backgrounds/resources/
+
+The file is under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
+
+
+-------------------------------
+back_top.png comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
+
+-------------------------------
+blue-100x100.png
+red-100x100.png
+green-100x100.png
+
+
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+        Hao, Yunfei <yunfeix.hao@intel.com>
diff --git a/wearable/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png b/wearable/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png
new file mode 100755 (executable)
index 0000000..2aa08a3
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/PNG_512x512_318Kb_BBB.png differ
diff --git a/wearable/tct-behavior-tests/res/images/back_top.png b/wearable/tct-behavior-tests/res/images/back_top.png
new file mode 100755 (executable)
index 0000000..19cbd76
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/back_top.png differ
diff --git a/wearable/tct-behavior-tests/res/images/blue-100x100.png b/wearable/tct-behavior-tests/res/images/blue-100x100.png
new file mode 100755 (executable)
index 0000000..584f9c3
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/blue-100x100.png differ
diff --git a/wearable/tct-behavior-tests/res/images/green-100x100.png b/wearable/tct-behavior-tests/res/images/green-100x100.png
new file mode 100755 (executable)
index 0000000..d3aea5d
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/green-100x100.png differ
diff --git a/wearable/tct-behavior-tests/res/images/red-100x100.png b/wearable/tct-behavior-tests/res/images/red-100x100.png
new file mode 100755 (executable)
index 0000000..d13fc80
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/red-100x100.png differ
diff --git a/wearable/tct-behavior-tests/res/images/ring.png b/wearable/tct-behavior-tests/res/images/ring.png
new file mode 100755 (executable)
index 0000000..061bb94
Binary files /dev/null and b/wearable/tct-behavior-tests/res/images/ring.png differ
diff --git a/wearable/tct-behavior-tests/res/js/COPYING b/wearable/tct-behavior-tests/res/js/COPYING
new file mode 100755 (executable)
index 0000000..94a77ec
--- /dev/null
@@ -0,0 +1,6 @@
+application.js comes from
+https://github.com/testkit/testkit-lite
+without any modification.
+
+This file is under LICENSE.Apache-2.0.
+
diff --git a/wearable/tct-behavior-tests/res/js/application.js b/wearable/tct-behavior-tests/res/js/application.js
new file mode 100755 (executable)
index 0000000..72e2a78
--- /dev/null
@@ -0,0 +1,44 @@
+function getScrollTop(){
+    return f_scrollTop();
+}
+
+function f_scrollTop() {
+       return f_filterResults (
+               $(window) ? $(window).scrollTop() : 0,
+               document.documentElement ? document.documentElement.scrollTop : 0,
+               document.body ? document.body.scrollTop : 0
+       );
+}
+function f_filterResults(n_win, n_docel, n_body) {
+       var n_result = n_win ? n_win : 0;
+       if (n_docel && (!n_result || (n_result > n_docel)))
+               n_result = n_docel;
+       return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
+}
+
+function setScrollTop(){
+    $(window) ? $(window).scrollTop(0): 0;
+       document.documentElement ? document.documentElement.scrollTop = 0 :0;
+       document.body ? document.body.scrollTop = 0 : 0;
+} 
+
+function goTopEx(){
+    $node = $('#goTopBtn');
+       if(getScrollTop() > 0){
+                   $node.show();
+       }else{
+                   $node.hide();
+       }
+       
+    $(window).scroll(function(){
+           if(getScrollTop() > 0){
+                   $node.show();
+           }else{
+                   $node.hide();
+           }
+    });
+       
+    $node.click(function(){
+               setScrollTop();
+    });
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/js/csp.js b/wearable/tct-behavior-tests/res/js/csp.js
new file mode 100755 (executable)
index 0000000..de46ff6
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+
+var X = 10;
+var Y = eval(X + 17);
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/res/js/reportcspviolation.cgi b/wearable/tct-behavior-tests/res/js/reportcspviolation.cgi
new file mode 100755 (executable)
index 0000000..15d8cf4
--- /dev/null
@@ -0,0 +1,26 @@
+#!/usr/bin/env python
+import time
+import os
+print 'Content-Type: text/html\n\n'
+while True:
+    i = raw_input()
+    if i is None:
+        break
+    if str(i).strip()=='':
+        break
+    n = 1
+    if os.path.isfile('/tmp/csp-report.log'):
+        file_object_num = open('/tmp/csp-report.log','r')
+        for line in file_object_num:
+            if str(line).find("Time:") >= 0:
+                n = n+1
+        file_object_num.close( )
+    file_object = open('/tmp/csp-report.log', 'a')
+    file_object.write('\n %d   Time:' %n)
+    file_object.write( time.strftime(' %Y-%m-%d %H:%M:%S',time.localtime(time.time())))
+    file_object.write('\n')
+    file_object.write('     Data:')
+    file_object.write(i)
+    file_object.write('\n')
+    file_object.close( )
+    print i
diff --git a/wearable/tct-behavior-tests/res/js/test.js b/wearable/tct-behavior-tests/res/js/test.js
new file mode 100755 (executable)
index 0000000..8b868e4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
+function getVideoURI (){
+
+}
diff --git a/wearable/tct-behavior-tests/res/js/test81.js b/wearable/tct-behavior-tests/res/js/test81.js
new file mode 100755 (executable)
index 0000000..e582567
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+function getVideoURI (){
+
+}
diff --git a/wearable/tct-behavior-tests/res/js/test83.js b/wearable/tct-behavior-tests/res/js/test83.js
new file mode 100755 (executable)
index 0000000..d260698
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Zhang, Zhiqiang <zhiqiang.zhang@intel.com>
+
+*/
+var q = null;
diff --git a/wearable/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp b/wearable/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
new file mode 100755 (executable)
index 0000000..ee410d3
Binary files /dev/null and b/wearable/tct-behavior-tests/res/media/3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp differ
diff --git a/wearable/tct-behavior-tests/res/media/COPYING b/wearable/tct-behavior-tests/res/media/COPYING
new file mode 100755 (executable)
index 0000000..2127517
--- /dev/null
@@ -0,0 +1,37 @@
+3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp
+MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
+MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
+come from http://testdata.meego.com
+without any modification.
+
+These files are under LGPLv2.1 License:
+http://gitorious.org/meego-quality-assurance/mcts/blobs/master/mcts-mwts/generic/mwts-gstreamer/COPYING
+
+
+-------------------------------
+red-green.theora.ogv comes from
+https://www.khronos.org/registry/webgl/sdk/tests/conformance/resources/red-green.theora.ogv
+without any modification.
+
+Khronos Group License (MIT):
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/wearable/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 b/wearable/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..a7e8564
Binary files /dev/null and b/wearable/tct-behavior-tests/res/media/MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4 differ
diff --git a/wearable/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 b/wearable/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4
new file mode 100755 (executable)
index 0000000..65b4781
Binary files /dev/null and b/wearable/tct-behavior-tests/res/media/MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4 differ
diff --git a/wearable/tct-behavior-tests/res/media/movie_5.mp4 b/wearable/tct-behavior-tests/res/media/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/wearable/tct-behavior-tests/res/media/movie_5.mp4 differ
diff --git a/wearable/tct-behavior-tests/res/media/red-green.theora.ogv b/wearable/tct-behavior-tests/res/media/red-green.theora.ogv
new file mode 100755 (executable)
index 0000000..1543915
Binary files /dev/null and b/wearable/tct-behavior-tests/res/media/red-green.theora.ogv differ
diff --git a/wearable/tct-behavior-tests/subtestresult.xml b/wearable/tct-behavior-tests/subtestresult.xml
new file mode 100755 (executable)
index 0000000..6af0f3c
--- /dev/null
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testresult.xsl"?>
+<test_definition>
+<suite name="tct-behavior-tests">
+  <set name="CSP">
+      <testcase id="csp-none" result="N/A"></testcase>
+      <testcase id="csp-self" result="N/A"></testcase>
+      <testcase id="csp-asterisk" result="N/A"></testcase>
+      <testcase id="csp-cross-origin" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-csp" result="N/A"></testcase>
+      <testcase id="default-policy-by-directives-report-only" result="N/A"></testcase>
+      <testcase id="default-src_none" result="N/A"></testcase>
+      <testcase id="default-src_self" result="N/A"></testcase>
+      <testcase id="default-src_asterisk" result="N/A"></testcase>
+      <testcase id="default-src_cross_origin" result="N/A"></testcase>
+      <testcase id="sandbox-empty-ext" result="N/A"></testcase>
+      <testcase id="sandbox-empty-int" result="N/A"></testcase>
+      <testcase id="sandbox-empty-inline" result="N/A"></testcase>
+      <testcase id="sandbox-same-origin-allow-scripts" result="N/A"></testcase>
+      <testcase id="script-src_none" result="N/A"></testcase>
+      <testcase id="script-src_inline_eval" result="N/A"></testcase>
+      <testcase id="style-src_self" result="N/A"></testcase>
+  </set>
+  <set name="PackageManagement">
+      <testcase id="Sample-widget1" result="N/A"></testcase>
+      <testcase id="Sample-widget2" result="N/A"></testcase>
+      <testcase id="Sample-widget3" result="N/A"></testcase>
+      <testcase id="Sample-widget4" result="N/A"></testcase>
+      <testcase id="widget-version-1" result="N/A"></testcase>
+      <testcase id="npruntime-all-on-arm" result="N/A"></testcase>
+      <testcase id="npruntime-arm-on-x86" result="N/A"></testcase>
+  </set>
+  <set name="ConfigurationExtension">
+      <testcase id="application-content" result="N/A"></testcase>
+      <testcase id="setting-an-more" result="N/A"></testcase>
+      <testcase id="setting-an-one" result="N/A"></testcase>
+      <testcase id="setting-an-zero" result="N/A"></testcase>
+      <testcase id="setting-ar-true" result="N/A"></testcase>
+      <testcase id="setting-bs-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-disable" result="N/A"></testcase>
+      <testcase id="setting-cm-enable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-disable" result="N/A"></testcase>
+      <testcase id="setting-encrypt-enable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-default" result="N/A"></testcase>
+      <testcase id="setting-hwkey-disable" result="N/A"></testcase>
+      <testcase id="setting-hwkey-enable" result="N/A"></testcase>
+      <testcase id="setting-install-location-internal-only-with-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-no-card" result="N/A"></testcase>
+      <testcase id="setting-install-location-prefer-external-with-card" result="N/A"></testcase>
+  </set>
+  <set name="Stability">
+      <testcase id="test-half-memory" result="N/A"></testcase>
+      <testcase id="test-hd-image" result="N/A"></testcase>
+  </set>
+  <set name="WRTSupport">
+      <testcase id="debug-web-inspector-ubuntu" result="N/A"></testcase>
+      <testcase id="debug-web-inspector-windows7" result="N/A"></testcase>
+      <testcase id="lifecycle-unload-event" result="N/A"></testcase>
+      <testcase id="other-localization" result="N/A"></testcase>
+      <testcase id="other-uri-schemes" result="N/A"></testcase>
+      <testcase id="other-uri-schemes-mailto" result="N/A"></testcase>
+      <testcase id="other-widget-access-policy" result="N/A"></testcase>
+      <testcase id="protection-encryption-check" result="N/A"></testcase>
+      <testcase id="security-permission" result="N/A"></testcase>
+      <testcase id="security-policy" result="N/A"></testcase>
+      <testcase id="url-access-multi" result="N/A"></testcase>
+      <testcase id="url-access-multi-all" result="N/A"></testcase>
+      <testcase id="url-access-multi-subdomains" result="N/A"></testcase>
+  </set>
+  <set name="WRTUI">
+      <testcase id="application-rotation-sensor-enable" result="N/A"></testcase>
+      <testcase id="multiple-browsing-context" result="N/A"></testcase>
+      <testcase id="csp-mode-allow-navigation-access" result="N/A"></testcase>
+      <testcase id="csp-mode-not-navigation-access" result="N/A"></testcase>
+      <testcase id="not-csp-allow-navigation-access" result="N/A"></testcase>
+      <testcase id="not-csp-not-allow-navigation-access" result="N/A"></testcase>
+      <testcase id="view-mode-maximized-rotation" result="N/A"></testcase>
+      <testcase id="view-mode-fullscreen-rotation" result="N/A"></testcase>
+      <testcase id="application-rotation-sensor-enable" result="N/A"></testcase>
+  </set>
+</suite>
+</test_definition>
diff --git a/wearable/tct-behavior-tests/suite.json b/wearable/tct-behavior-tests/suite.json
new file mode 100755 (executable)
index 0000000..2e85b56
--- /dev/null
@@ -0,0 +1,110 @@
+{
+    "pkg-blacklist": [
+        "config.xml",
+        "pack.py",
+        "testcase.xsl",
+        "testresult.xsl",
+        "tests.css",
+        "icon.png",
+        "manifest.json",
+        "suite.json",
+        "inst.*"
+    ],
+    "pkg-list": {
+        "apk,cordova": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.apk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.android.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [
+                        "manifest.json"
+                    ],
+                    "copylist": {
+                        "tests.android.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                }
+            }
+        },
+        "wgt": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE.Apache-2.0": "LICENSE.Apache-2.0",
+                "LICENSE.BSD-3": "LICENSE.BSD-3",
+                "LICENSE.CC-BY-3.0": "LICENSE.CC-BY-3.0",
+                "inst.wgt.py": "inst.py",
+                "askpolicy.sh": "askpolicy.sh",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/html": "res/html",
+                "res/js": "res/js",
+                "res/media": "res/media",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.xml": "tests.xml"
+            },
+            "sign-flag": "true",
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "copylist": {
+                        "tests.xml": "tests.xml"
+                    },
+                    "install-path": ".",
+                    "sign-flag": "true"
+                }
+            }
+        },
+        "xpk": {
+            "blacklist": [
+                "*"
+            ],
+            "copylist": {
+                "LICENSE": "LICENSE",
+                "inst.xpk.py": "inst.py",
+                "js/thirdparty/jquery.js": "res/js/jquery.js",
+                "res/css": "res/css",
+                "res/font": "res/font",
+                "res/images": "res/images",
+                "res/js": "res/js",
+                "res/media/khronos/red-green.theora.ogv": "res/media/red-green.theora.ogv",
+                "testresult.xsl": "res/css/testresult.xsl",
+                "tests.tizen.xml": "tests.xml"
+            },
+            "subapp-list": {
+                ".": {
+                    "app-name": "tct-behavior-tests",
+                    "blacklist": [],
+                    "copylist": {
+                        "tests.tizen.xml": "tests.xml"
+                    },
+                    "install-path": "."
+                },
+                "tests/Viewport/ViewportTest": {
+                    "app-name": "ViewportTest",
+                    "blacklist": [],
+                    "install-path": "apps",
+                    "sign-flag": "true"
+                }
+            }
+        }
+    },
+    "pkg-name": "tct-behavior-tests"
+}
diff --git a/wearable/tct-behavior-tests/testcase.xsl b/wearable/tct-behavior-tests/testcase.xsl
new file mode 100755 (executable)
index 0000000..fb32685
--- /dev/null
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suites">
+            <a name="contents"/>
+            <table>
+              <tr>
+                <th>Test Suite</th>
+                <th>Total</th>
+                <th>Auto</th>
+                <th>Manual</th>
+              </tr>
+              <tr>
+                <td>
+                  Total
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase)"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type = 'auto'])"/>
+                </td>
+                <td>
+                  <xsl:value-of select="count(test_definition/suite/set//testcase[@execution_type != 'auto'])"/>
+                </td>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type = 'auto'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set/testcase[@execution_type != 'auto'])"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="title">
+            <table>
+              <tr>
+                <td class="title">
+                  <h1>Detailed Test Cases</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="cases">
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Type</th>
+                  <th>Component</th>
+                  <th>Execution Type</th>
+                  <th>Description</th>
+                  <th>Specification</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="7">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <!-- xsl:sort select="@id" /> -->
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@type"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@component"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@execution_type"/>
+                      </td>
+                      <td>
+                        <p>
+                          Pre_condition:
+                          <xsl:value-of select=".//description/pre_condition"/>
+                        </p>
+                        <p>
+                          Post_condition:
+                          <xsl:value-of select=".//description/post_condition"/>
+                        </p>
+                        <p>
+                          Test Script Entry:
+                          <xsl:value-of select=".//description/test_script_entry"/>
+                        </p>
+                        <p>
+                          Steps:
+                          <p/>
+                          <xsl:for-each select=".//description/steps/step"><xsl:sort select="@order"/>
+                            Step
+                            <xsl:value-of select="@order"/>
+                            :
+                            <xsl:value-of select="./step_desc"/>
+                            ;
+                            <p/>
+                            Expected Result:
+                            <xsl:value-of select="./expected"/>
+                            <p/>
+                          </xsl:for-each>
+                        </p>
+                      </td>
+                      <td>
+                        <xsl:for-each select=".//specs/spec"><b>[Spec_Assertion]:</b><br/>
+                          [Category]:
+                          <xsl:value-of select="./spec_assertion/@category"/>
+                          <br/>
+                          [Section]:
+                          <xsl:value-of select="./spec_assertion/@section"/>
+                          <br/>
+                          [Specification]:
+                          <xsl:value-of select="./spec_assertion/@specification"/>
+                          <br/>
+                          [Interface]:
+                          <xsl:value-of select="./spec_assertion/@interface"/>
+                          <br/>
+                          <xsl:choose><xsl:when test="./spec_assertion/@element_name">
+                              [<xsl:value-of select="./spec_assertion/@element_type"/>]:
+                              <xsl:value-of select="./spec_assertion/@element_name"/>
+                              <br/>
+                            </xsl:when></xsl:choose>
+                          [URL]:
+                          <xsl:value-of select="./spec_url"/>
+                          <br/>
+                          [Statement]:
+                          <xsl:value-of select="./spec_statement"/>
+                          <br/>
+                        </xsl:for-each>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/wearable/tct-behavior-tests/testresult.xsl b/wearable/tct-behavior-tests/testresult.xsl
new file mode 100755 (executable)
index 0000000..c5199c0
--- /dev/null
@@ -0,0 +1,491 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+  <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
+  <xsl:template match="/">
+    <html>
+      <STYLE type="text/css">
+        @import "tests.css";
+      </STYLE>
+      <head>
+        <script type="text/javascript" src="jquery.min.js"/>
+      </head>
+      <body>
+        <div id="testcasepage">
+          <div id="title">
+            <table>
+              <tr>
+                <td>
+                  <h1>Test Report</h1>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="device">
+            <table>
+              <tr>
+                <th colspan="2">Device Information</th>
+              </tr>
+              <tr>
+                <td>Device Name</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_name">
+                      <xsl:if test="test_definition/environment/@device_name = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_name"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device Model</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_model">
+                      <xsl:if test="test_definition/environment/@device_model = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_model"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>OS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@os_version">
+                      <xsl:if test="test_definition/environment/@os_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@os_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Device ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@device_id">
+                      <xsl:if test="test_definition/environment/@device_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@device_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Firmware Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@firmware_version">
+                      <xsl:if test="test_definition/environment/@firmware_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@firmware_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Build ID</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@build_id">
+                      <xsl:if test="test_definition/environment/@build_id = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@build_id"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Screen Size</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@screen_size">
+                      <xsl:if test="test_definition/environment/@screen_size = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@screen_size"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Resolution</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@resolution">
+                      <xsl:if test="test_definition/environment/@resolution = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@resolution"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Host Info</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@host">
+                      <xsl:if test="test_definition/environment/@host = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@host"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>CTS Version</td>
+                <td>
+                  <xsl:choose>
+                    <xsl:when test="test_definition/environment/@cts_version">
+                      <xsl:if test="test_definition/environment/@cts_version = ''">
+                        N/A
+                      </xsl:if>
+                      <xsl:value-of select="test_definition/environment/@cts_version"/>
+                    </xsl:when>
+                    <xsl:otherwise>
+                      N/A
+                    </xsl:otherwise>
+                  </xsl:choose>
+                </td>
+              </tr>
+              <tr>
+                <td>Others</td>
+                <td>
+                  <xsl:if test="test_definition/environment/other = ''">
+                    N/A
+                  </xsl:if>
+                  <xsl:call-template name="br-replace">
+                    <xsl:with-param name="word" select="test_definition/environment/other"/>
+                  </xsl:call-template>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="summary">
+            <table>
+              <tr>
+                <th colspan="2">Test Summary</th>
+              </tr>
+              <tr>
+                <td>Test Plan Name</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/@test_plan_name"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Tests Total</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase)"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Passed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'PASS'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Failed</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'FAIL'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Block</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Test Not Run</td>
+                <td>
+                  <xsl:value-of select="count(test_definition//suite/set/testcase) - count(test_definition//suite/set/testcase[@result = 'PASS']) - count(test_definition//suite/set/testcase[@result = 'FAIL']) - count(test_definition//suite/set/testcase[@result = 'BLOCK'])"/>
+                </td>
+              </tr>
+              <tr>
+                <td>Start time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/start_at"/>
+                </td>
+              </tr>
+              <tr>
+                <td>End time</td>
+                <td>
+                  <xsl:value-of select="test_definition/summary/end_at"/>
+                </td>
+              </tr>
+            </table>
+          </div>
+          <div id="suite_summary">
+            <div id="title">
+              <a name="contents"/>
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1>Test Summary by Suite</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <table>
+              <tr>
+                <th>Suite</th>
+                <th>Passed</th>
+                <th>Failed</th>
+                <th>Blocked</th>
+                <th>Not Run</th>
+                <th>Total</th>
+              </tr>
+              <xsl:for-each select="test_definition/suite">
+                <xsl:sort select="@name"/>
+                <tr>
+                  <td>
+                    <a>
+                      <xsl:attribute name="href">
+                        #<xsl:value-of select="@name"/>
+                      </xsl:attribute>
+                      <xsl:value-of select="@name"/>
+                    </a>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'PASS'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'FAIL'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase) - count(set//testcase[@result = 'PASS']) - count(set//testcase[@result = 'FAIL']) - count(set//testcase[@result = 'BLOCK'])"/>
+                  </td>
+                  <td>
+                    <xsl:value-of select="count(set//testcase)"/>
+                  </td>
+                </tr>
+              </xsl:for-each>
+            </table>
+          </div>
+          <div id="fail_cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">
+                      Test Failures (
+                        <xsl:value-of select="count(test_definition/suite/set//testcase[@result = 'FAIL'])"/>
+                      )
+                    </h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <xsl:choose>
+                      <xsl:when test="@result">
+                        <xsl:if test="@result = 'FAIL'">
+                          <tr>
+                            <td>
+                              <xsl:value-of select="@id"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select="@purpose"/>
+                            </td>
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                            <td>
+                              <xsl:value-of select=".//result_info/stdout"/>
+                              <xsl:if test=".//result_info/stdout = ''">
+                                N/A
+                              </xsl:if>
+                            </td>
+                          </tr>
+                        </xsl:if>
+                      </xsl:when>
+                    </xsl:choose>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+          <div id="cases">
+            <div id="title">
+              <table>
+                <tr>
+                  <td class="title">
+                    <h1 align="center">Detailed Test Results</h1>
+                  </td>
+                </tr>
+              </table>
+            </div>
+            <xsl:for-each select="test_definition/suite">
+              <xsl:sort select="@name"/>
+              <div id="btc">
+                <a href="#contents">Back to Contents</a>
+              </div>
+              <div id="suite_title">
+                Test Suite:
+                <xsl:value-of select="@name"/>
+                <a><xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute></a>
+              </div>
+              <table>
+                <tr>
+                  <th>Case_ID</th>
+                  <th>Purpose</th>
+                  <th>Result</th>
+                  <th>Stdout</th>
+                </tr>
+                <xsl:for-each select=".//set">
+                  <xsl:sort select="@name"/>
+                  <tr>
+                    <td colspan="4">
+                      Test Set:
+                      <xsl:value-of select="@name"/>
+                    </td>
+                  </tr>
+                  <xsl:for-each select=".//testcase">
+                    <xsl:sort select="@id"/>
+                    <tr>
+                      <td>
+                        <xsl:value-of select="@id"/>
+                      </td>
+                      <td>
+                        <xsl:value-of select="@purpose"/>
+                      </td>
+                      <xsl:choose>
+                        <xsl:when test="@result">
+                          <xsl:if test="@result = 'FAIL'">
+                            <td class="red_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'PASS'">
+                            <td class="green_rate">
+                              <xsl:value-of select="@result"/>
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result = 'BLOCK' ">
+                            <td>
+                              BLOCK
+                            </td>
+                          </xsl:if>
+                          <xsl:if test="@result != 'BLOCK' and @result != 'FAIL' and @result != 'PASS' ">
+                            <td>
+                              Not Run
+                            </td>
+                          </xsl:if>
+                        </xsl:when>
+                        <xsl:otherwise>
+                          <td>
+                          </td>
+                        </xsl:otherwise>
+                      </xsl:choose>
+                      <td>
+                        <xsl:value-of select=".//result_info/stdout"/>
+                        <xsl:if test=".//result_info/stdout = ''">
+                          N/A
+                        </xsl:if>
+                      </td>
+                    </tr>
+                  </xsl:for-each>
+                </xsl:for-each>
+              </table>
+            </xsl:for-each>
+          </div>
+        </div>
+        <div id="goTopBtn">
+          <img border="0" src="./back_top.png"/>
+        </div>
+        <script type="text/javascript" src="application.js"/>
+        <script language="javascript" type="text/javascript">
+          $(document).ready(function(){
+            goTopEx();
+          });
+        </script>
+      </body>
+    </html>
+  </xsl:template>
+  <xsl:template name="br-replace">
+    <xsl:param name="word"/>
+    <xsl:variable name="cr">
+      <xsl:text>
+      </xsl:text>
+    </xsl:variable>
+    <xsl:choose>
+      <xsl:when test="contains($word,$cr)">
+        <xsl:value-of select="substring-before($word,$cr)"/>
+        <br/>
+        <xsl:call-template name="br-replace">
+          <xsl:with-param name="word" select="substring-after($word,$cr)"/>
+        </xsl:call-template>
+      </xsl:when>
+      <xsl:otherwise>
+        <xsl:value-of select="$word"/>
+      </xsl:otherwise>
+    </xsl:choose>
+  </xsl:template>
+</xsl:stylesheet>
diff --git a/wearable/tct-behavior-tests/tests.css b/wearable/tct-behavior-tests/tests.css
new file mode 100755 (executable)
index 0000000..c2ba69b
--- /dev/null
@@ -0,0 +1,132 @@
+@charset "UTF-8";\r
+/* CSS Document */\r
+#testcasepage div,\r
+#testcasepage h1,\r
+#testcasepage p,\r
+#testcasepage table,\r
+#testcasepage tr,\r
+#testcasepage th,\r
+#testcasepage td {\r
+  margin: 0;\r
+  padding: 0;\r
+  border: 0;\r
+  font-weight: inherit;\r
+  font-style: inherit;\r
+  font-size: 0.96em;\r
+  font-family: arial;\r
+  vertical-align: baseline;\r
+}\r
+\r
+#testcasepage p {\r
+  text-align: left;\r
+}\r
+\r
+#suite_title {\r
+  text-align: left;\r
+}\r
+\r
+#btc {\r
+  text-align: right;\r
+}\r
+\r
+#testcasepage table {\r
+  border-collapse: separate;\r
+  border-spacing: 0;\r
+  margin-bottom: 1.4em;\r
+  vertical-align: middle;\r
+}\r
+\r
+#testcasepage th,\r
+#testcasepage td {\r
+  text-align: left;\r
+  font-weight: normal;\r
+  padding: 4px 10px 4px 5px;\r
+  vertical-align: middle;\r
+}\r
+\r
+#cases table {\r
+  width: 101%;\r
+}\r
+\r
+#fail_cases table {\r
+  width: 101%;\r
+}\r
+\r
+#title table {\r
+  width: 101%;\r
+}\r
+\r
+#device table {\r
+  width: 50%;\r
+}\r
+\r
+#summary table {\r
+  width: 50%;\r
+}\r
+\r
+#testcasepage th {\r
+  border-bottom: 1px solid #000;\r
+  background-color: #AAAAAA;\r
+  border-left: 1px solid #000;\r
+  border-top: 1px solid #000;\r
+  color: #000;\r
+  font-weight: bold;\r
+  vertical-align: bottom;\r
+}\r
+\r
+#testcasepage th:last-child,\r
+#testcasepage td:last-child {\r
+  border-right: 1px solid #000;\r
+}\r
+\r
+#testcasepage td {\r
+  border-left: 1px solid;\r
+  font-weight: normal;\r
+  border-bottom: 1px solid;\r
+}\r
+\r
+#testcasepage td.yellow_rate {\r
+  background-color: #ffcc00;\r
+}\r
+\r
+#testcasepage td.green_rate {\r
+  background-color: #33cc33;\r
+}\r
+\r
+#testcasepage td.dgreen_rate {\r
+  background-color: #339933;\r
+}\r
+\r
+#testcasepage td.red_rate {\r
+  background-color: #FF3333;\r
+}\r
+\r
+#title table,\r
+#title tr,\r
+#title td {\r
+  border-left: none;\r
+  border-bottom: none;\r
+  text-align: center;\r
+}\r
+\r
+#title td:last-child {\r
+  border-right: none;\r
+}\r
+\r
+#testcasepage h1 {\r
+  font-size: 2em;\r
+  font-family: Arial, sans-serif;\r
+  font-weight: bold;\r
+  line-height: 1;\r
+  color: #000;\r
+  margin-bottom: 0.75em;\r
+  padding-top: 0.25em;\r
+  font-weight: bold;\r
+}\r
+\r
+#goTopBtn {\r
+  right: 0px;\r
+  bottom: 0px;\r
+  position: fixed; +position: absolute;\r
+  top: expression(parseInt(document.body.scrollTop) + document.body.clientHeight - 40);\r
+}\r
diff --git a/wearable/tct-behavior-tests/tests.full.xml b/wearable/tct-behavior-tests/tests.full.xml
new file mode 100755 (executable)
index 0000000..09298a7
--- /dev/null
@@ -0,0 +1,506 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase purpose="Media Playback Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="MediaPlayback">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="2D/3D Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="2D3DAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--
+      <testcase purpose="SVG Transformation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SVGTransformation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+      <testcase purpose="CSS Style Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSStyle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Animation Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSSAnimation">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Canvas Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="Canvas-PicRotaScaleTransfVampix">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSS Usage Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P1" id="CSS-AnimTransfBackgBordFont">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+<!--
+      <testcase purpose="Camera Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Camera">
+        <capability name="http://tizen.org/feature/camera"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+      <testcase purpose="Camera via UserMedia Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CameraViaUserMedia">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Vibration Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Vibration">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Accelerometer Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Accelerometer">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Gesture">
+<!--
+      <testcase purpose="Touch Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Touch">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+<!--      <testcase purpose="Viewport Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Viewport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase purpose="Page Visibility Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PageVisibility">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase purpose="Alarm Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Alarm">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControl">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="AppControl Extending Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="AppControlExtending">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Package Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Package">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="IME Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="IMEApplication">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+<!--
+    <set name="Content">
+      <testcase purpose="FileReader Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FileReader">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+-->
+    <set name="System">
+      <testcase purpose="Power Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Power">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="SystemInfo Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="SystemInfo">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Security Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Security">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="DeviceAPISecurity Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DeviceAPISecurity">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--
+      <testcase purpose="Full Screen Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="FullScreen">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+    </set>
+    <set name="Web Runtime">
+      <testcase purpose="ApplicationLifecycle Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationLifecycle">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Invisible Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ApplicationInvisible">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Dynamic Box Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="DynamicBox">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="CSP Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CSP">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Interface Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTUI">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Application Runtime Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="WRTSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--
+      <testcase purpose="Configuration Extension Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="ConfigurationExtension">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+      <testcase purpose="Package Management Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="PackageManagement">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="Stability Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="Stability">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase purpose="User Agent String Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="UserAgentString">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Cordova Support">
+      <testcase purpose="Cordova Support Test" type="functional_positive" status="approved" component="behavior" execution_type="manual" priority="P0" id="CordovaSupport">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/wearable/tct-behavior-tests/tests.xml b/wearable/tct-behavior-tests/tests.xml
new file mode 100755 (executable)
index 0000000..17d046c
--- /dev/null
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="./testcase.xsl"?>
+<test_definition>
+  <suite name="tct-behavior-tests">
+    <set name="Media and Animation">
+      <testcase component="behavior" execution_type="manual" id="MediaPlayback" purpose="Media Playback Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="2D3DAnimation" purpose="2D/3D Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--
+      <testcase component="behavior" execution_type="manual" id="SVGTransformation" purpose="SVG Transformation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+      <testcase component="behavior" execution_type="manual" id="CSSStyle" purpose="CSS Style Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSSAnimation" purpose="CSS Animation Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Canvas-PicRotaScaleTransfVampix" purpose="Canvas Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CSS-AnimTransfBackgBordFont" purpose="CSS Usage Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Hardware and Sensor">
+<!--      <testcase component="behavior" execution_type="manual" id="Camera" purpose="Camera Test">
+        <capability name="http://tizen.org/feature/media.audio_recording"/>
+        <capability name="http://tizen.org/feature/media.image_capture"/>
+        <capability name="http://tizen.org/feature/media.video_recording"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="CameraViaUserMedia" purpose="Camera via UserMedia Test">
+        <capability name="http://tizen.org/feature/camera.front"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Vibration" purpose="Vibration Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="Accelerometer" purpose="Accelerometer Test">
+        <capability name="http://tizen.org/feature/sensor.accelerometer"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+    </set>
+    <set name="Gesture">
+<!--
+      <testcase component="behavior" execution_type="manual" id="Touch" purpose="Touch Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+     <testcase component="behavior" execution_type="manual" id="Viewport" purpose="Viewport Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> 
+      <testcase component="behavior" execution_type="manual" id="PageVisibility" purpose="Page Visibility Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Application">
+      <testcase component="behavior" execution_type="manual" id="Alarm" purpose="Alarm Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase component="behavior" execution_type="manual" id="AppControl" purpose="AppControl Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="AppControlExtending" purpose="AppControl Extending Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Package" purpose="Package Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="IMEApplication" purpose="IME Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+<!--
+    <set name="Content">
+      <testcase component="behavior" execution_type="manual" id="FileReader" purpose="FileReader Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+-->
+    <set name="System">
+<!--      <testcase component="behavior" execution_type="manual" id="Power" purpose="Power Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="SystemInfo" purpose="SystemInfo Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Security" purpose="Security Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+   <!--   <testcase component="behavior" execution_type="manual" id="DeviceAPISecurity" purpose="DeviceAPISecurity Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+
+      <testcase component="behavior" execution_type="manual" id="FullScreen" purpose="Full Screen Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+    </set>
+    <set name="Web Runtime">
+<!--      <testcase component="behavior" execution_type="manual" id="ApplicationLifecycle" purpose="ApplicationLifecycle Test">
+        <description>
+          <pre_condition/>
+          <post_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="ApplicationInvisible" purpose="Application Invisible Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    <!--  <testcase component="behavior" execution_type="manual" id="DynamicBox" purpose="Dynamic Box Test">
+        <capability name="http://tizen.org/feature/shell.appwidget"/>
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+      <testcase component="behavior" execution_type="manual" id="CSP" purpose="CSP Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+<!--      <testcase component="behavior" execution_type="manual" id="WRTUI" purpose="User Interface Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--      <testcase component="behavior" execution_type="manual" id="WRTSupport" purpose="Application Runtime Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase> -->
+<!--
+      <testcase component="behavior" execution_type="manual" id="ConfigurationExtension" purpose="Configuration Extension Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+-->
+      <testcase component="behavior" execution_type="manual" id="PackageManagement" purpose="Package Management Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="Stability" purpose="Stability Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+      <testcase component="behavior" execution_type="manual" id="UserAgentString" purpose="User Agent String Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+    <set name="Cordova Support">
+      <testcase component="behavior" execution_type="manual" id="CordovaSupport" purpose="Cordova Support Test">
+        <description>
+          <pre_condition/>
+          <steps>
+            <step order="1">
+              <step_desc>0</step_desc>
+              <expected>0</expected>
+            </step>
+          </steps>
+          <test_script_entry test_script_expected_result="0"/>
+        </description>
+      </testcase>
+    </set>
+  </suite>
+</test_definition>
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/css/style.css b/wearable/tct-behavior-tests/tests/2D3DAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..4bd6a6c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 7px 0px;
+   width: 100%;
+}
+
+#viewArea {
+    width: 100%;
+    border: 1px solid black;
+}
+
+#mainTester {
+    position: relative;
+    width: 330px;
+    height: 300px;
+    margin: 0px auto;
+}
+
+.containing-element {padding-top: 20px;}
+
+.containing-element .ui-slider-switch { width: 100%;}
+
+.containing-element .ui-controlgroup-controls { width: 100%;}
+
+.ui-radio { width: 50%;}
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/index.html b/wearable/tct-behavior-tests/tests/2D3DAnimation/index.html
new file mode 100755 (executable)
index 0000000..2be6fc9
--- /dev/null
@@ -0,0 +1,130 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/SpinningBox.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+        <script src="js/khronos/webgl-utils.js"></script>
+        <script src="js/khronos/webgl-debug.js"></script>
+        <script src="js/khronos/J3DI.js"></script>
+        <script src="js/khronos/J3DIMath.js"></script>
+        <script id="vshader" type="x-shader/x-vertex">
+            uniform mat4 u_modelViewProjMatrix;
+            uniform mat4 u_normalMatrix;
+            uniform vec3 lightDir;
+
+            attribute vec3 vNormal;
+            attribute vec4 vColor;
+            attribute vec4 vPosition;
+
+            varying float v_Dot;
+            varying vec4 v_Color;
+
+            void main()
+            {
+            gl_Position = u_modelViewProjMatrix * vPosition;
+            v_Color = vColor;
+            vec4 transNormal = u_normalMatrix * vec4(vNormal, 1);
+            v_Dot = max(dot(transNormal.xyz, lightDir), 0.0);
+            }
+        </script>
+        <script id="fshader" type="x-shader/x-fragment">
+            precision mediump float;
+
+            varying float v_Dot;
+            varying vec4 v_Color;
+
+            void main()
+            {
+            gl_FragColor = vec4(v_Color.xyz * v_Dot, v_Color.a);
+            }
+        </script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role= "content">
+            <div id="viewArea">
+                <div id="mainTester">
+                    <canvas id="canvas" width="280" height="255">
+                        Not support the &lt;canvas&gt;&gt; element. Ouch! failed!
+                    </canvas>
+                </div>
+            </div>
+            <div class="containing-element">
+                <label for="flip-1">Status</label>
+                <select name="flip-1" id="flip-1" data-role="slider">
+                    <option value="paused">Pause</option>
+                    <option value="running" selected>Play</option>
+                </select>
+                <fieldset data-role="controlgroup" data-type="horizontal">
+                    <legend>Direction</legend>
+                    <input type="radio" name="radio-choice-2" id="direction-1" value="right" checked="checked" style="display:none" />
+                    <label for="direction-1">To-Right</label>
+                    <input type="radio" name="radio-choice-2" id="direction-2" value="left" style="display:none" />
+                    <label for="direction-2">To-Left</label>
+                </fieldset>
+                <label for="slider-1">Size</label>
+                <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="1" max="5" value="3" data-show-value="true" class="hideButton">
+                <label for="speed-1">Speed</label>
+                <input type="range" name="speed-1" id="speed-1" data-highlight="true" min="1" max="10" value="5" data-show-value="true" class="hideButton">
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the 3D cube is drawn with red, yellow, blue, green and light blue colors, rotate smoothly and correctly. And tests the functionality of play and pause, rotate direction left or right, size of the cube from 1 to 5, rotate speed from 1 to 10 levels.</p>
+                <p>Test Step: </p>
+                <ol>
+                    <li>Click the "Status" slider to play or pause the animation.</li>
+                    <li>Click the "Direction" buttons to change the rotation direction.</li>
+                    <li>Click the "Size" slider to change the animation size.</li>
+                    <li>Click the "Speed" slider to change the rotation speed.</li>
+                </ol>
+                <p>Expected Result: </p>
+                <p>Test passes if all the check points work well during rotation.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/COPYING b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..c009395
--- /dev/null
@@ -0,0 +1,94 @@
+The SpinningBox.js comes from
+https://github.com/KhronosGroup/WebGL
+with some modifications.
+
++    var incAngle = 0;
++    var currentAngle = 0;
++    var bakAngle = 0;
++    var viewDistance = 18;
++    var requestId;
++    var canvas;
+
+     function reshape(gl)
+     {
+-        var canvas = document.getElementById('example');
++        var canvas = document.getElementById('canvas');
+-        var windowWidth = window.innerWidth - 20;
+-        var windowHeight = window.innerHeight - 40;
+-        if (windowWidth == width && windowHeight == height)
+-            return;
+
+-        width = windowWidth;
+-        height = windowHeight;
+-        canvas.width = width;
+-        canvas.height = height;
+
+-        gl.viewport(0, 0, width, height);
++        gl.viewport(0, 0, canvas.width, canvas.height);
+         g.perspectiveMatrix = new J3DIMatrix4();
+-        g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
++        g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+-        g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
++        g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+
+The jquery extension code of main.js(line 251~376) comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
++            setSize(value);
++            if (parseInt(newValue, 10) != 3) {
++                testFlag.size = true;
++                checkEnable();
++            }
++        } else if (ID == "speed-1") {
++            setSpeed(parseInt(newValue, 10));
++            if (parseInt(newValue, 10) != 5) {
++                testFlag.speed = true;
++                checkEnable();
++            }
++        } else if (ID == "flip-1") {
++            if (newValue == "0") {
++                stop();
++                $("input[type='radio']").checkboxradio('disable');
++                $("#slider-1").slider('disable');
++                $("#speed-1").slider('disable');
++                testFlag.status = true;
++                checkEnable();
++            } else if (newValue == "1"){
++                if (!isInit) {
++                    reStart();
++                    $("input[type='radio']").checkboxradio('enable');
++                    $("#slider-1").slider('enable');
++                    $("#speed-1").slider('enable');
++                } else {
++                    isInit = false;
++                }
++            }
++        }
+
+        if ( o.popupEnabled ) {
+            this._positionPopup();
+-           this._popup.html( newValue );
++           this._popup.html( Math.round(newValue) );
+        }
+
+        if ( o.showValue ) {
+-           this._handleText.html( newValue );
++           this._handleText.html( Math.round(newValue) );
+        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
+
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/SpinningBox.js
new file mode 100755 (executable)
index 0000000..7494f86
--- /dev/null
@@ -0,0 +1,141 @@
+var g = {}; // globals
+
+var incAngle = 0;
+var currentAngle = 0;
+var bakAngle = 0;
+var viewDistance = 18;
+var requestId;
+
+var canvas;
+
+
+function init() {
+    // Initialize
+    var gl = initWebGL(
+        // The id of the Canvas Element
+        "canvas");
+    if (!gl) {
+        return;
+    }
+
+    g.program = simpleSetup(
+        gl,
+        // The ids of the vertex and fragment shaders
+        "vshader", "fshader",
+        // The vertex attribute names used by the shaders.
+        // The order they appear here corresponds to their index
+        // used later.
+        [ "vNormal", "vColor", "vPosition"],
+        // The clear color and depth values
+        [ 0, 0, 0, 1 ], 10000);
+
+    // Set up a uniform variable for the shaders
+    gl.uniform3f(gl.getUniformLocation(g.program, "lightDir"), 0, 0, 1);
+
+    // Create a box. On return 'gl' contains a 'box' property with
+    // the BufferObjects containing the arrays for vertices,
+    // normals, texture coords, and indices.
+    g.box = makeBox(gl);
+
+    // Set up the array of colors for the cube's faces
+    var colors = new Uint8Array(
+        [  0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,   0, 0, 1, 1,     // v0-v1-v2-v3 front
+        1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,   1, 0, 0, 1,     // v0-v3-v4-v5 right
+        0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,   0, 1, 0, 1,     // v0-v5-v6-v1 top
+        1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,   1, 1, 0, 1,     // v1-v6-v7-v2 left
+        1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,   1, 0, 1, 1,     // v7-v4-v3-v2 bottom
+        0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1,   0, 1, 1, 1 ]    // v4-v7-v6-v5 back
+        );
+
+    // Set up the vertex buffer for the colors
+    g.box.colorObject = gl.createBuffer();
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW);
+
+    // Create some matrices to use later and save their locations in the shaders
+    g.mvMatrix = new J3DIMatrix4();
+    g.u_normalMatrixLoc = gl.getUniformLocation(g.program, "u_normalMatrix");
+    g.normalMatrix = new J3DIMatrix4();
+    g.u_modelViewProjMatrixLoc =
+    gl.getUniformLocation(g.program, "u_modelViewProjMatrix");
+    g.mvpMatrix = new J3DIMatrix4();
+
+    // Enable all of the vertex attribute arrays.
+    gl.enableVertexAttribArray(0);
+    gl.enableVertexAttribArray(1);
+    gl.enableVertexAttribArray(2);
+
+    // Set up all the vertex attributes for vertices, normals and colors
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.vertexObject);
+    gl.vertexAttribPointer(2, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.normalObject);
+    gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
+
+    gl.bindBuffer(gl.ARRAY_BUFFER, g.box.colorObject);
+    gl.vertexAttribPointer(1, 4, gl.UNSIGNED_BYTE, false, 0, 0);
+
+    // Bind the index array
+    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, g.box.indexObject);
+
+    return gl;
+}
+
+//width = -1;
+//height = -1;
+//var requestId;
+
+function reshape(gl) {
+    //var canvas = document.getElementById('example');
+    var canvas = document.getElementById('canvas');
+    //var windowWidth = window.innerWidth - 20;
+    //var windowHeight = window.innerHeight - 40;
+    //if (windowWidth == width && windowHeight == height)
+    //    return;
+
+    //width = windowWidth;
+    //height = windowHeight;
+    //canvas.width = width;
+    //canvas.height = height;
+
+    // Set the viewport and projection matrix for the scene
+    //gl.viewport(0, 0, width, height);
+    gl.viewport(0, 0, canvas.width, canvas.height);
+    g.perspectiveMatrix = new J3DIMatrix4();
+    //g.perspectiveMatrix.perspective(30, width/height, 1, 10000);
+    g.perspectiveMatrix.perspective(30, canvas.width/canvas.height, 1, 10000);
+    //g.perspectiveMatrix.lookat(0, 0, 7, 0, 0, 0, 0, 1, 0);
+    g.perspectiveMatrix.lookat(0, 0, viewDistance, 0, 0, 0, 0, 1, 0);
+}
+
+function drawPicture(gl) {
+    // Make sure the canvas is sized correctly.
+    reshape(gl);
+
+    gl.clearColor(1.0, 1.0, 1.0, 1.0);
+    // Clear the canvas
+    gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+
+    // Make a model/view matrix.
+    g.mvMatrix.makeIdentity();
+    g.mvMatrix.rotate(20, 1, 0, 0);
+    g.mvMatrix.rotate(currentAngle, 0, 1, 0);
+
+    // Construct the normal matrix from the model-view matrix and pass it in
+    g.normalMatrix.load(g.mvMatrix);
+    g.normalMatrix.invert();
+    g.normalMatrix.transpose();
+    g.normalMatrix.setUniform(gl, g.u_normalMatrixLoc, false);
+
+    // Construct the model-view * projection matrix and pass it in
+    g.mvpMatrix.load(g.perspectiveMatrix);
+    g.mvpMatrix.multiply(g.mvMatrix);
+    g.mvpMatrix.setUniform(gl, g.u_modelViewProjMatrixLoc, false);
+
+    // Draw the cube
+    gl.drawElements(gl.TRIANGLES, g.box.numIndices, gl.UNSIGNED_BYTE, 0);
+
+    currentAngle += incAngle;
+    if (currentAngle > 360)
+    currentAngle -= 360;
+}
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/COPYING
new file mode 100755 (executable)
index 0000000..5b85dfd
--- /dev/null
@@ -0,0 +1,26 @@
+The files come from https://www.khronos.org/registry/webgl/sdk/demos/webkit/resources/
+
+
+These tests are copyright by the Khronos Group under MIT License:
+https://www.khronos.org/registry/webgl/sdk/tests/test-guidelines.md
+
+Copyright (c) 2012 The Khronos Group Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and/or associated documentation files (the
+"Materials"), to deal in the Materials without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Materials, and to
+permit persons to whom the Materials are furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Materials.
+
+THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DI.js
new file mode 100755 (executable)
index 0000000..597417b
--- /dev/null
@@ -0,0 +1,606 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+//
+// initWebGL
+//
+// Initialize the Canvas element with the passed name as a WebGL object and return the
+// WebGLRenderingContext.
+function initWebGL(canvasName, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    var canvas = document.getElementById(canvasName);
+    return gl = WebGLUtils.setupWebGL(canvas);
+}
+
+function log(msg) {
+    if (window.console && window.console.log) {
+        window.console.log(msg);
+    }
+}
+
+// Load shaders with the passed names and create a program with them. Return this program
+// in the 'program' property of the returned context.
+//
+// For each string in the passed attribs array, bind an attrib with that name at that index.
+// Once the attribs are bound, link the program and then use it.
+//
+// Set the clear color to the passed array (4 values) and set the clear depth to the passed value.
+// Enable depth testing and blending with a blend func of (SRC_ALPHA, ONE_MINUS_SRC_ALPHA)
+//
+// A console function is added to the context: console(string). This can be replaced
+// by the caller. By default, it maps to the window.console() function on WebKit and to
+// an empty function on other browsers.
+//
+function simpleSetup(gl, vshader, fshader, attribs, clearColor, clearDepth)
+{
+    // create our shaders
+    var vertexShader = loadShader(gl, vshader);
+    var fragmentShader = loadShader(gl, fshader);
+
+    // Create the program object
+    var program = gl.createProgram();
+
+    // Attach our two shaders to the program
+    gl.attachShader (program, vertexShader);
+    gl.attachShader (program, fragmentShader);
+
+    // Bind attributes
+    for (var i = 0; i < attribs.length; ++i)
+        gl.bindAttribLocation (program, i, attribs[i]);
+
+    // Link the program
+    gl.linkProgram(program);
+
+    // Check the link status
+    var linked = gl.getProgramParameter(program, gl.LINK_STATUS);
+    if (!linked && !gl.isContextLost()) {
+        // something went wrong with the link
+        var error = gl.getProgramInfoLog (program);
+        log("Error in program linking:"+error);
+
+        gl.deleteProgram(program);
+        gl.deleteProgram(fragmentShader);
+        gl.deleteProgram(vertexShader);
+
+        return null;
+    }
+
+    gl.useProgram(program);
+
+    gl.clearColor(clearColor[0], clearColor[1], clearColor[2], clearColor[3]);
+    gl.clearDepth(clearDepth);
+
+    gl.enable(gl.DEPTH_TEST);
+    gl.enable(gl.BLEND);
+    gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
+
+    return program;
+}
+
+//
+// loadShader
+//
+// 'shaderId' is the id of a <script> element containing the shader source string.
+// Load this shader and return the WebGLShader object corresponding to it.
+//
+function loadShader(ctx, shaderId)
+{
+    var shaderScript = document.getElementById(shaderId);
+    if (!shaderScript) {
+        log("*** Error: shader script '"+shaderId+"' not found");
+        return null;
+    }
+
+    if (shaderScript.type == "x-shader/x-vertex")
+        var shaderType = ctx.VERTEX_SHADER;
+    else if (shaderScript.type == "x-shader/x-fragment")
+        var shaderType = ctx.FRAGMENT_SHADER;
+    else {
+        log("*** Error: shader script '"+shaderId+"' of undefined type '"+shaderScript.type+"'");
+        return null;
+    }
+
+    // Create the shader object
+    var shader = ctx.createShader(shaderType);
+
+    // Load the shader source
+    ctx.shaderSource(shader, shaderScript.text);
+
+    // Compile the shader
+    ctx.compileShader(shader);
+
+    // Check the compile status
+    var compiled = ctx.getShaderParameter(shader, ctx.COMPILE_STATUS);
+    if (!compiled && !ctx.isContextLost()) {
+        // Something went wrong during compilation; get the error
+        var error = ctx.getShaderInfoLog(shader);
+        log("*** Error compiling shader '"+shaderId+"':"+error);
+        ctx.deleteShader(shader);
+        return null;
+    }
+
+    return shader;
+}
+
+//
+// makeBox
+//
+// Create a box with vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeBox(ctx)
+{
+    // box
+    //    v6----- v5
+    //   /|      /|
+    //  v1------v0|
+    //  | |     | |
+    //  | |v7---|-|v4
+    //  |/      |/
+    //  v2------v3
+    //
+    // vertex coords array
+    var vertices = new Float32Array(
+        [  1, 1, 1,  -1, 1, 1,  -1,-1, 1,   1,-1, 1,    // v0-v1-v2-v3 front
+           1, 1, 1,   1,-1, 1,   1,-1,-1,   1, 1,-1,    // v0-v3-v4-v5 right
+           1, 1, 1,   1, 1,-1,  -1, 1,-1,  -1, 1, 1,    // v0-v5-v6-v1 top
+          -1, 1, 1,  -1, 1,-1,  -1,-1,-1,  -1,-1, 1,    // v1-v6-v7-v2 left
+          -1,-1,-1,   1,-1,-1,   1,-1, 1,  -1,-1, 1,    // v7-v4-v3-v2 bottom
+           1,-1,-1,  -1,-1,-1,  -1, 1,-1,   1, 1,-1 ]   // v4-v7-v6-v5 back
+    );
+
+    // normal array
+    var normals = new Float32Array(
+        [  0, 0, 1,   0, 0, 1,   0, 0, 1,   0, 0, 1,     // v0-v1-v2-v3 front
+           1, 0, 0,   1, 0, 0,   1, 0, 0,   1, 0, 0,     // v0-v3-v4-v5 right
+           0, 1, 0,   0, 1, 0,   0, 1, 0,   0, 1, 0,     // v0-v5-v6-v1 top
+          -1, 0, 0,  -1, 0, 0,  -1, 0, 0,  -1, 0, 0,     // v1-v6-v7-v2 left
+           0,-1, 0,   0,-1, 0,   0,-1, 0,   0,-1, 0,     // v7-v4-v3-v2 bottom
+           0, 0,-1,   0, 0,-1,   0, 0,-1,   0, 0,-1 ]    // v4-v7-v6-v5 back
+       );
+
+
+    // texCoord array
+    var texCoords = new Float32Array(
+        [  1, 1,   0, 1,   0, 0,   1, 0,    // v0-v1-v2-v3 front
+           0, 1,   0, 0,   1, 0,   1, 1,    // v0-v3-v4-v5 right
+           1, 0,   1, 1,   0, 1,   0, 0,    // v0-v5-v6-v1 top
+           1, 1,   0, 1,   0, 0,   1, 0,    // v1-v6-v7-v2 left
+           0, 0,   1, 0,   1, 1,   0, 1,    // v7-v4-v3-v2 bottom
+           0, 0,   1, 0,   1, 1,   0, 1 ]   // v4-v7-v6-v5 back
+       );
+
+    // index array
+    var indices = new Uint8Array(
+        [  0, 1, 2,   0, 2, 3,    // front
+           4, 5, 6,   4, 6, 7,    // right
+           8, 9,10,   8,10,11,    // top
+          12,13,14,  12,14,15,    // left
+          16,17,18,  16,18,19,    // bottom
+          20,21,22,  20,22,23 ]   // back
+      );
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, normals, ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, texCoords, ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, vertices, ctx.STATIC_DRAW);
+
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, indices, ctx.STATIC_DRAW);
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+
+    retval.numIndices = indices.length;
+
+    return retval;
+}
+
+//
+// makeSphere
+//
+// Create a sphere with the passed number of latitude and longitude bands and the passed radius.
+// Sphere has vertices, normals and texCoords. Create VBOs for each as well as the index array.
+// Return an object with the following properties:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function makeSphere(ctx, radius, lats, longs)
+{
+    var geometryData = [ ];
+    var normalData = [ ];
+    var texCoordData = [ ];
+    var indexData = [ ];
+
+    for (var latNumber = 0; latNumber <= lats; ++latNumber) {
+        for (var longNumber = 0; longNumber <= longs; ++longNumber) {
+            var theta = latNumber * Math.PI / lats;
+            var phi = longNumber * 2 * Math.PI / longs;
+            var sinTheta = Math.sin(theta);
+            var sinPhi = Math.sin(phi);
+            var cosTheta = Math.cos(theta);
+            var cosPhi = Math.cos(phi);
+
+            var x = cosPhi * sinTheta;
+            var y = cosTheta;
+            var z = sinPhi * sinTheta;
+            var u = 1-(longNumber/longs);
+            var v = latNumber/lats;
+
+            normalData.push(x);
+            normalData.push(y);
+            normalData.push(z);
+            texCoordData.push(u);
+            texCoordData.push(v);
+            geometryData.push(radius * x);
+            geometryData.push(radius * y);
+            geometryData.push(radius * z);
+        }
+    }
+
+    for (var latNumber = 0; latNumber < lats; ++latNumber) {
+        for (var longNumber = 0; longNumber < longs; ++longNumber) {
+            var first = (latNumber * (longs+1)) + longNumber;
+            var second = first + longs + 1;
+            indexData.push(first);
+            indexData.push(second);
+            indexData.push(first+1);
+
+            indexData.push(second);
+            indexData.push(second+1);
+            indexData.push(first+1);
+        }
+    }
+
+    var retval = { };
+
+    retval.normalObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.normalObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(normalData), ctx.STATIC_DRAW);
+
+    retval.texCoordObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.texCoordObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(texCoordData), ctx.STATIC_DRAW);
+
+    retval.vertexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ARRAY_BUFFER, retval.vertexObject);
+    ctx.bufferData(ctx.ARRAY_BUFFER, new Float32Array(geometryData), ctx.STATIC_DRAW);
+
+    retval.numIndices = indexData.length;
+    retval.indexObject = ctx.createBuffer();
+    ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, retval.indexObject);
+    ctx.bufferData(ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexData), ctx.STREAM_DRAW);
+
+    return retval;
+}
+
+// Array of Objects curently loading
+var g_loadingObjects = [];
+
+// Clears all the Objects currently loading.
+// This is used to handle context lost events.
+function clearLoadingObjects() {
+    for (var ii = 0; ii < g_loadingObjects.length; ++ii) {
+        g_loadingObjects[ii].onreadystatechange = undefined;
+    }
+    g_loadingObjects = [];
+}
+
+//
+// loadObj
+//
+// Load a .obj file from the passed URL. Return an object with a 'loaded' property set to false.
+// When the object load is complete, the 'loaded' property becomes true and the following
+// properties are set:
+//
+//  normalObject        WebGLBuffer object for normals
+//  texCoordObject      WebGLBuffer object for texCoords
+//  vertexObject        WebGLBuffer object for vertices
+//  indexObject         WebGLBuffer object for indices
+//  numIndices          The number of indices in the indexObject
+//
+function loadObj(ctx, url)
+{
+    var obj = { loaded : false };
+    obj.ctx = ctx;
+    var req = new XMLHttpRequest();
+    req.obj = obj;
+    g_loadingObjects.push(req);
+    req.onreadystatechange = function () { processLoadObj(req) };
+    req.open("GET", url, true);
+    req.send(null);
+    return obj;
+}
+
+function processLoadObj(req)
+{
+    log("req="+req)
+    // only if req shows "complete"
+    if (req.readyState == 4) {
+        g_loadingObjects.splice(g_loadingObjects.indexOf(req), 1);
+        doLoadObj(req.obj, req.responseText);
+    }
+}
+
+function doLoadObj(obj, text)
+{
+    vertexArray = [ ];
+    normalArray = [ ];
+    textureArray = [ ];
+    indexArray = [ ];
+
+    var vertex = [ ];
+    var normal = [ ];
+    var texture = [ ];
+    var facemap = { };
+    var index = 0;
+
+    // This is a map which associates a range of indices with a name
+    // The name comes from the 'g' tag (of the form "g NAME"). Indices
+    // are part of one group until another 'g' tag is seen. If any indices
+    // come before a 'g' tag, it is given the group name "_unnamed"
+    // 'group' is an object whose property names are the group name and
+    // whose value is a 2 element array with [<first index>, <num indices>]
+    var groups = { };
+    var currentGroup = [-1, 0];
+    groups["_unnamed"] = currentGroup;
+
+    var lines = text.split("\n");
+    for (var lineIndex in lines) {
+        var line = lines[lineIndex].replace(/[ \t]+/g, " ").replace(/\s\s*$/, "");
+
+        // ignore comments
+        if (line[0] == "#")
+            continue;
+
+        var array = line.split(" ");
+        if (array[0] == "g") {
+            // new group
+            currentGroup = [indexArray.length, 0];
+            groups[array[1]] = currentGroup;
+        }
+        else if (array[0] == "v") {
+            // vertex
+            vertex.push(parseFloat(array[1]));
+            vertex.push(parseFloat(array[2]));
+            vertex.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "vt") {
+            // normal
+            texture.push(parseFloat(array[1]));
+            texture.push(parseFloat(array[2]));
+        }
+        else if (array[0] == "vn") {
+            // normal
+            normal.push(parseFloat(array[1]));
+            normal.push(parseFloat(array[2]));
+            normal.push(parseFloat(array[3]));
+        }
+        else if (array[0] == "f") {
+            // face
+            if (array.length != 4) {
+                log("*** Error: face '"+line+"' not handled");
+                continue;
+            }
+
+            for (var i = 1; i < 4; ++i) {
+                if (!(array[i] in facemap)) {
+                    // add a new entry to the map and arrays
+                    var f = array[i].split("/");
+                    var vtx, nor, tex;
+
+                    if (f.length == 1) {
+                        vtx = parseInt(f[0]) - 1;
+                        nor = vtx;
+                        tex = vtx;
+                    }
+                    else if (f.length = 3) {
+                        vtx = parseInt(f[0]) - 1;
+                        tex = parseInt(f[1]) - 1;
+                        nor = parseInt(f[2]) - 1;
+                    }
+                    else {
+                        obj.ctx.console.log("*** Error: did not understand face '"+array[i]+"'");
+                        return null;
+                    }
+
+                    // do the vertices
+                    var x = 0;
+                    var y = 0;
+                    var z = 0;
+                    if (vtx * 3 + 2 < vertex.length) {
+                        x = vertex[vtx*3];
+                        y = vertex[vtx*3+1];
+                        z = vertex[vtx*3+2];
+                    }
+                    vertexArray.push(x);
+                    vertexArray.push(y);
+                    vertexArray.push(z);
+
+                    // do the textures
+                    x = 0;
+                    y = 0;
+                    if (tex * 2 + 1 < texture.length) {
+                        x = texture[tex*2];
+                        y = texture[tex*2+1];
+                    }
+                    textureArray.push(x);
+                    textureArray.push(y);
+
+                    // do the normals
+                    x = 0;
+                    y = 0;
+                    z = 1;
+                    if (nor * 3 + 2 < normal.length) {
+                        x = normal[nor*3];
+                        y = normal[nor*3+1];
+                        z = normal[nor*3+2];
+                    }
+                    normalArray.push(x);
+                    normalArray.push(y);
+                    normalArray.push(z);
+
+                    facemap[array[i]] = index++;
+                }
+
+                indexArray.push(facemap[array[i]]);
+                currentGroup[1]++;
+            }
+        }
+    }
+
+    // set the VBOs
+    obj.normalObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.normalObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(normalArray), obj.ctx.STATIC_DRAW);
+
+    obj.texCoordObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.texCoordObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(textureArray), obj.ctx.STATIC_DRAW);
+
+    obj.vertexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ARRAY_BUFFER, obj.vertexObject);
+    obj.ctx.bufferData(obj.ctx.ARRAY_BUFFER, new Float32Array(vertexArray), obj.ctx.STATIC_DRAW);
+
+    obj.numIndices = indexArray.length;
+    obj.indexObject = obj.ctx.createBuffer();
+    obj.ctx.bindBuffer(obj.ctx.ELEMENT_ARRAY_BUFFER, obj.indexObject);
+    obj.ctx.bufferData(obj.ctx.ELEMENT_ARRAY_BUFFER, new Uint16Array(indexArray), obj.ctx.STREAM_DRAW);
+
+    obj.groups = groups;
+
+    obj.loaded = true;
+}
+
+// Array of images curently loading
+var g_loadingImages = [];
+
+// Clears all the images currently loading.
+// This is used to handle context lost events.
+function clearLoadingImages() {
+    for (var ii = 0; ii < g_loadingImages.length; ++ii) {
+        g_loadingImages[ii].onload = undefined;
+    }
+    g_loadingImages = [];
+}
+
+//
+// loadImageTexture
+//
+// Load the image at the passed url, place it in a new WebGLTexture object and return the WebGLTexture.
+//
+function loadImageTexture(ctx, url)
+{
+    var texture = ctx.createTexture();
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(ctx.TEXTURE_2D, 0, ctx.RGBA, 1, 1, 0, ctx.RGBA, ctx.UNSIGNED_BYTE, null);
+    var image = new Image();
+    g_loadingImages.push(image);
+    image.onload = function() { doLoadImageTexture(ctx, image, texture) }
+    image.src = url;
+    return texture;
+}
+
+function doLoadImageTexture(ctx, image, texture)
+{
+    g_loadingImages.splice(g_loadingImages.indexOf(image), 1);
+    ctx.bindTexture(ctx.TEXTURE_2D, texture);
+    ctx.texImage2D(
+        ctx.TEXTURE_2D, 0, ctx.RGBA, ctx.RGBA, ctx.UNSIGNED_BYTE, image);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MAG_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_MIN_FILTER, ctx.LINEAR);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_S, ctx.CLAMP_TO_EDGE);
+    ctx.texParameteri(ctx.TEXTURE_2D, ctx.TEXTURE_WRAP_T, ctx.CLAMP_TO_EDGE);
+    //ctx.generateMipmap(ctx.TEXTURE_2D)
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+}
+
+//
+// Framerate object
+//
+// This object keeps track of framerate and displays it as the innerHTML text of the
+// HTML element with the passed id. Once created you call snapshot at the end
+// of every rendering cycle. Every 500ms the framerate is updated in the HTML element.
+//
+Framerate = function(id)
+{
+    this.numFramerates = 10;
+    this.framerateUpdateInterval = 500;
+    this.id = id;
+
+    this.renderTime = -1;
+    this.framerates = [ ];
+    self = this;
+    var fr = function() { self.updateFramerate() }
+    setInterval(fr, this.framerateUpdateInterval);
+}
+
+Framerate.prototype.updateFramerate = function()
+{
+    var tot = 0;
+    for (var i = 0; i < this.framerates.length; ++i)
+        tot += this.framerates[i];
+
+    var framerate = tot / this.framerates.length;
+    framerate = Math.round(framerate);
+    document.getElementById(this.id).innerHTML = "Framerate:"+framerate+"fps";
+}
+
+Framerate.prototype.snapshot = function()
+{
+    if (this.renderTime < 0)
+        this.renderTime = new Date().getTime();
+    else {
+        var newTime = new Date().getTime();
+        var t = newTime - this.renderTime;
+        if (t == 0)
+            return;
+        var framerate = 1000/t;
+        this.framerates.push(framerate);
+        while (this.framerates.length > this.numFramerates)
+            this.framerates.shift();
+        this.renderTime = newTime;
+    }
+}
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/J3DIMath.js
new file mode 100755 (executable)
index 0000000..b3e5b64
--- /dev/null
@@ -0,0 +1,1065 @@
+/*
+ * Copyright (C) 2009 Apple Inc. All Rights Reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ // J3DI (Jedi) - A support library for WebGL.
+
+/*
+    J3DI Math Classes. Currently includes:
+
+        J3DIMatrix4 - A 4x4 Matrix
+*/
+
+/*
+    J3DIMatrix4 class
+
+    This class implements a 4x4 matrix. It has functions which duplicate the
+    functionality of the OpenGL matrix stack and glut functions. On browsers
+    that support it, CSSMatrix is used to accelerate operations.
+
+    IDL:
+
+    [
+        Constructor(in J3DIMatrix4 matrix),                 // copy passed matrix into new J3DIMatrix4
+        Constructor(in sequence<float> array)               // create new J3DIMatrix4 with 16 floats (row major)
+        Constructor()                                       // create new J3DIMatrix4 with identity matrix
+    ]
+    interface J3DIMatrix4 {
+        void load(in J3DIMatrix4 matrix);                   // copy the values from the passed matrix
+        void load(in sequence<float> array);                // copy 16 floats into the matrix
+        sequence<float> getAsArray();                       // return the matrix as an array of 16 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void setUniform(in WebGLRenderingContext ctx,       // Send the matrix to the passed uniform location in the passed context
+                        in WebGLUniformLocation loc,
+                        in boolean transpose);
+        void makeIdentity();                                // replace the matrix with identity
+        void transpose();                                   // replace the matrix with its transpose
+        void invert();                                      // replace the matrix with its inverse
+
+        void translate(in float x, in float y, in float z); // multiply the matrix by passed translation values on the right
+        void translate(in J3DVector3 v);                    // multiply the matrix by passed translation values on the right
+        void scale(in float x, in float y, in float z);     // multiply the matrix by passed scale values on the right
+        void scale(in J3DVector3 v);                        // multiply the matrix by passed scale values on the right
+        void rotate(in float angle,                         // multiply the matrix by passed rotation values on the right
+                    in float x, in float y, in float z);    // (angle is in degrees)
+        void rotate(in float angle, in J3DVector3 v);       // multiply the matrix by passed rotation values on the right
+                                                            // (angle is in degrees)
+        void multiply(in CanvasMatrix matrix);              // multiply the matrix by the passed matrix on the right
+        void divide(in float divisor);                      // divide the matrix by the passed divisor
+        void ortho(in float left, in float right,           // multiply the matrix by the passed ortho values on the right
+                   in float bottom, in float top,
+                   in float near, in float far);
+        void frustum(in float left, in float right,         // multiply the matrix by the passed frustum values on the right
+                     in float bottom, in float top,
+                     in float near, in float far);
+        void perspective(in float fovy, in float aspect,    // multiply the matrix by the passed perspective values on the right
+                         in float zNear, in float zFar);
+        void lookat(in J3DVector3 eye,                      // multiply the matrix by the passed lookat
+                in J3DVector3 center,  in J3DVector3 up);   // values on the right
+         bool decompose(in J3DVector3 translate,            // decompose the matrix into the passed vector
+                        in J3DVector3 rotate,
+                        in J3DVector3 scale,
+                        in J3DVector3 skew,
+                        in sequence<float> perspective);
+    }
+
+    [
+        Constructor(in J3DVector3 vector),                  // copy passed vector into new J3DVector3
+        Constructor(in sequence<float> array)               // create new J3DVector3 with 3 floats from array
+        Constructor(in float x, in float y, in float z)     // create new J3DVector3 with 3 floats
+        Constructor()                                       // create new J3DVector3 with (0,0,0)
+    ]
+    interface J3DVector3 {
+        void load(in J3DVector3 vector);                    // copy the values from the passed vector
+        void load(in sequence<float> array);                // copy 3 floats into the vector from array
+        void load(in float x, in float y, in float z);      // copy 3 floats into the vector
+        sequence<float> getAsArray();                       // return the vector as an array of 3 floats
+        Float32Array getAsFloat32Array();             // return the matrix as a Float32Array with 16 values
+        void multMatrix(in J3DIMatrix4 matrix);             // multiply the vector by the passed matrix (on the right)
+        float vectorLength();                               // return the length of the vector
+        float dot();                                        // return the dot product of the vector
+        void cross(in J3DVector3 v);                        // replace the vector with vector x v
+        void divide(in float divisor);                      // divide the vector by the passed divisor
+    }
+*/
+
+J3DIHasCSSMatrix = false;
+J3DIHasCSSMatrixCopy = false;
+/*
+if ("WebKitCSSMatrix" in window && ("media" in window && window.media.matchMedium("(-webkit-transform-3d)")) ||
+                                   ("styleMedia" in window && window.styleMedia.matchMedium("(-webkit-transform-3d)"))) {
+    J3DIHasCSSMatrix = true;
+    if ("copy" in WebKitCSSMatrix.prototype)
+        J3DIHasCSSMatrixCopy = true;
+}
+*/
+
+//  console.log("J3DIHasCSSMatrix="+J3DIHasCSSMatrix);
+//  console.log("J3DIHasCSSMatrixCopy="+J3DIHasCSSMatrixCopy);
+
+//
+// J3DIMatrix4
+//
+J3DIMatrix4 = function(m)
+{
+    if (J3DIHasCSSMatrix)
+        this.$matrix = new WebKitCSSMatrix;
+    else
+        this.$matrix = new Object;
+
+    if (typeof m == 'object') {
+        if ("length" in m && m.length >= 16) {
+            this.load(m);
+            return;
+        }
+        else if (m instanceof J3DIMatrix4) {
+            this.load(m);
+            return;
+        }
+    }
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.load = function()
+{
+    if (arguments.length == 1 && typeof arguments[0] == 'object') {
+        var matrix;
+
+        if (arguments[0] instanceof J3DIMatrix4) {
+            matrix = arguments[0].$matrix;
+
+            this.$matrix.m11 = matrix.m11;
+            this.$matrix.m12 = matrix.m12;
+            this.$matrix.m13 = matrix.m13;
+            this.$matrix.m14 = matrix.m14;
+
+            this.$matrix.m21 = matrix.m21;
+            this.$matrix.m22 = matrix.m22;
+            this.$matrix.m23 = matrix.m23;
+            this.$matrix.m24 = matrix.m24;
+
+            this.$matrix.m31 = matrix.m31;
+            this.$matrix.m32 = matrix.m32;
+            this.$matrix.m33 = matrix.m33;
+            this.$matrix.m34 = matrix.m34;
+
+            this.$matrix.m41 = matrix.m41;
+            this.$matrix.m42 = matrix.m42;
+            this.$matrix.m43 = matrix.m43;
+            this.$matrix.m44 = matrix.m44;
+            return;
+        }
+        else
+            matrix = arguments[0];
+
+        if ("length" in matrix && matrix.length >= 16) {
+            this.$matrix.m11 = matrix[0];
+            this.$matrix.m12 = matrix[1];
+            this.$matrix.m13 = matrix[2];
+            this.$matrix.m14 = matrix[3];
+
+            this.$matrix.m21 = matrix[4];
+            this.$matrix.m22 = matrix[5];
+            this.$matrix.m23 = matrix[6];
+            this.$matrix.m24 = matrix[7];
+
+            this.$matrix.m31 = matrix[8];
+            this.$matrix.m32 = matrix[9];
+            this.$matrix.m33 = matrix[10];
+            this.$matrix.m34 = matrix[11];
+
+            this.$matrix.m41 = matrix[12];
+            this.$matrix.m42 = matrix[13];
+            this.$matrix.m43 = matrix[14];
+            this.$matrix.m44 = matrix[15];
+            return;
+        }
+    }
+
+    this.makeIdentity();
+}
+
+J3DIMatrix4.prototype.getAsArray = function()
+{
+    return [
+        this.$matrix.m11, this.$matrix.m12, this.$matrix.m13, this.$matrix.m14,
+        this.$matrix.m21, this.$matrix.m22, this.$matrix.m23, this.$matrix.m24,
+        this.$matrix.m31, this.$matrix.m32, this.$matrix.m33, this.$matrix.m34,
+        this.$matrix.m41, this.$matrix.m42, this.$matrix.m43, this.$matrix.m44
+    ];
+}
+
+J3DIMatrix4.prototype.getAsFloat32Array = function()
+{
+    if (J3DIHasCSSMatrixCopy) {
+        var array = new Float32Array(16);
+        this.$matrix.copy(array);
+        return array;
+    }
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIMatrix4.prototype.setUniform = function(ctx, loc, transpose)
+{
+    if (J3DIMatrix4.setUniformArray == undefined) {
+        J3DIMatrix4.setUniformWebGLArray = new Float32Array(16);
+        J3DIMatrix4.setUniformArray = new Array(16);
+    }
+
+    if (J3DIHasCSSMatrixCopy)
+        this.$matrix.copy(J3DIMatrix4.setUniformWebGLArray);
+    else {
+        J3DIMatrix4.setUniformArray[0] = this.$matrix.m11;
+        J3DIMatrix4.setUniformArray[1] = this.$matrix.m12;
+        J3DIMatrix4.setUniformArray[2] = this.$matrix.m13;
+        J3DIMatrix4.setUniformArray[3] = this.$matrix.m14;
+        J3DIMatrix4.setUniformArray[4] = this.$matrix.m21;
+        J3DIMatrix4.setUniformArray[5] = this.$matrix.m22;
+        J3DIMatrix4.setUniformArray[6] = this.$matrix.m23;
+        J3DIMatrix4.setUniformArray[7] = this.$matrix.m24;
+        J3DIMatrix4.setUniformArray[8] = this.$matrix.m31;
+        J3DIMatrix4.setUniformArray[9] = this.$matrix.m32;
+        J3DIMatrix4.setUniformArray[10] = this.$matrix.m33;
+        J3DIMatrix4.setUniformArray[11] = this.$matrix.m34;
+        J3DIMatrix4.setUniformArray[12] = this.$matrix.m41;
+        J3DIMatrix4.setUniformArray[13] = this.$matrix.m42;
+        J3DIMatrix4.setUniformArray[14] = this.$matrix.m43;
+        J3DIMatrix4.setUniformArray[15] = this.$matrix.m44;
+
+        J3DIMatrix4.setUniformWebGLArray.set(J3DIMatrix4.setUniformArray);
+    }
+
+    ctx.uniformMatrix4fv(loc, transpose, J3DIMatrix4.setUniformWebGLArray);
+}
+
+J3DIMatrix4.prototype.makeIdentity = function()
+{
+    this.$matrix.m11 = 1;
+    this.$matrix.m12 = 0;
+    this.$matrix.m13 = 0;
+    this.$matrix.m14 = 0;
+
+    this.$matrix.m21 = 0;
+    this.$matrix.m22 = 1;
+    this.$matrix.m23 = 0;
+    this.$matrix.m24 = 0;
+
+    this.$matrix.m31 = 0;
+    this.$matrix.m32 = 0;
+    this.$matrix.m33 = 1;
+    this.$matrix.m34 = 0;
+
+    this.$matrix.m41 = 0;
+    this.$matrix.m42 = 0;
+    this.$matrix.m43 = 0;
+    this.$matrix.m44 = 1;
+}
+
+J3DIMatrix4.prototype.transpose = function()
+{
+    var tmp = this.$matrix.m12;
+    this.$matrix.m12 = this.$matrix.m21;
+    this.$matrix.m21 = tmp;
+
+    tmp = this.$matrix.m13;
+    this.$matrix.m13 = this.$matrix.m31;
+    this.$matrix.m31 = tmp;
+
+    tmp = this.$matrix.m14;
+    this.$matrix.m14 = this.$matrix.m41;
+    this.$matrix.m41 = tmp;
+
+    tmp = this.$matrix.m23;
+    this.$matrix.m23 = this.$matrix.m32;
+    this.$matrix.m32 = tmp;
+
+    tmp = this.$matrix.m24;
+    this.$matrix.m24 = this.$matrix.m42;
+    this.$matrix.m42 = tmp;
+
+    tmp = this.$matrix.m34;
+    this.$matrix.m34 = this.$matrix.m43;
+    this.$matrix.m43 = tmp;
+}
+
+J3DIMatrix4.prototype.invert = function()
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.inverse();
+        return;
+    }
+
+    // Calculate the 4x4 determinant
+    // If the determinant is zero,
+    // then the inverse matrix is not unique.
+    var det = this._determinant4x4();
+
+    if (Math.abs(det) < 1e-8)
+        return null;
+
+    this._makeAdjoint();
+
+    // Scale the adjoint matrix to get the inverse
+    this.$matrix.m11 /= det;
+    this.$matrix.m12 /= det;
+    this.$matrix.m13 /= det;
+    this.$matrix.m14 /= det;
+
+    this.$matrix.m21 /= det;
+    this.$matrix.m22 /= det;
+    this.$matrix.m23 /= det;
+    this.$matrix.m24 /= det;
+
+    this.$matrix.m31 /= det;
+    this.$matrix.m32 /= det;
+    this.$matrix.m33 /= det;
+    this.$matrix.m34 /= det;
+
+    this.$matrix.m41 /= det;
+    this.$matrix.m42 /= det;
+    this.$matrix.m43 /= det;
+    this.$matrix.m44 /= det;
+}
+
+J3DIMatrix4.prototype.translate = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 0;
+        if (y == undefined)
+            y = 0;
+        if (z == undefined)
+            z = 0;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.translate(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m41 = x;
+    matrix.$matrix.m42 = y;
+    matrix.$matrix.m43 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.scale = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (x == undefined)
+            x = 1;
+        if (z == undefined) {
+            if (y == undefined) {
+                y = x;
+                z = x;
+            }
+            else
+                z = 1;
+        }
+        else if (y == undefined)
+            y = x;
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.scale(x, y, z);
+        return;
+    }
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = x;
+    matrix.$matrix.m22 = y;
+    matrix.$matrix.m33 = z;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.rotate = function(angle,x,y,z)
+{
+    // Forms are (angle, x,y,z), (angle,vector), (angleX, angleY, angleZ), (angle)
+    if (typeof x == 'object' && "length" in x) {
+        var t = x;
+        x = t[0];
+        y = t[1];
+        z = t[2];
+    }
+    else {
+        if (arguments.length == 1) {
+            x = 0;
+            y = 0;
+            z = 1;
+        }
+        else if (arguments.length == 3) {
+            this.rotate(angle, 1,0,0); // about X axis
+            this.rotate(x, 0,1,0); // about Y axis
+            this.rotate(y, 0,0,1); // about Z axis
+            return;
+        }
+    }
+
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.rotateAxisAngle(x, y, z, angle);
+        return;
+    }
+
+    // angles are in degrees. Switch to radians
+    angle = angle / 180 * Math.PI;
+
+    angle /= 2;
+    var sinA = Math.sin(angle);
+    var cosA = Math.cos(angle);
+    var sinA2 = sinA * sinA;
+
+    // normalize
+    var len = Math.sqrt(x * x + y * y + z * z);
+    if (len == 0) {
+        // bad vector, just use something reasonable
+        x = 0;
+        y = 0;
+        z = 1;
+    } else if (len != 1) {
+        x /= len;
+        y /= len;
+        z /= len;
+    }
+
+    var mat = new J3DIMatrix4();
+
+    // optimize case where axis is along major axis
+    if (x == 1 && y == 0 && z == 0) {
+        mat.$matrix.m11 = 1;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 2 * sinA * cosA;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = -2 * sinA * cosA;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 1 && z == 0) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 0;
+        mat.$matrix.m13 = -2 * sinA * cosA;
+        mat.$matrix.m21 = 0;
+        mat.$matrix.m22 = 1;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 2 * sinA * cosA;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1 - 2 * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else if (x == 0 && y == 0 && z == 1) {
+        mat.$matrix.m11 = 1 - 2 * sinA2;
+        mat.$matrix.m12 = 2 * sinA * cosA;
+        mat.$matrix.m13 = 0;
+        mat.$matrix.m21 = -2 * sinA * cosA;
+        mat.$matrix.m22 = 1 - 2 * sinA2;
+        mat.$matrix.m23 = 0;
+        mat.$matrix.m31 = 0;
+        mat.$matrix.m32 = 0;
+        mat.$matrix.m33 = 1;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    } else {
+        var x2 = x*x;
+        var y2 = y*y;
+        var z2 = z*z;
+
+        mat.$matrix.m11 = 1 - 2 * (y2 + z2) * sinA2;
+        mat.$matrix.m12 = 2 * (x * y * sinA2 + z * sinA * cosA);
+        mat.$matrix.m13 = 2 * (x * z * sinA2 - y * sinA * cosA);
+        mat.$matrix.m21 = 2 * (y * x * sinA2 - z * sinA * cosA);
+        mat.$matrix.m22 = 1 - 2 * (z2 + x2) * sinA2;
+        mat.$matrix.m23 = 2 * (y * z * sinA2 + x * sinA * cosA);
+        mat.$matrix.m31 = 2 * (z * x * sinA2 + y * sinA * cosA);
+        mat.$matrix.m32 = 2 * (z * y * sinA2 - x * sinA * cosA);
+        mat.$matrix.m33 = 1 - 2 * (x2 + y2) * sinA2;
+        mat.$matrix.m14 = mat.$matrix.m24 = mat.$matrix.m34 = 0;
+        mat.$matrix.m41 = mat.$matrix.m42 = mat.$matrix.m43 = 0;
+        mat.$matrix.m44 = 1;
+    }
+    this.multiply(mat);
+}
+
+J3DIMatrix4.prototype.multiply = function(mat)
+{
+    if (J3DIHasCSSMatrix) {
+        this.$matrix = this.$matrix.multiply(mat.$matrix);
+        return;
+    }
+
+    var m11 = (mat.$matrix.m11 * this.$matrix.m11 + mat.$matrix.m12 * this.$matrix.m21
+               + mat.$matrix.m13 * this.$matrix.m31 + mat.$matrix.m14 * this.$matrix.m41);
+    var m12 = (mat.$matrix.m11 * this.$matrix.m12 + mat.$matrix.m12 * this.$matrix.m22
+               + mat.$matrix.m13 * this.$matrix.m32 + mat.$matrix.m14 * this.$matrix.m42);
+    var m13 = (mat.$matrix.m11 * this.$matrix.m13 + mat.$matrix.m12 * this.$matrix.m23
+               + mat.$matrix.m13 * this.$matrix.m33 + mat.$matrix.m14 * this.$matrix.m43);
+    var m14 = (mat.$matrix.m11 * this.$matrix.m14 + mat.$matrix.m12 * this.$matrix.m24
+               + mat.$matrix.m13 * this.$matrix.m34 + mat.$matrix.m14 * this.$matrix.m44);
+
+    var m21 = (mat.$matrix.m21 * this.$matrix.m11 + mat.$matrix.m22 * this.$matrix.m21
+               + mat.$matrix.m23 * this.$matrix.m31 + mat.$matrix.m24 * this.$matrix.m41);
+    var m22 = (mat.$matrix.m21 * this.$matrix.m12 + mat.$matrix.m22 * this.$matrix.m22
+               + mat.$matrix.m23 * this.$matrix.m32 + mat.$matrix.m24 * this.$matrix.m42);
+    var m23 = (mat.$matrix.m21 * this.$matrix.m13 + mat.$matrix.m22 * this.$matrix.m23
+               + mat.$matrix.m23 * this.$matrix.m33 + mat.$matrix.m24 * this.$matrix.m43);
+    var m24 = (mat.$matrix.m21 * this.$matrix.m14 + mat.$matrix.m22 * this.$matrix.m24
+               + mat.$matrix.m23 * this.$matrix.m34 + mat.$matrix.m24 * this.$matrix.m44);
+
+    var m31 = (mat.$matrix.m31 * this.$matrix.m11 + mat.$matrix.m32 * this.$matrix.m21
+               + mat.$matrix.m33 * this.$matrix.m31 + mat.$matrix.m34 * this.$matrix.m41);
+    var m32 = (mat.$matrix.m31 * this.$matrix.m12 + mat.$matrix.m32 * this.$matrix.m22
+               + mat.$matrix.m33 * this.$matrix.m32 + mat.$matrix.m34 * this.$matrix.m42);
+    var m33 = (mat.$matrix.m31 * this.$matrix.m13 + mat.$matrix.m32 * this.$matrix.m23
+               + mat.$matrix.m33 * this.$matrix.m33 + mat.$matrix.m34 * this.$matrix.m43);
+    var m34 = (mat.$matrix.m31 * this.$matrix.m14 + mat.$matrix.m32 * this.$matrix.m24
+               + mat.$matrix.m33 * this.$matrix.m34 + mat.$matrix.m34 * this.$matrix.m44);
+
+    var m41 = (mat.$matrix.m41 * this.$matrix.m11 + mat.$matrix.m42 * this.$matrix.m21
+               + mat.$matrix.m43 * this.$matrix.m31 + mat.$matrix.m44 * this.$matrix.m41);
+    var m42 = (mat.$matrix.m41 * this.$matrix.m12 + mat.$matrix.m42 * this.$matrix.m22
+               + mat.$matrix.m43 * this.$matrix.m32 + mat.$matrix.m44 * this.$matrix.m42);
+    var m43 = (mat.$matrix.m41 * this.$matrix.m13 + mat.$matrix.m42 * this.$matrix.m23
+               + mat.$matrix.m43 * this.$matrix.m33 + mat.$matrix.m44 * this.$matrix.m43);
+    var m44 = (mat.$matrix.m41 * this.$matrix.m14 + mat.$matrix.m42 * this.$matrix.m24
+               + mat.$matrix.m43 * this.$matrix.m34 + mat.$matrix.m44 * this.$matrix.m44);
+
+    this.$matrix.m11 = m11;
+    this.$matrix.m12 = m12;
+    this.$matrix.m13 = m13;
+    this.$matrix.m14 = m14;
+
+    this.$matrix.m21 = m21;
+    this.$matrix.m22 = m22;
+    this.$matrix.m23 = m23;
+    this.$matrix.m24 = m24;
+
+    this.$matrix.m31 = m31;
+    this.$matrix.m32 = m32;
+    this.$matrix.m33 = m33;
+    this.$matrix.m34 = m34;
+
+    this.$matrix.m41 = m41;
+    this.$matrix.m42 = m42;
+    this.$matrix.m43 = m43;
+    this.$matrix.m44 = m44;
+}
+
+J3DIMatrix4.prototype.divide = function(divisor)
+{
+    this.$matrix.m11 /= divisor;
+    this.$matrix.m12 /= divisor;
+    this.$matrix.m13 /= divisor;
+    this.$matrix.m14 /= divisor;
+
+    this.$matrix.m21 /= divisor;
+    this.$matrix.m22 /= divisor;
+    this.$matrix.m23 /= divisor;
+    this.$matrix.m24 /= divisor;
+
+    this.$matrix.m31 /= divisor;
+    this.$matrix.m32 /= divisor;
+    this.$matrix.m33 /= divisor;
+    this.$matrix.m34 /= divisor;
+
+    this.$matrix.m41 /= divisor;
+    this.$matrix.m42 /= divisor;
+    this.$matrix.m43 /= divisor;
+    this.$matrix.m44 /= divisor;
+
+}
+
+J3DIMatrix4.prototype.ortho = function(left, right, bottom, top, near, far)
+{
+    var tx = (left + right) / (left - right);
+    var ty = (top + bottom) / (top - bottom);
+    var tz = (far + near) / (far - near);
+
+    var matrix = new J3DIMatrix4();
+    matrix.$matrix.m11 = 2 / (left - right);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+    matrix.$matrix.m31 = 0;
+    matrix.$matrix.m32 = 0;
+    matrix.$matrix.m33 = -2 / (far - near);
+    matrix.$matrix.m34 = 0;
+    matrix.$matrix.m41 = tx;
+    matrix.$matrix.m42 = ty;
+    matrix.$matrix.m43 = tz;
+    matrix.$matrix.m44 = 1;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.frustum = function(left, right, bottom, top, near, far)
+{
+    var matrix = new J3DIMatrix4();
+    var A = (right + left) / (right - left);
+    var B = (top + bottom) / (top - bottom);
+    var C = -(far + near) / (far - near);
+    var D = -(2 * far * near) / (far - near);
+
+    matrix.$matrix.m11 = (2 * near) / (right - left);
+    matrix.$matrix.m12 = 0;
+    matrix.$matrix.m13 = 0;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = 0;
+    matrix.$matrix.m22 = 2 * near / (top - bottom);
+    matrix.$matrix.m23 = 0;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = A;
+    matrix.$matrix.m32 = B;
+    matrix.$matrix.m33 = C;
+    matrix.$matrix.m34 = -1;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = D;
+    matrix.$matrix.m44 = 0;
+
+    this.multiply(matrix);
+}
+
+J3DIMatrix4.prototype.perspective = function(fovy, aspect, zNear, zFar)
+{
+    var top = Math.tan(fovy * Math.PI / 360) * zNear;
+    var bottom = -top;
+    var left = aspect * bottom;
+    var right = aspect * top;
+    this.frustum(left, right, bottom, top, zNear, zFar);
+}
+
+J3DIMatrix4.prototype.lookat = function(eyex, eyey, eyez, centerx, centery, centerz, upx, upy, upz)
+{
+    if (typeof eyez == 'object' && "length" in eyez) {
+        var t = eyez;
+        upx = t[0];
+        upy = t[1];
+        upz = t[2];
+
+        t = eyey;
+        centerx = t[0];
+        centery = t[1];
+        centerz = t[2];
+
+        t = eyex;
+        eyex = t[0];
+        eyey = t[1];
+        eyez = t[2];
+    }
+
+    var matrix = new J3DIMatrix4();
+
+    // Make rotation matrix
+
+    // Z vector
+    var zx = eyex - centerx;
+    var zy = eyey - centery;
+    var zz = eyez - centerz;
+    var mag = Math.sqrt(zx * zx + zy * zy + zz * zz);
+    if (mag) {
+        zx /= mag;
+        zy /= mag;
+        zz /= mag;
+    }
+
+    // Y vector
+    var yx = upx;
+    var yy = upy;
+    var yz = upz;
+
+    // X vector = Y cross Z
+    xx =  yy * zz - yz * zy;
+    xy = -yx * zz + yz * zx;
+    xz =  yx * zy - yy * zx;
+
+    // Recompute Y = Z cross X
+    yx = zy * xz - zz * xy;
+    yy = -zx * xz + zz * xx;
+    yx = zx * xy - zy * xx;
+
+    // cross product gives area of parallelogram, which is < 1.0 for
+    // non-perpendicular unit-length vectors; so normalize x, y here
+
+    mag = Math.sqrt(xx * xx + xy * xy + xz * xz);
+    if (mag) {
+        xx /= mag;
+        xy /= mag;
+        xz /= mag;
+    }
+
+    mag = Math.sqrt(yx * yx + yy * yy + yz * yz);
+    if (mag) {
+        yx /= mag;
+        yy /= mag;
+        yz /= mag;
+    }
+
+    matrix.$matrix.m11 = xx;
+    matrix.$matrix.m12 = xy;
+    matrix.$matrix.m13 = xz;
+    matrix.$matrix.m14 = 0;
+
+    matrix.$matrix.m21 = yx;
+    matrix.$matrix.m22 = yy;
+    matrix.$matrix.m23 = yz;
+    matrix.$matrix.m24 = 0;
+
+    matrix.$matrix.m31 = zx;
+    matrix.$matrix.m32 = zy;
+    matrix.$matrix.m33 = zz;
+    matrix.$matrix.m34 = 0;
+
+    matrix.$matrix.m41 = 0;
+    matrix.$matrix.m42 = 0;
+    matrix.$matrix.m43 = 0;
+    matrix.$matrix.m44 = 1;
+    matrix.translate(-eyex, -eyey, -eyez);
+
+    this.multiply(matrix);
+}
+
+// Returns true on success, false otherwise. All params are Array objects
+J3DIMatrix4.prototype.decompose = function(_translate, _rotate, _scale, _skew, _perspective)
+{
+    // Normalize the matrix.
+    if (this.$matrix.m44 == 0)
+        return false;
+
+    // Gather the params
+    var translate, rotate, scale, skew, perspective;
+
+    var translate = (_translate == undefined || !("length" in _translate)) ? new J3DIVector3 : _translate;
+    var rotate = (_rotate == undefined || !("length" in _rotate)) ? new J3DIVector3 : _rotate;
+    var scale = (_scale == undefined || !("length" in _scale)) ? new J3DIVector3 : _scale;
+    var skew = (_skew == undefined || !("length" in _skew)) ? new J3DIVector3 : _skew;
+    var perspective = (_perspective == undefined || !("length" in _perspective)) ? new Array(4) : _perspective;
+
+    var matrix = new J3DIMatrix4(this);
+
+    matrix.divide(matrix.$matrix.m44);
+
+    // perspectiveMatrix is used to solve for perspective, but it also provides
+    // an easy way to test for singularity of the upper 3x3 component.
+    var perspectiveMatrix = new J3DIMatrix4(matrix);
+
+    perspectiveMatrix.$matrix.m14 = 0;
+    perspectiveMatrix.$matrix.m24 = 0;
+    perspectiveMatrix.$matrix.m34 = 0;
+    perspectiveMatrix.$matrix.m44 = 1;
+
+    if (perspectiveMatrix._determinant4x4() == 0)
+        return false;
+
+    // First, isolate perspective.
+    if (matrix.$matrix.m14 != 0 || matrix.$matrix.m24 != 0 || matrix.$matrix.m34 != 0) {
+        // rightHandSide is the right hand side of the equation.
+        var rightHandSide = [ matrix.$matrix.m14, matrix.$matrix.m24, matrix.$matrix.m34, matrix.$matrix.m44 ];
+
+        // Solve the equation by inverting perspectiveMatrix and multiplying
+        // rightHandSide by the inverse.
+        var inversePerspectiveMatrix = new J3DIMatrix4(perspectiveMatrix);
+        inversePerspectiveMatrix.invert();
+        var transposedInversePerspectiveMatrix = new J3DIMatrix4(inversePerspectiveMatrix);
+        transposedInversePerspectiveMatrix.transpose();
+        transposedInversePerspectiveMatrix.multVecMatrix(perspective, rightHandSide);
+
+        // Clear the perspective partition
+        matrix.$matrix.m14 = matrix.$matrix.m24 = matrix.$matrix.m34 = 0
+        matrix.$matrix.m44 = 1;
+    }
+    else {
+        // No perspective.
+        perspective[0] = perspective[1] = perspective[2] = 0;
+        perspective[3] = 1;
+    }
+
+    // Next take care of translation
+    translate[0] = matrix.$matrix.m41
+    matrix.$matrix.m41 = 0
+    translate[1] = matrix.$matrix.m42
+    matrix.$matrix.m42 = 0
+    translate[2] = matrix.$matrix.m43
+    matrix.$matrix.m43 = 0
+
+    // Now get scale and shear. 'row' is a 3 element array of 3 component vectors
+    var row0 = new J3DIVector3(matrix.$matrix.m11, matrix.$matrix.m12, matrix.$matrix.m13);
+    var row1 = new J3DIVector3(matrix.$matrix.m21, matrix.$matrix.m22, matrix.$matrix.m23);
+    var row2 = new J3DIVector3(matrix.$matrix.m31, matrix.$matrix.m32, matrix.$matrix.m33);
+
+    // Compute X scale factor and normalize first row.
+    scale[0] = row0.vectorLength();
+    row0.divide(scale[0]);
+
+    // Compute XY shear factor and make 2nd row orthogonal to 1st.
+    skew[0] = row0.dot(row1);
+    row1.combine(row0, 1.0, -skew[0]);
+
+    // Now, compute Y scale and normalize 2nd row.
+    scale[1] = row1.vectorLength();
+    row1.divide(scale[1]);
+    skew[0] /= scale[1];
+
+    // Compute XZ and YZ shears, orthogonalize 3rd row
+    skew[1] = row1.dot(row2);
+    row2.combine(row0, 1.0, -skew[1]);
+    skew[2] = row1.dot(row2);
+    row2.combine(row1, 1.0, -skew[2]);
+
+    // Next, get Z scale and normalize 3rd row.
+    scale[2] = row2.vectorLength();
+    row2.divide(scale[2]);
+    skew[1] /= scale[2];
+    skew[2] /= scale[2];
+
+    // At this point, the matrix (in rows) is orthonormal.
+    // Check for a coordinate system flip.  If the determinant
+    // is -1, then negate the matrix and the scaling factors.
+    var pdum3 = new J3DIVector3(row1);
+    pdum3.cross(row2);
+    if (row0.dot(pdum3) < 0) {
+        for (i = 0; i < 3; i++) {
+            scale[i] *= -1;
+            row[0][i] *= -1;
+            row[1][i] *= -1;
+            row[2][i] *= -1;
+        }
+    }
+
+    // Now, get the rotations out
+    rotate[1] = Math.asin(-row0[2]);
+    if (Math.cos(rotate[1]) != 0) {
+        rotate[0] = Math.atan2(row1[2], row2[2]);
+        rotate[2] = Math.atan2(row0[1], row0[0]);
+    }
+    else {
+        rotate[0] = Math.atan2(-row2[0], row1[1]);
+        rotate[2] = 0;
+    }
+
+    // Convert rotations to degrees
+    var rad2deg = 180 / Math.PI;
+    rotate[0] *= rad2deg;
+    rotate[1] *= rad2deg;
+    rotate[2] *= rad2deg;
+
+    return true;
+}
+
+J3DIMatrix4.prototype._determinant2x2 = function(a, b, c, d)
+{
+    return a * d - b * c;
+}
+
+J3DIMatrix4.prototype._determinant3x3 = function(a1, a2, a3, b1, b2, b3, c1, c2, c3)
+{
+    return a1 * this._determinant2x2(b2, b3, c2, c3)
+         - b1 * this._determinant2x2(a2, a3, c2, c3)
+         + c1 * this._determinant2x2(a2, a3, b2, b3);
+}
+
+J3DIMatrix4.prototype._determinant4x4 = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    return a1 * this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4)
+         - b1 * this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4)
+         + c1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4)
+         - d1 * this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+}
+
+J3DIMatrix4.prototype._makeAdjoint = function()
+{
+    var a1 = this.$matrix.m11;
+    var b1 = this.$matrix.m12;
+    var c1 = this.$matrix.m13;
+    var d1 = this.$matrix.m14;
+
+    var a2 = this.$matrix.m21;
+    var b2 = this.$matrix.m22;
+    var c2 = this.$matrix.m23;
+    var d2 = this.$matrix.m24;
+
+    var a3 = this.$matrix.m31;
+    var b3 = this.$matrix.m32;
+    var c3 = this.$matrix.m33;
+    var d3 = this.$matrix.m34;
+
+    var a4 = this.$matrix.m41;
+    var b4 = this.$matrix.m42;
+    var c4 = this.$matrix.m43;
+    var d4 = this.$matrix.m44;
+
+    // Row column labeling reversed since we transpose rows & columns
+    this.$matrix.m11  =   this._determinant3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m21  = - this._determinant3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4);
+    this.$matrix.m31  =   this._determinant3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4);
+    this.$matrix.m41  = - this._determinant3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
+
+    this.$matrix.m12  = - this._determinant3x3(b1, b3, b4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m22  =   this._determinant3x3(a1, a3, a4, c1, c3, c4, d1, d3, d4);
+    this.$matrix.m32  = - this._determinant3x3(a1, a3, a4, b1, b3, b4, d1, d3, d4);
+    this.$matrix.m42  =   this._determinant3x3(a1, a3, a4, b1, b3, b4, c1, c3, c4);
+
+    this.$matrix.m13  =   this._determinant3x3(b1, b2, b4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m23  = - this._determinant3x3(a1, a2, a4, c1, c2, c4, d1, d2, d4);
+    this.$matrix.m33  =   this._determinant3x3(a1, a2, a4, b1, b2, b4, d1, d2, d4);
+    this.$matrix.m43  = - this._determinant3x3(a1, a2, a4, b1, b2, b4, c1, c2, c4);
+
+    this.$matrix.m14  = - this._determinant3x3(b1, b2, b3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m24  =   this._determinant3x3(a1, a2, a3, c1, c2, c3, d1, d2, d3);
+    this.$matrix.m34  = - this._determinant3x3(a1, a2, a3, b1, b2, b3, d1, d2, d3);
+    this.$matrix.m44  =   this._determinant3x3(a1, a2, a3, b1, b2, b3, c1, c2, c3);
+}
+
+//
+// J3DIVector3
+//
+J3DIVector3 = function(x,y,z)
+{
+    this.load(x,y,z);
+}
+
+J3DIVector3.prototype.load = function(x,y,z)
+{
+    if (typeof x == 'object' && "length" in x) {
+        this[0] = x[0];
+        this[1] = x[1];
+        this[2] = x[2];
+    }
+    else if (typeof x == 'number') {
+        this[0] = x;
+        this[1] = y;
+        this[2] = z;
+    }
+    else {
+        this[0] = 0;
+        this[1] = 0;
+        this[2] = 0;
+    }
+}
+
+J3DIVector3.prototype.getAsArray = function()
+{
+    return [ this[0], this[1], this[2] ];
+}
+
+J3DIVector3.prototype.getAsFloat32Array = function()
+{
+    return new Float32Array(this.getAsArray());
+}
+
+J3DIVector3.prototype.vectorLength = function()
+{
+    return Math.sqrt(this[0] * this[0] + this[1] * this[1] + this[2] * this[2]);
+}
+
+J3DIVector3.prototype.divide = function(divisor)
+{
+    this[0] /= divisor; this[1] /= divisor; this[2] /= divisor;
+}
+
+J3DIVector3.prototype.cross = function(v)
+{
+    this[0] =  this[1] * v[2] - this[2] * v[1];
+    this[1] = -this[0] * v[2] + this[2] * v[0];
+    this[2] =  this[0] * v[1] - this[1] * v[0];
+}
+
+J3DIVector3.prototype.dot = function(v)
+{
+    return this[0] * v[0] + this[1] * v[1] + this[2] * v[2];
+}
+
+J3DIVector3.prototype.combine = function(v, ascl, bscl)
+{
+    this[0] = (ascl * this[0]) + (bscl * v[0]);
+    this[1] = (ascl * this[1]) + (bscl * v[1]);
+    this[2] = (ascl * this[2]) + (bscl * v[2]);
+}
+
+J3DIVector3.prototype.multVecMatrix = function(matrix)
+{
+    var x = this[0];
+    var y = this[1];
+    var z = this[2];
+
+    this[0] = matrix.$matrix.m41 + x * matrix.$matrix.m11 + y * matrix.$matrix.m21 + z * matrix.$matrix.m31;
+    this[1] = matrix.$matrix.m42 + x * matrix.$matrix.m12 + y * matrix.$matrix.m22 + z * matrix.$matrix.m32;
+    this[2] = matrix.$matrix.m43 + x * matrix.$matrix.m13 + y * matrix.$matrix.m23 + z * matrix.$matrix.m33;
+    var w = matrix.$matrix.m44 + x * matrix.$matrix.m14 + y * matrix.$matrix.m24 + z * matrix.$matrix.m34;
+    if (w != 1 && w != 0) {
+        this[0] /= w;
+        this[1] /= w;
+        this[2] /= w;
+    }
+}
+
+J3DIVector3.prototype.toString = function()
+{
+    return "["+this[0]+","+this[1]+","+this[2]+"]";
+}
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-debug.js
new file mode 100755 (executable)
index 0000000..26a8872
--- /dev/null
@@ -0,0 +1,875 @@
+/*
+** Copyright (c) 2012 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a
+** copy of this software and/or associated documentation files (the
+** "Materials"), to deal in the Materials without restriction, including
+** without limitation the rights to use, copy, modify, merge, publish,
+** distribute, sublicense, and/or sell copies of the Materials, and to
+** permit persons to whom the Materials are furnished to do so, subject to
+** the following conditions:
+**
+** The above copyright notice and this permission notice shall be included
+** in all copies or substantial portions of the Materials.
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+*/
+
+// Various functions for helping debug WebGL apps.
+
+WebGLDebugUtils = function() {
+
+/**
+ * Wrapped logging function.
+ * @param {string} msg Message to log.
+ */
+var log = function(msg) {
+  if (window.console && window.console.log) {
+    window.console.log(msg);
+  }
+};
+
+/**
+ * Wrapped error logging function.
+ * @param {string} msg Message to log.
+ */
+var error = function(msg) {
+  if (window.console && window.console.error) {
+    window.console.error(msg);
+  } else {
+    log(msg);
+  }
+};
+
+/**
+ * Which arguements are enums.
+ * @type {!Object.<number, string>}
+ */
+var glValidEnumContexts = {
+
+  // Generic setters and getters
+
+  'enable': { 0:true },
+  'disable': { 0:true },
+  'getParameter': { 0:true },
+
+  // Rendering
+
+  'drawArrays': { 0:true },
+  'drawElements': { 0:true, 2:true },
+
+  // Shaders
+
+  'createShader': { 0:true },
+  'getShaderParameter': { 1:true },
+  'getProgramParameter': { 1:true },
+
+  // Vertex attributes
+
+  'getVertexAttrib': { 1:true },
+  'vertexAttribPointer': { 2:true },
+
+  // Textures
+
+  'bindTexture': { 0:true },
+  'activeTexture': { 0:true },
+  'getTexParameter': { 0:true, 1:true },
+  'texParameterf': { 0:true, 1:true },
+  'texParameteri': { 0:true, 1:true, 2:true },
+  'texImage2D': { 0:true, 2:true, 6:true, 7:true },
+  'texSubImage2D': { 0:true, 6:true, 7:true },
+  'copyTexImage2D': { 0:true, 2:true },
+  'copyTexSubImage2D': { 0:true },
+  'generateMipmap': { 0:true },
+
+  // Buffer objects
+
+  'bindBuffer': { 0:true },
+  'bufferData': { 0:true, 2:true },
+  'bufferSubData': { 0:true },
+  'getBufferParameter': { 0:true, 1:true },
+
+  // Renderbuffers and framebuffers
+
+  'pixelStorei': { 0:true, 1:true },
+  'readPixels': { 4:true, 5:true },
+  'bindRenderbuffer': { 0:true },
+  'bindFramebuffer': { 0:true },
+  'checkFramebufferStatus': { 0:true },
+  'framebufferRenderbuffer': { 0:true, 1:true, 2:true },
+  'framebufferTexture2D': { 0:true, 1:true, 2:true },
+  'getFramebufferAttachmentParameter': { 0:true, 1:true, 2:true },
+  'getRenderbufferParameter': { 0:true, 1:true },
+  'renderbufferStorage': { 0:true, 1:true },
+
+  // Frame buffer operations (clear, blend, depth test, stencil)
+
+  'clear': { 0:true },
+  'depthFunc': { 0:true },
+  'blendFunc': { 0:true, 1:true },
+  'blendFuncSeparate': { 0:true, 1:true, 2:true, 3:true },
+  'blendEquation': { 0:true },
+  'blendEquationSeparate': { 0:true, 1:true },
+  'stencilFunc': { 0:true },
+  'stencilFuncSeparate': { 0:true, 1:true },
+  'stencilMaskSeparate': { 0:true },
+  'stencilOp': { 0:true, 1:true, 2:true },
+  'stencilOpSeparate': { 0:true, 1:true, 2:true, 3:true },
+
+  // Culling
+
+  'cullFace': { 0:true },
+  'frontFace': { 0:true },
+};
+
+/**
+ * Map of numbers to names.
+ * @type {Object}
+ */
+var glEnums = null;
+
+/**
+ * Initializes this module. Safe to call more than once.
+ * @param {!WebGLRenderingContext} ctx A WebGL context. If
+ *    you have more than one context it doesn't matter which one
+ *    you pass in, it is only used to pull out constants.
+ */
+function init(ctx) {
+  if (glEnums == null) {
+    glEnums = { };
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'number') {
+        glEnums[ctx[propertyName]] = propertyName;
+      }
+    }
+  }
+}
+
+/**
+ * Checks the utils have been initialized.
+ */
+function checkInit() {
+  if (glEnums == null) {
+    throw 'WebGLDebugUtils.init(ctx) not called';
+  }
+}
+
+/**
+ * Returns true or false if value matches any WebGL enum
+ * @param {*} value Value to check if it might be an enum.
+ * @return {boolean} True if value matches one of the WebGL defined enums
+ */
+function mightBeEnum(value) {
+  checkInit();
+  return (glEnums[value] !== undefined);
+}
+
+/**
+ * Gets an string version of an WebGL enum.
+ *
+ * Example:
+ *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+ *
+ * @param {number} value Value to return an enum for
+ * @return {string} The string version of the enum.
+ */
+function glEnumToString(value) {
+  checkInit();
+  var name = glEnums[value];
+  return (name !== undefined) ? name :
+      ("*UNKNOWN WebGL ENUM (0x" + value.toString(16) + ")");
+}
+
+/**
+ * Returns the string version of a WebGL argument.
+ * Attempts to convert enum arguments to strings.
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} argumentIndx the index of the argument.
+ * @param {*} value The value of the argument.
+ * @return {string} The value as a string.
+ */
+function glFunctionArgToString(functionName, argumentIndex, value) {
+  var funcInfo = glValidEnumContexts[functionName];
+  if (funcInfo !== undefined) {
+    if (funcInfo[argumentIndex]) {
+      return glEnumToString(value);
+    }
+  }
+  if (value === null) {
+    return "null";
+  } else if (value === undefined) {
+    return "undefined";
+  } else {
+    return value.toString();
+  }
+}
+
+/**
+ * Converts the arguments of a WebGL function to a string.
+ * Attempts to convert enum arguments to strings.
+ *
+ * @param {string} functionName the name of the WebGL function.
+ * @param {number} args The arguments.
+ * @return {string} The arguments as a string.
+ */
+function glFunctionArgsToString(functionName, args) {
+  // apparently we can't do args.join(",");
+  var argStr = "";
+  for (var ii = 0; ii < args.length; ++ii) {
+    argStr += ((ii == 0) ? '' : ', ') +
+        glFunctionArgToString(functionName, ii, args[ii]);
+  }
+  return argStr;
+};
+
+
+function makePropertyWrapper(wrapper, original, propertyName) {
+  //log("wrap prop: " + propertyName);
+  wrapper.__defineGetter__(propertyName, function() {
+    return original[propertyName];
+  });
+  // TODO(gmane): this needs to handle properties that take more than
+  // one value?
+  wrapper.__defineSetter__(propertyName, function(value) {
+    //log("set: " + propertyName);
+    original[propertyName] = value;
+  });
+}
+
+// Makes a function that calls a function on another object.
+function makeFunctionWrapper(original, functionName) {
+  //log("wrap fn: " + functionName);
+  var f = original[functionName];
+  return function() {
+    //log("call: " + functionName);
+    var result = f.apply(original, arguments);
+    return result;
+  };
+}
+
+/**
+ * Given a WebGL context returns a wrapped context that calls
+ * gl.getError after every command and calls a function if the
+ * result is not gl.NO_ERROR.
+ *
+ * @param {!WebGLRenderingContext} ctx The webgl context to
+ *        wrap.
+ * @param {!function(err, funcName, args): void} opt_onErrorFunc
+ *        The function to call when gl.getError returns an
+ *        error. If not specified the default function calls
+ *        console.log with a message.
+ * @param {!function(funcName, args): void} opt_onFunc The
+ *        function to call when each webgl function is called.
+ *        You can use this to log all calls for example.
+ */
+function makeDebugContext(ctx, opt_onErrorFunc, opt_onFunc) {
+  init(ctx);
+  opt_onErrorFunc = opt_onErrorFunc || function(err, functionName, args) {
+        // apparently we can't do args.join(",");
+        var argStr = "";
+        for (var ii = 0; ii < args.length; ++ii) {
+          argStr += ((ii == 0) ? '' : ', ') +
+              glFunctionArgToString(functionName, ii, args[ii]);
+        }
+        error("WebGL error "+ glEnumToString(err) + " in "+ functionName +
+              "(" + argStr + ")");
+      };
+
+  // Holds booleans for each GL error so after we get the error ourselves
+  // we can still return it to the client app.
+  var glErrorShadow = { };
+
+  // Makes a function that calls a WebGL function and then calls getError.
+  function makeErrorWrapper(ctx, functionName) {
+    return function() {
+      if (opt_onFunc) {
+        opt_onFunc(functionName, arguments);
+      }
+      var result = ctx[functionName].apply(ctx, arguments);
+      var err = ctx.getError();
+      if (err != 0) {
+        glErrorShadow[err] = true;
+        opt_onErrorFunc(err, functionName, arguments);
+      }
+      return result;
+    };
+  }
+
+  // Make a an object that has a copy of every property of the WebGL context
+  // but wraps all functions.
+  var wrapper = {};
+  for (var propertyName in ctx) {
+    if (typeof ctx[propertyName] == 'function') {
+       wrapper[propertyName] = makeErrorWrapper(ctx, propertyName);
+     } else {
+       makePropertyWrapper(wrapper, ctx, propertyName);
+     }
+  }
+
+  // Override the getError function with one that returns our saved results.
+  wrapper.getError = function() {
+    for (var err in glErrorShadow) {
+      if (glErrorShadow.hasOwnProperty(err)) {
+        if (glErrorShadow[err]) {
+          glErrorShadow[err] = false;
+          return err;
+        }
+      }
+    }
+    return ctx.NO_ERROR;
+  };
+
+  return wrapper;
+}
+
+function resetToInitialState(ctx) {
+  var numAttribs = ctx.getParameter(ctx.MAX_VERTEX_ATTRIBS);
+  var tmp = ctx.createBuffer();
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, tmp);
+  for (var ii = 0; ii < numAttribs; ++ii) {
+    ctx.disableVertexAttribArray(ii);
+    ctx.vertexAttribPointer(ii, 4, ctx.FLOAT, false, 0, 0);
+    ctx.vertexAttrib1f(ii, 0);
+  }
+  ctx.deleteBuffer(tmp);
+
+  var numTextureUnits = ctx.getParameter(ctx.MAX_TEXTURE_IMAGE_UNITS);
+  for (var ii = 0; ii < numTextureUnits; ++ii) {
+    ctx.activeTexture(ctx.TEXTURE0 + ii);
+    ctx.bindTexture(ctx.TEXTURE_CUBE_MAP, null);
+    ctx.bindTexture(ctx.TEXTURE_2D, null);
+  }
+
+  ctx.activeTexture(ctx.TEXTURE0);
+  ctx.useProgram(null);
+  ctx.bindBuffer(ctx.ARRAY_BUFFER, null);
+  ctx.bindBuffer(ctx.ELEMENT_ARRAY_BUFFER, null);
+  ctx.bindFramebuffer(ctx.FRAMEBUFFER, null);
+  ctx.bindRenderbuffer(ctx.RENDERBUFFER, null);
+  ctx.disable(ctx.BLEND);
+  ctx.disable(ctx.CULL_FACE);
+  ctx.disable(ctx.DEPTH_TEST);
+  ctx.disable(ctx.DITHER);
+  ctx.disable(ctx.SCISSOR_TEST);
+  ctx.blendColor(0, 0, 0, 0);
+  ctx.blendEquation(ctx.FUNC_ADD);
+  ctx.blendFunc(ctx.ONE, ctx.ZERO);
+  ctx.clearColor(0, 0, 0, 0);
+  ctx.clearDepth(1);
+  ctx.clearStencil(-1);
+  ctx.colorMask(true, true, true, true);
+  ctx.cullFace(ctx.BACK);
+  ctx.depthFunc(ctx.LESS);
+  ctx.depthMask(true);
+  ctx.depthRange(0, 1);
+  ctx.frontFace(ctx.CCW);
+  ctx.hint(ctx.GENERATE_MIPMAP_HINT, ctx.DONT_CARE);
+  ctx.lineWidth(1);
+  ctx.pixelStorei(ctx.PACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_ALIGNMENT, 4);
+  ctx.pixelStorei(ctx.UNPACK_FLIP_Y_WEBGL, false);
+  ctx.pixelStorei(ctx.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);
+  // TODO: Delete this IF.
+  if (ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL) {
+    ctx.pixelStorei(ctx.UNPACK_COLORSPACE_CONVERSION_WEBGL, ctx.BROWSER_DEFAULT_WEBGL);
+  }
+  ctx.polygonOffset(0, 0);
+  ctx.sampleCoverage(1, false);
+  ctx.scissor(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.stencilFunc(ctx.ALWAYS, 0, 0xFFFFFFFF);
+  ctx.stencilMask(0xFFFFFFFF);
+  ctx.stencilOp(ctx.KEEP, ctx.KEEP, ctx.KEEP);
+  ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.clear(ctx.COLOR_BUFFER_BIT | ctx.DEPTH_BUFFER_BIT | ctx.STENCIL_BUFFER_BIT);
+
+  // TODO: This should NOT be needed but Firefox fails with 'hint'
+  while(ctx.getError());
+}
+
+function makeLostContextSimulatingCanvas(canvas) {
+  var unwrappedContext_;
+  var wrappedContext_;
+  var onLost_ = [];
+  var onRestored_ = [];
+  var wrappedContext_ = {};
+  var contextId_ = 1;
+  var contextLost_ = false;
+  var resourceId_ = 0;
+  var resourceDb_ = [];
+  var numCallsToLoseContext_ = 0;
+  var numCalls_ = 0;
+  var canRestore_ = false;
+  var restoreTimeout_ = 0;
+
+  // Holds booleans for each GL error so can simulate errors.
+  var glErrorShadow_ = { };
+
+  canvas.getContext = function(f) {
+    return function() {
+      var ctx = f.apply(canvas, arguments);
+      // Did we get a context and is it a WebGL context?
+      if (ctx instanceof WebGLRenderingContext) {
+        if (ctx != unwrappedContext_) {
+          if (unwrappedContext_) {
+            throw "got different context"
+          }
+          unwrappedContext_ = ctx;
+          wrappedContext_ = makeLostContextSimulatingContext(unwrappedContext_);
+        }
+        return wrappedContext_;
+      }
+      return ctx;
+    }
+  }(canvas.getContext);
+
+  function wrapEvent(listener) {
+    if (typeof(listener) == "function") {
+      return listener;
+    } else {
+      return function(info) {
+        listener.handleEvent(info);
+      }
+    }
+  }
+
+  var addOnContextLostListener = function(listener) {
+    onLost_.push(wrapEvent(listener));
+  };
+
+  var addOnContextRestoredListener = function(listener) {
+    onRestored_.push(wrapEvent(listener));
+  };
+
+
+  function wrapAddEventListener(canvas) {
+    var f = canvas.addEventListener;
+    canvas.addEventListener = function(type, listener, bubble) {
+      switch (type) {
+        case 'webglcontextlost':
+          addOnContextLostListener(listener);
+          break;
+        case 'webglcontextrestored':
+          addOnContextRestoredListener(listener);
+          break;
+        default:
+          f.apply(canvas, arguments);
+      }
+    };
+  }
+
+  wrapAddEventListener(canvas);
+
+  canvas.loseContext = function() {
+    if (!contextLost_) {
+      contextLost_ = true;
+      numCallsToLoseContext_ = 0;
+      ++contextId_;
+      while (unwrappedContext_.getError());
+      clearErrors();
+      glErrorShadow_[unwrappedContext_.CONTEXT_LOST_WEBGL] = true;
+      var event = makeWebGLContextEvent("context lost");
+      var callbacks = onLost_.slice();
+      setTimeout(function() {
+          //log("numCallbacks:" + callbacks.length);
+          for (var ii = 0; ii < callbacks.length; ++ii) {
+            //log("calling callback:" + ii);
+            callbacks[ii](event);
+          }
+          if (restoreTimeout_ >= 0) {
+            setTimeout(function() {
+                canvas.restoreContext();
+              }, restoreTimeout_);
+          }
+        }, 0);
+    }
+  };
+
+  canvas.restoreContext = function() {
+    if (contextLost_) {
+      if (onRestored_.length) {
+        setTimeout(function() {
+            if (!canRestore_) {
+              throw "can not restore. webglcontestlost listener did not call event.preventDefault";
+            }
+            freeResources();
+            resetToInitialState(unwrappedContext_);
+            contextLost_ = false;
+            numCalls_ = 0;
+            canRestore_ = false;
+            var callbacks = onRestored_.slice();
+            var event = makeWebGLContextEvent("context restored");
+            for (var ii = 0; ii < callbacks.length; ++ii) {
+              callbacks[ii](event);
+            }
+          }, 0);
+      }
+    }
+  };
+
+  canvas.loseContextInNCalls = function(numCalls) {
+    if (contextLost_) {
+      throw "You can not ask a lost contet to be lost";
+    }
+    numCallsToLoseContext_ = numCalls_ + numCalls;
+  };
+
+  canvas.getNumCalls = function() {
+    return numCalls_;
+  };
+
+  canvas.setRestoreTimeout = function(timeout) {
+    restoreTimeout_ = timeout;
+  };
+
+  function isWebGLObject(obj) {
+    //return false;
+    return (obj instanceof WebGLBuffer ||
+            obj instanceof WebGLFramebuffer ||
+            obj instanceof WebGLProgram ||
+            obj instanceof WebGLRenderbuffer ||
+            obj instanceof WebGLShader ||
+            obj instanceof WebGLTexture);
+  }
+
+  function checkResources(args) {
+    for (var ii = 0; ii < args.length; ++ii) {
+      var arg = args[ii];
+      if (isWebGLObject(arg)) {
+        return arg.__webglDebugContextLostId__ == contextId_;
+      }
+    }
+    return true;
+  }
+
+  function clearErrors() {
+    var k = Object.keys(glErrorShadow_);
+    for (var ii = 0; ii < k.length; ++ii) {
+      delete glErrorShadow_[k];
+    }
+  }
+
+  function loseContextIfTime() {
+    ++numCalls_;
+    if (!contextLost_) {
+      if (numCallsToLoseContext_ == numCalls_) {
+        canvas.loseContext();
+      }
+    }
+  }
+
+  // Makes a function that simulates WebGL when out of context.
+  function makeLostContextFunctionWrapper(ctx, functionName) {
+    var f = ctx[functionName];
+    return function() {
+      // log("calling:" + functionName);
+      // Only call the functions if the context is not lost.
+      loseContextIfTime();
+      if (!contextLost_) {
+        //if (!checkResources(arguments)) {
+        //  glErrorShadow_[wrappedContext_.INVALID_OPERATION] = true;
+        //  return;
+        //}
+        var result = f.apply(ctx, arguments);
+        return result;
+      }
+    };
+  }
+
+  function freeResources() {
+    for (var ii = 0; ii < resourceDb_.length; ++ii) {
+      var resource = resourceDb_[ii];
+      if (resource instanceof WebGLBuffer) {
+        unwrappedContext_.deleteBuffer(resource);
+      } else if (resource instanceof WebGLFramebuffer) {
+        unwrappedContext_.deleteFramebuffer(resource);
+      } else if (resource instanceof WebGLProgram) {
+        unwrappedContext_.deleteProgram(resource);
+      } else if (resource instanceof WebGLRenderbuffer) {
+        unwrappedContext_.deleteRenderbuffer(resource);
+      } else if (resource instanceof WebGLShader) {
+        unwrappedContext_.deleteShader(resource);
+      } else if (resource instanceof WebGLTexture) {
+        unwrappedContext_.deleteTexture(resource);
+      }
+    }
+  }
+
+  function makeWebGLContextEvent(statusMessage) {
+    return {
+      statusMessage: statusMessage,
+      preventDefault: function() {
+          canRestore_ = true;
+        }
+    };
+  }
+
+  return canvas;
+
+  function makeLostContextSimulatingContext(ctx) {
+    // copy all functions and properties to wrapper
+    for (var propertyName in ctx) {
+      if (typeof ctx[propertyName] == 'function') {
+         wrappedContext_[propertyName] = makeLostContextFunctionWrapper(
+             ctx, propertyName);
+       } else {
+         makePropertyWrapper(wrappedContext_, ctx, propertyName);
+       }
+    }
+
+    // Wrap a few functions specially.
+    wrappedContext_.getError = function() {
+      loseContextIfTime();
+      if (!contextLost_) {
+        var err;
+        while (err = unwrappedContext_.getError()) {
+          glErrorShadow_[err] = true;
+        }
+      }
+      for (var err in glErrorShadow_) {
+        if (glErrorShadow_[err]) {
+          delete glErrorShadow_[err];
+          return err;
+        }
+      }
+      return wrappedContext_.NO_ERROR;
+    };
+
+    var creationFunctions = [
+      "createBuffer",
+      "createFramebuffer",
+      "createProgram",
+      "createRenderbuffer",
+      "createShader",
+      "createTexture"
+    ];
+    for (var ii = 0; ii < creationFunctions.length; ++ii) {
+      var functionName = creationFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          var obj = f.apply(ctx, arguments);
+          obj.__webglDebugContextLostId__ = contextId_;
+          resourceDb_.push(obj);
+          return obj;
+        };
+      }(ctx[functionName]);
+    }
+
+    var functionsThatShouldReturnNull = [
+      "getActiveAttrib",
+      "getActiveUniform",
+      "getBufferParameter",
+      "getContextAttributes",
+      "getAttachedShaders",
+      "getFramebufferAttachmentParameter",
+      "getParameter",
+      "getProgramParameter",
+      "getProgramInfoLog",
+      "getRenderbufferParameter",
+      "getShaderParameter",
+      "getShaderInfoLog",
+      "getShaderSource",
+      "getTexParameter",
+      "getUniform",
+      "getUniformLocation",
+      "getVertexAttrib"
+    ];
+    for (var ii = 0; ii < functionsThatShouldReturnNull.length; ++ii) {
+      var functionName = functionsThatShouldReturnNull[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return null;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    var isFunctions = [
+      "isBuffer",
+      "isEnabled",
+      "isFramebuffer",
+      "isProgram",
+      "isRenderbuffer",
+      "isShader",
+      "isTexture"
+    ];
+    for (var ii = 0; ii < isFunctions.length; ++ii) {
+      var functionName = isFunctions[ii];
+      wrappedContext_[functionName] = function(f) {
+        return function() {
+          loseContextIfTime();
+          if (contextLost_) {
+            return false;
+          }
+          return f.apply(ctx, arguments);
+        }
+      }(wrappedContext_[functionName]);
+    }
+
+    wrappedContext_.checkFramebufferStatus = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return wrappedContext_.FRAMEBUFFER_UNSUPPORTED;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.checkFramebufferStatus);
+
+    wrappedContext_.getAttribLocation = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return -1;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getAttribLocation);
+
+    wrappedContext_.getVertexAttribOffset = function(f) {
+      return function() {
+        loseContextIfTime();
+        if (contextLost_) {
+          return 0;
+        }
+        return f.apply(ctx, arguments);
+      };
+    }(wrappedContext_.getVertexAttribOffset);
+
+    wrappedContext_.isContextLost = function() {
+      return contextLost_;
+    };
+
+    return wrappedContext_;
+  }
+}
+
+return {
+    /**
+     * Initializes this module. Safe to call more than once.
+     * @param {!WebGLRenderingContext} ctx A WebGL context. If
+    }
+   *    you have more than one context it doesn't matter which one
+   *    you pass in, it is only used to pull out constants.
+   */
+  'init': init,
+
+  /**
+   * Returns true or false if value matches any WebGL enum
+   * @param {*} value Value to check if it might be an enum.
+   * @return {boolean} True if value matches one of the WebGL defined enums
+   */
+  'mightBeEnum': mightBeEnum,
+
+  /**
+   * Gets an string version of an WebGL enum.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glEnumToString(ctx.getError());
+   *
+   * @param {number} value Value to return an enum for
+   * @return {string} The string version of the enum.
+   */
+  'glEnumToString': glEnumToString,
+
+  /**
+   * Converts the argument of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * Example:
+   *   WebGLDebugUtil.init(ctx);
+   *   var str = WebGLDebugUtil.glFunctionArgToString('bindTexture', 0, gl.TEXTURE_2D);
+   *
+   * would return 'TEXTURE_2D'
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} argumentIndx the index of the argument.
+   * @param {*} value The value of the argument.
+   * @return {string} The value as a string.
+   */
+  'glFunctionArgToString': glFunctionArgToString,
+
+  /**
+   * Converts the arguments of a WebGL function to a string.
+   * Attempts to convert enum arguments to strings.
+   *
+   * @param {string} functionName the name of the WebGL function.
+   * @param {number} args The arguments.
+   * @return {string} The arguments as a string.
+   */
+  'glFunctionArgsToString': glFunctionArgsToString,
+
+  /**
+   * Given a WebGL context returns a wrapped context that calls
+   * gl.getError after every command and calls a function if the
+   * result is not NO_ERROR.
+   *
+   * You can supply your own function if you want. For example, if you'd like
+   * an exception thrown on any GL error you could do this
+   *
+   *    function throwOnGLError(err, funcName, args) {
+   *      throw WebGLDebugUtils.glEnumToString(err) +
+   *            " was caused by call to " + funcName;
+   *    };
+   *
+   *    ctx = WebGLDebugUtils.makeDebugContext(
+   *        canvas.getContext("webgl"), throwOnGLError);
+   *
+   * @param {!WebGLRenderingContext} ctx The webgl context to wrap.
+   * @param {!function(err, funcName, args): void} opt_onErrorFunc The function
+   *     to call when gl.getError returns an error. If not specified the default
+   *     function calls console.log with a message.
+   * @param {!function(funcName, args): void} opt_onFunc The
+   *     function to call when each webgl function is called. You
+   *     can use this to log all calls for example.
+   */
+  'makeDebugContext': makeDebugContext,
+
+  /**
+   * Given a canvas element returns a wrapped canvas element that will
+   * simulate lost context. The canvas returned adds the following functions.
+   *
+   * loseContext:
+   *   simulates a lost context event.
+   *
+   * restoreContext:
+   *   simulates the context being restored.
+   *
+   * lostContextInNCalls:
+   *   loses the context after N gl calls.
+   *
+   * getNumCalls:
+   *   tells you how many gl calls there have been so far.
+   *
+   * setRestoreTimeout:
+   *   sets the number of milliseconds until the context is restored
+   *   after it has been lost. Defaults to 0. Pass -1 to prevent
+   *   automatic restoring.
+   *
+   * @param {!Canvas} canvas The canvas element to wrap.
+   */
+  'makeLostContextSimulatingCanvas': makeLostContextSimulatingCanvas,
+
+  /**
+   * Resets a context to the initial state.
+   * @param {!WebGLRenderingContext} ctx The webgl context to
+   *     reset.
+   */
+  'resetToInitialState': resetToInitialState
+};
+
+}();
+
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/khronos/webgl-utils.js
new file mode 100755 (executable)
index 0000000..4f14f7f
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * Copyright 2010, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/**
+ * @fileoverview This file contains functions every webgl program will need
+ * a version of one way or another.
+ *
+ * Instead of setting up a context manually it is recommended to
+ * use. This will check for success or failure. On failure it
+ * will attempt to present an approriate message to the user.
+ *
+ *       gl = WebGLUtils.setupWebGL(canvas);
+ *
+ * For animated WebGL apps use of setTimeout or setInterval are
+ * discouraged. It is recommended you structure your rendering
+ * loop like this.
+ *
+ *       function render() {
+ *         window.requestAnimFrame(render, canvas);
+ *
+ *         // do rendering
+ *         ...
+ *       }
+ *       render();
+ *
+ * This will call your rendering function up to the refresh rate
+ * of your display but will stop rendering if your app is not
+ * visible.
+ */
+
+WebGLUtils = function() {
+
+/**
+ * Creates the HTLM for a failure message
+ * @param {string} canvasContainerId id of container of th
+ *        canvas.
+ * @return {string} The html.
+ */
+var makeFailHTML = function(msg) {
+  return '' +
+    '<table style="background-color: #8CE; width: 100%; height: 100%;"><tr>' +
+    '<td align="center">' +
+    '<div style="display: table-cell; vertical-align: middle;">' +
+    '<div style="">' + msg + '</div>' +
+    '</div>' +
+    '</td></tr></table>';
+};
+
+/**
+ * Mesasge for getting a webgl browser
+ * @type {string}
+ */
+var GET_A_WEBGL_BROWSER = '' +
+  'This page requires a browser that supports WebGL.<br/>' +
+  '<a href="http://get.webgl.org">Click here to upgrade your browser.</a>';
+
+/**
+ * Mesasge for need better hardware
+ * @type {string}
+ */
+var OTHER_PROBLEM = '' +
+  "It doesn't appear your computer can support WebGL.<br/>" +
+  '<a href="http://get.webgl.org/troubleshooting/">Click here for more information.</a>';
+
+/**
+ * Creates a webgl context. If creation fails it will
+ * change the contents of the container of the <canvas>
+ * tag to an error message with the correct links for WebGL.
+ * @param {Element} canvas. The canvas element to create a
+ *     context from.
+ * @param {WebGLContextCreationAttirbutes} opt_attribs Any
+ *     creation attributes you want to pass in.
+ * @return {WebGLRenderingContext} The created context.
+ */
+var setupWebGL = function(canvas, opt_attribs) {
+  function showLink(str) {
+    var container = canvas.parentNode;
+    if (container) {
+      container.innerHTML = makeFailHTML(str);
+    }
+  };
+
+  if (!window.WebGLRenderingContext) {
+    showLink(GET_A_WEBGL_BROWSER);
+    return null;
+  }
+
+  var context = create3DContext(canvas, opt_attribs);
+  if (!context) {
+    showLink(OTHER_PROBLEM);
+  }
+  return context;
+};
+
+/**
+ * Creates a webgl context.
+ * @param {!Canvas} canvas The canvas tag to get context
+ *     from. If one is not passed in one will be created.
+ * @return {!WebGLContext} The created context.
+ */
+var create3DContext = function(canvas, opt_attribs) {
+  var names = ["webgl", "experimental-webgl", "webkit-3d", "moz-webgl"];
+  var context = null;
+  for (var ii = 0; ii < names.length; ++ii) {
+    try {
+      context = canvas.getContext(names[ii], opt_attribs);
+    } catch(e) {}
+    if (context) {
+      break;
+    }
+  }
+  return context;
+}
+
+return {
+  create3DContext: create3DContext,
+  setupWebGL: setupWebGL
+};
+}();
+
+/**
+ * Provides requestAnimationFrame in a cross browser way.
+ */
+window.requestAnimFrame = (function() {
+  return window.requestAnimationFrame ||
+         window.webkitRequestAnimationFrame ||
+         window.mozRequestAnimationFrame ||
+         window.oRequestAnimationFrame ||
+         window.msRequestAnimationFrame ||
+         function(/* function FrameRequestCallback */ callback, /* DOMElement Element */ element) {
+           return window.setTimeout(callback, 1000/60);
+         };
+})();
+
+/**
+ * Provides cancelAnimationFrame in a cross browser way.
+ */
+window.cancelAnimFrame = (function() {
+  return window.cancelAnimationFrame ||
+         window.webkitCancelAnimationFrame ||
+         window.mozCancelAnimationFrame ||
+         window.oCancelAnimationFrame ||
+         window.msCancelAnimationFrame ||
+         window.clearTimeout;
+})();
+
+
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/main.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/main.js
new file mode 100755 (executable)
index 0000000..41563d0
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var ORIGIN_SPEED = 0.5;
+var multiple = 5;
+var isRunning = false;
+var isInit = true;
+var testFlag = {
+    status: false,
+    direction: false,
+    size:false,
+    speed:false
+};
+
+function start() {
+    var c = document.getElementById("canvas");
+    canvas = c;
+
+    var gl = init();
+    if (!gl) {
+        return;
+    }
+    incAngle = ORIGIN_SPEED*multiple;
+    currentAngle = 0;
+
+    f();
+    isRunning = true;
+}
+var f = function() {
+    drawPicture(gl);
+    requestId = window.requestAnimFrame(f, canvas);
+};
+
+function handleContextLost(event) {
+    if (event) {
+        event.preventDefault();
+    }
+    if (requestId !== undefined) {
+        window.cancelAnimFrame(requestId);
+        requestId = undefined;
+    }
+}
+
+function handleContextRestored() {
+    init();
+    f();
+}
+
+function reStart() {
+    if (isRunning) {
+        return;
+    }
+    incAngle = bakAngle;
+    handleContextRestored();
+    isRunning = true;
+}
+
+function stop(event) {
+    if (!isRunning) {
+        return;
+    }
+    bakAngle = incAngle;
+    incAngle = 0;
+    handleContextLost(event);
+    isRunning = false;
+}
+
+function resume() {
+    if(!isRunning) {
+        return;
+    }
+    stop();
+    reStart();
+}
+
+function setToRight() {
+    if(incAngle < 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setToLeft() {
+    if(incAngle > 0) {
+        incAngle = -incAngle;
+    }
+    resume();
+}
+
+function setSize(value) {
+    if(value < 7 || value > 30) {
+        return;
+    }
+    if (value != viewDistance){
+        viewDistance = value;
+    };
+    resume();
+}
+
+function setSpeed(value) {
+    if(value <= 0 || value > 10) {
+        return;
+    }
+    if(incAngle > 0) {
+        incAngle = ORIGIN_SPEED*value;
+    } else {
+        incAngle = -ORIGIN_SPEED*value;
+    }
+    resume();
+}
+
+function checkEnable() {
+    if (testFlag.status && testFlag.direction
+        && testFlag.size && testFlag.speed) {
+        EnablePassButton();
+    }
+}
+
+$(document).ready(function(){
+    start();
+    // animation-left-right status changes
+    $("input[type='radio']").bind( "change", function(event, ui) {
+        if (this.value == "left") {
+            setToLeft();
+            testFlag.direction = true;
+            checkEnable();
+        } else {
+            setToRight();
+        }
+    });
+    DisablePassButton();
+});
diff --git a/wearable/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js b/wearable/tct-behavior-tests/tests/2D3DAnimation/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..59672db
--- /dev/null
@@ -0,0 +1,155 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            var value = 7 + 23*(4 - (parseInt(newValue, 10) - 1))/5;
+            setSize(value);
+            if (parseInt(newValue, 10) != 3) {
+                testFlag.size = true;
+                checkEnable();
+            }
+        } else if (ID == "speed-1") {
+            setSpeed(parseInt(newValue, 10));
+            if (parseInt(newValue, 10) != 5) {
+                testFlag.speed = true;
+                checkEnable();
+            }
+        } else if (ID == "flip-1") {
+            if (newValue == "0") {
+                stop();
+                $("input[type='radio']").checkboxradio('disable');
+                $("#slider-1").slider('disable');
+                $("#speed-1").slider('disable');
+                testFlag.status = true;
+                checkEnable();
+            } else if (newValue == "1"){
+                if (!isInit) {
+                    reStart();
+                    $("input[type='radio']").checkboxradio('enable');
+                    $("#slider-1").slider('enable');
+                    $("#speed-1").slider('enable');
+                } else {
+                    isInit = false;
+                }
+            }
+        }
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       //this._popup.html( newValue );
+            this._popup.html( Math.round(newValue) );
+               }
+
+               if ( o.showValue ) {
+                       //this._handleText.html( newValue );
+            this._handleText.html( Math.round(newValue) );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/wearable/tct-behavior-tests/tests/Accelerometer/index.html b/wearable/tct-behavior-tests/tests/Accelerometer/index.html
new file mode 100755 (executable)
index 0000000..cd68262
--- /dev/null
@@ -0,0 +1,81 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style type="text/css">
+            .d{
+                border: 1px solid #000;
+                width:100%;
+                height:200px;
+            }
+            .d li{
+                margin: 10px 5px;
+            }
+            .d p{
+                margin: 10px 25px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role= "content">
+            <div class="d">
+                <ul id="coordinate">
+                    <li id="x">X:</li>
+                    <li id="y">Y:</li>
+                    <li id="z">Z:</li>
+                </ul>
+                <p>X, Y, Z will be changed while moving the device, otherwise they will be zero</p>
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the functionality of Accelerometer. And detects the device moving direction is x axis or y axis or z axis.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the detected direction reflects the actual device moving direction.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Accelerometer/js/main.js b/wearable/tct-behavior-tests/tests/Accelerometer/js/main.js
new file mode 100755 (executable)
index 0000000..af52a3e
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+window.addEventListener(
+    "devicemotion",
+    function(evt) {
+        var coordinate = evt.acceleration;
+        jQuery("#x").text("X: " + Math.round(coordinate.x-0));
+        jQuery("#y").text("Y: " + Math.round(coordinate.y-0));
+        jQuery("#z").text("Z: " + Math.round(coordinate.z-0));
+    }, false);
diff --git a/wearable/tct-behavior-tests/tests/Alarm/NOTICE b/wearable/tct-behavior-tests/tests/Alarm/NOTICE
new file mode 100755 (executable)
index 0000000..5e383b8
--- /dev/null
@@ -0,0 +1,12 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestAlarm :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/wearable/tct-behavior-tests/tests/Alarm/index.html b/wearable/tct-behavior-tests/tests/Alarm/index.html
new file mode 100755 (executable)
index 0000000..30e11aa
--- /dev/null
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview">
+                    <li data-role="list-divider">AlarmTest Install</li>
+                    <li>
+                        <div data-role="button" id="install" style="height:40px; line-height:20px;">AlarmTest Install</div>
+                    </li>
+                    <li data-role="list-divider">Alarm List</li>
+                </ul>
+                <ul data-role="listview" id="alarm-all-list"></ul>
+                <ul data-role="listview">
+                    <li data-role="list-divider">Absolute Alarm Time</li>
+                    <li>
+                        <div>
+                            Date: <input type="date" id="alarm-onlydate" style="width:10em"></input>
+                        </div>
+                        <div>
+                            Time: <input type="time" id="alarm-onlytime" style="width:10em"></input>
+                        </div>
+                    </li>
+                    <li data-role="list-divider">Absolute Alarm Repeat interval(sec)</li>
+                    <li><input id="absolute-alarm-period" name="absolute-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                    <li data-role="list-divider">Absolute Alarm Add</li>
+                    <li>
+                        <div data-role="button" id="absolute-alarm-save">Absolute Save</div>
+                    </li>
+                    <li data-role="list-divider">Relative Alarm Delay(sec)</li>
+                    <li><input id="relative-alarm-delay" name="relative-alarm-delay" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                    <li data-role="list-divider">Relative Alarm Repeat interval(sec)</li>
+                    <li><input id="relative-alarm-period" name="relative-alarm-period" data-popupenabled="false" type="range" value="50" min="0" max="99" /></li>
+                    <li data-role="list-divider">Relative Alarm Add</li>
+                    <li>
+                        <div data-role="button" id="relative-alarm-save">Relative Save</div>
+                    </li>
+                </ul>
+                <ul data-role="listview">
+                    <li data-role="list-divider">Alarm Delete</li>
+                    <li>
+                        <div data-role="button" id="alarm-remove-all">Delete all</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info">
+                <div style="font-size:85%">
+                    <p>Check if an application is launched on time</p><br>
+                    <p>1. Install AlarmTest</p>
+                    <p>2. Set absolute time</p>
+                    <p>3. Set an interval</p>
+                    <p>4. Save an absolute button</p>
+                    <p>5. Watch AlarmTest is launched on time</p>
+                    <p>6. Watch AlarmTest is launched after the interval</p>
+                    <p>7. Remove the alarm</p>
+                    <p>8. Set delay</p>
+                    <p>9. Set an interval</p>
+                    <p>10. Save a relative alarm</p>
+                    <p>11. Watch AlarmTest is launched on time</p>
+                    <p>12. Watch AlarmTest is launched after the interval</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Alarm/js/main.js b/wearable/tct-behavior-tests/tests/Alarm/js/main.js
new file mode 100755 (executable)
index 0000000..cc01c7d
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var installUrl;
+$(document).delegate("#main", "pageinit", function() {
+    $("#alarm-remove-all").bind("vclick", function() {
+        removeAll();
+        return false;
+    });
+    $("#alarm-all-list").delegate("li", "vclick", function() {
+        alarmInfo($(this).data("id"));
+        return false;
+    });
+    $("#alarm-all-list").delegate("div", "vclick", function() {
+        removeAlarm($(this).parent().data("id"));
+        return false;
+    });
+    $("#install").bind("vclick", function() {
+        install_(installUrl);
+        $("#absolute-alarm-save").removeClass("ui-disabled");
+        $("#relative-alarm-save").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").bind("vclick", function() {
+        addAlarmAbsolute();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#relative-alarm-save").bind("vclick", function() {
+        addAlarmRelative();
+        $("#alarm-remove-all").removeClass("ui-disabled");
+        return false;
+    });
+    $("#absolute-alarm-save").addClass("ui-disabled");
+    $("#relative-alarm-save").addClass("ui-disabled");
+    $("#alarm-remove-all").addClass("ui-disabled");
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    displayAlarms();
+    alarmPre();
+});
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'file://' + RESOURCE_DIR + '/Documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function displayAlarms() {
+    var alarmsArray = tizen.alarm.getAll();
+    var period, str = "";
+
+    for (var i = 0; i < alarmsArray.length; i++) {
+        if (alarmsArray[i].period) {
+            period = alarmsArray[i].period + " sec";
+        } else {
+            period = "none";
+        }
+
+        if (alarmsArray[i] instanceof tizen.AlarmAbsolute) {
+            var d = alarmsArray[i].date,
+            m = d.getMinutes();
+
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + (d.getMonth() + 1)
+                + '/'
+                + d.getDate()
+                + '/'
+                + d.getFullYear()
+                + ' '
+                + d.getHours()
+                + ':'
+                + ((m < 10) ? "0" + m : m)
+                + ' Absolute alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else if (alarmsArray[i] instanceof tizen.AlarmRelative) {
+            str += '<li data-id="'
+                + alarmsArray[i].id
+                + '">'
+                + alarmsArray[i].delay
+                + ' sec Relative alarm<br>(Period: '
+                + period
+                + ') <div data-role="button" data-inline="true">Delete</div></li>';
+        } else {
+            alert("Wrong alarm instance");
+            break;
+        }
+    }
+    $("#alarm-all-list").html(str).trigger("create").listview("refresh");
+}
+
+function addAlarm(alarm) {
+    var arg;
+    arg = new tizen.ApplicationControl("http://tizen.org/appcontrol/operation/view",
+            null,
+            null,
+            null,
+            [new tizen.ApplicationControlData("id", ["bhvtcalarm.AlarmTest"])]);
+
+    try {
+        tizen.alarm.add(alarm, "bhvtcalarm.AlarmTest", arg);
+    } catch (e) {
+        alert("error: " + e.message);
+    }
+}
+
+function addAlarmAbsolute() {
+    var period = parseInt($("#absolute-alarm-period").prop("value")),
+        dateInput = $("#alarm-onlydate").prop("value"),
+        timeInput = $("#alarm-onlytime").prop("value"),
+        year, month, date, hours, minutes, splits, d, t,
+        inputDate, myAlarm;
+
+    if (period < 0) {
+        alert("Period is incorect");
+    } else if (dateInput === null || dateInput === "") {
+        alert("Date is incorect");
+    }
+    else if (timeInput === null || timeInput === "") {
+        alert("Time is incorect");
+    }
+    else {
+        d = dateInput.split("-");
+        t = timeInput.split(":");
+
+        year = parseInt(d[0]);
+        month = parseInt(d[1]) - 1;
+        date = parseInt(d[2]);
+        hours = parseInt(t[0]);
+        minutes = parseInt(t[1]);
+
+        inputDate = new Date(year, month, date, hours, minutes, 0, 0);
+        myAlarm = new tizen.AlarmAbsolute(inputDate, (period > 0 ? period : null));
+
+        addAlarm(myAlarm);
+        alert("Absolute Alarm Added");
+        displayAlarms();
+    }
+}
+
+function addAlarmRelative() {
+    var period = parseInt($("#relative-alarm-period").prop("value")),
+    delay = parseInt($("#relative-alarm-delay").prop("value"));
+
+    if ((delay < 0) || (period < 0)) {
+        alert("Getting alarm settings failed");
+    }
+    else
+    {
+        var myAlarm = new tizen.AlarmRelative(delay, period);
+
+        addAlarm(myAlarm);
+        alert("Relative Alarm Added");
+        displayAlarms();
+    }
+}
+
+function removeAll() {
+    tizen.alarm.removeAll();
+    alert("Alarm delete all");
+    displayAlarms();
+}
+
+function removeAlarm(id) {
+    try {
+        tizen.alarm.remove(id);
+        alert("Alarm delete");
+    } catch (e) {
+        alert("Alarm remove failed. The once alarm might be already removed automatically");
+    }
+    displayAlarms();
+}
+
+function alarmInfo(id) {
+    var alarm = tizen.alarm.get(id);
+
+    if (alarm) {
+        if (alarm instanceof tizen.AlarmAbsolute) {
+            alert("Next scheduled alarm is " + alarm.getNextScheduledDate());
+        } else {
+            alert("Remaining seconds is " + alarm.getRemainingSeconds() + " SECS");
+        }
+    } else {
+        alert("Alarm info retrieving failed<br/>This once alarm might be already removed automatically");
+        displayAlarms();
+    }
+}
+
+function install_(url) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">AlarmTest Install</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            install_flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            install_flag = false;
+        }
+};
+
+function alarmPre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name === "TestAlarm.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestAlarm.wgt",
+                    false,
+                    function() {
+                        console.log("Alarm Precondition Success!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Alarm/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/Alarm/res/TestAlarm.wgt b/wearable/tct-behavior-tests/tests/Alarm/res/TestAlarm.wgt
new file mode 100755 (executable)
index 0000000..311356c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Alarm/res/TestAlarm.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/index.html b/wearable/tct-behavior-tests/tests/AppControl/index.html
new file mode 100755 (executable)
index 0000000..243e4c7
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="actList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test App Control</li>
+                <li id="csp-none">
+                    <a href="javascript:goToApp('res/app-control-complex-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-complex-wgt</h2>
+                    </a>
+                </li>
+                <li id="csp-self">
+                    <a href="javascript:goToApp('res/appcontrol-operation-wgt.html')" data-transition="slide" style="">
+                        <h2>app-control-operation-wgt</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of App Control worked well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/AppControl/js/main1.js b/wearable/tct-behavior-tests/tests/AppControl/js/main1.js
new file mode 100755 (executable)
index 0000000..c01f954
--- /dev/null
@@ -0,0 +1,321 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0003.unittestforappcontrol";
+
+var wgt_names = new Array('app-control-complex-wgt-1.wgt',
+                          'app-control-complex-wgt-2.wgt',
+                          'app-control-complex-wgt-3.wgt',
+                          'app-control-complex-wgt-4.wgt',
+                          'app-control-complex-wgt-5.wgt',
+                          'unit-test-for-app-control.wgt');
+
+var package_ids = new Array('wrt2act066',
+                            'wrt2act067',
+                            'wrt2act068',
+                            'wrt2act069',
+                            'wrt1nj0032',
+                            'wrt1nj0003');
+
+var id_maps = {'app-control-complex-wgt-1.wgt':        'wrt2act066',
+               'app-control-complex-wgt-2.wgt':        'wrt2act067',
+               'app-control-complex-wgt-3.wgt':        'wrt2act068',
+               'app-control-complex-wgt-4.wgt':        'wrt2act069',
+               'app-control-complex-wgt-5.wgt':        'wrt1nj0032',
+               'unit-test-for-app-control.wgt':        'wrt1nj0003'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    /**gettpkInfoByPlatForm();**/
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+function goToApp(path) {
+    window.open(path);
+}
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/AppControl/js/main2.js b/wearable/tct-behavior-tests/tests/AppControl/js/main2.js
new file mode 100755 (executable)
index 0000000..b60b084
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "wrt1nj0009.appcontrolTestApp";
+
+var wgt_names = new Array('appcontrol-operation-content.wgt',
+                          'appcontrol-operation-createcontent-video.wgt',
+                          'appcontrol-operation-default.wgt',
+                          'appcontrol-operation-dial.wgt',
+                          'appcontrol-operation-dial-null.wgt',
+                          'appcontrol-operation-call.wgt',
+                          'appcontrol-operation-call-null.wgt',
+                          'appcontrol-operation-edit.wgt',
+                          'appcontrol-operation-multi_share.wgt',
+                          'appcontrol-operation-nfc-empty.wgt',
+                          'appcontrol-operation-nfc-mime.wgt',
+                          'appcontrol-operation-nfc-uri.wgt',
+                          'appcontrol-operation-nfc-wellknow.wgt',
+                          'appcontrol-operation-pick.wgt',
+                          'appcontrol-operation-pick-audio.wgt',
+                          'appcontrol-operation-pick-video.wgt',
+                          'appcontrol-operation-search.wgt',
+                          'appcontrol-operation-send.wgt',
+                          'appcontrol-operation-share.wgt',
+                          'appcontrol-operation-view.wgt',
+                          'appcontrol-operation-view-3gpp.wgt',
+                          'appcontrol-operation-view-aac.wgt',
+                          'appcontrol-operation-view-amr.wgt',
+                          'appcontrol-operation-view-bmp.wgt',
+                          'appcontrol-operation-view-gif.wgt',
+                          'appcontrol-operation-view-jpeg.wgt',
+                          'appcontrol-operation-view-mp3.wgt',
+                          'appcontrol-operation-view-mp4.wgt',
+                          'appcontrol-operation-view-png.wgt',
+                          'appcontrol-operation-view-wav.wgt',
+                          'appcontrol-test-app.wgt');
+
+var package_ids = new Array('wrt2aoc011',
+                            'wrt1nj0027',
+                            'wrt2aod012',
+                            'wrt2aod013',
+                            'wrt1nj0029',
+                            'wrt1nj0024',
+                            'wrt1nj0025',
+                            'wrt2aoe014',
+                            'wrt1nj0031',
+                            'wrt2aon015',
+                            'wrt2aon016',
+                            'wrt2aon017',
+                            'wrt2aon018',
+                            'wrt2aop019',
+                            'wrt1nj0021',
+                            'wrt1nj0023',
+                            'wrt2aos020',
+                            'wrt2aos021',
+                            'wrt1nj0030',
+                            'wrt2aov022',
+                            'wrt1nj0018',
+                            'wrt1nj0014',
+                            'wrt1nj0015',
+                            'wrt1nj0011',
+                            'wrt1nj0012',
+                            'wrt1nj0010',
+                            'wrt1nj0016',
+                            'wrt1nj0019',
+                            'wrt1nj0013',
+                            'wrt1nj0017',
+                            'wrt1nj0009');
+
+var id_maps = {'appcontrol-operation-content.wgt':                'wrt2aoc011',
+               'appcontrol-operation-createcontent-video.wgt':    'wrt1nj0027',
+               'appcontrol-operation-default.wgt':                'wrt2aod012',
+               'appcontrol-operation-dial.wgt':                   'wrt2aod013',
+               'appcontrol-operation-dial-null.wgt':              'wrt1nj0029',
+               'appcontrol-operation-call.wgt':                   'wrt1nj0024',
+               'appcontrol-operation-call-null.wgt':              'wrt1nj0025',
+               'appcontrol-operation-edit.wgt':                   'wrt2aoe014',
+               'appcontrol-operation-multi_share.wgt':            'wrt1nj0031',
+               'appcontrol-operation-nfc-empty.wgt':              'wrt2aon015',
+               'appcontrol-operation-nfc-mime.wgt':               'wrt2aon016',
+               'appcontrol-operation-nfc-uri.wgt':                'wrt2aon017',
+               'appcontrol-operation-nfc-wellknow.wgt':           'wrt2aon018',
+               'appcontrol-operation-pick.wgt':                   'wrt2aop019',
+               'appcontrol-operation-pick-audio.wgt':             'wrt2aos021',
+               'appcontrol-operation-pick-video.wgt':             'wrt1nj0023',
+               'appcontrol-operation-search.wgt':                 'wrt2aos020',
+               'appcontrol-operation-send.wgt':                   'wrt2aos021',
+               'appcontrol-operation-share.wgt':                  'wrt1nj0030',
+               'appcontrol-operation-view.wgt':                   'wrt2aov022',
+               'appcontrol-operation-view-3gpp.wgt':              'wrt1nj0018',
+               'appcontrol-operation-view-aac.wgt':               'wrt1nj0014',
+               'appcontrol-operation-view-amr.wgt':               'wrt1nj0015',
+               'appcontrol-operation-view-bmp.wgt':               'wrt1nj0011',
+               'appcontrol-operation-view-gif.wgt':               'wrt1nj0012',
+               'appcontrol-operation-view-jpeg.wgt':              'wrt1nj0010',
+               'appcontrol-operation-view-mp3.wgt':               'wrt1nj0016',
+               'appcontrol-operation-view-mp4.wgt':               'wrt1nj0019',
+               'appcontrol-operation-view-png.wgt':               'wrt1nj0013',
+               'appcontrol-operation-view-wav.wgt':               'wrt1nj0017',
+               'appcontrol-test-app.wgt':                         'wrt1nj0009'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    //gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControl/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt
new file mode 100755 (executable)
index 0000000..10bd4e3
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt-5.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html b/wearable/tct-behavior-tests/tests/AppControl/res/app-control-complex-wgt.html
new file mode 100755 (executable)
index 0000000..60f0dd4
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main1.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"app-control-complex-one-uri" test Step: </p>
+            <ol>
+              <li>Press button "open7".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A "PASS" displayed on the screen, then jumped to another page, the new page auto closed in 5 seconds, finally a "PASS" and a "close" button displayed on the screen.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt
new file mode 100755 (executable)
index 0000000..c187e82
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call-null.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt
new file mode 100755 (executable)
index 0000000..db6a809
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-call.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt
new file mode 100755 (executable)
index 0000000..c2e1bc6
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-createcontent-video.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt
new file mode 100755 (executable)
index 0000000..21e7bfc
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-dial-null.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt
new file mode 100755 (executable)
index 0000000..80ffaa5
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-multi_share.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt
new file mode 100755 (executable)
index 0000000..c4c5b12
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-audio.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt
new file mode 100755 (executable)
index 0000000..156a90c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-pick-video.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt
new file mode 100755 (executable)
index 0000000..2270fda
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-share.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt
new file mode 100755 (executable)
index 0000000..1d79f16
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-3gpp.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt
new file mode 100755 (executable)
index 0000000..820d407
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-aac.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt
new file mode 100755 (executable)
index 0000000..050e78b
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-amr.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt
new file mode 100755 (executable)
index 0000000..85a3b37
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-bmp.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt
new file mode 100755 (executable)
index 0000000..0e8e8d5
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-gif.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt
new file mode 100755 (executable)
index 0000000..5b07dc2
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-jpeg.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt
new file mode 100755 (executable)
index 0000000..9719d2c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp3.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt
new file mode 100755 (executable)
index 0000000..e81b261
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-mp4.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt
new file mode 100755 (executable)
index 0000000..a382abd
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-png.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt
new file mode 100755 (executable)
index 0000000..2a08518
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-view-wav.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-operation-wgt.html
new file mode 100755 (executable)
index 0000000..7d84895
--- /dev/null
@@ -0,0 +1,323 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Yufei Chen <yufeix.chen@intel.com>
+        Lin guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/main2.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="main">
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"appcontrol-operation-view-3gpp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/3gpp, URI is "Videos/3gpp.3gpp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-3gpp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-aac" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/aac, URI is "Sounds/aac.aac" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-aac" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-amr" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/amr, URI is "Sounds/amr.amr" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-amr" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-bmp" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/bmp, URI is "Images/bmp.bmp" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-bmp" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-gif" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/gif, URI is "Images/gif.gif" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-gif" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-jpeg" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/jpeg, URI is "Images/jpg.jpg" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-jpeg" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp3" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/mp3, URI is "Sounds/mp3.mp3" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp3" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-mp4" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is video/mp4, URI is "Videos/mp4.mp4" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-mp4" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-png" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is image/png, URI is "Images/png.png" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-png" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-view-wav" test Step: </p>
+            <ol>
+              <li>Choose: Operation is view, MIME is audio/wav, URI is "Sounds/wav.wav" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the appcontrol-test-app widget application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-view-wav" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-createcontent-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is create_content, MIME is video/*,URI is any video in the list. then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-createcontent-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-dial-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is dial, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-dial-null" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel, URI is "tel:10010" then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-call-tel" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-call-null" test Step: </p>
+            <ol>
+              <li>Choose: Operation is call, MIME is tel,  URI is "tel:null" then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-call-nulluri" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-audio" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is audio/*,URI is any audio file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-audio" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-pick-video" test Step: </p>
+            <ol>
+              <li>Choose: Operation is pick, MIME is video/*,URI is any video file in the list then press button "Launch Service APP".</li>
+              <li>Click appcontrol-operation... option.</li>
+              <li>Click "cancel" button</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>A popup displayed on the screen and several application can be selected.</li>
+              <li>A popup "Default application settings" displayed on the screen.</li>
+              <li>"operation-pick-video" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+
+            <p>"appcontrol-operation-multi_share" test Step: </p>
+            <ol>
+              <li>Choose: Operation is multi_share, MIME is image/*,URI is any image in the list then press button "Launch Service APP".</li>
+              <li>Close the widget application appcontrol-test-app.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>"operation-multi_share" is displayed on the screen.</li>
+              <li>The widget application appcontrol-test-app is closed successfully.</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt
new file mode 100755 (executable)
index 0000000..0223a8d
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/appcontrol-test-app.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt b/wearable/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt
new file mode 100755 (executable)
index 0000000..3eba38c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControl/res/unit-test-for-app-control.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControlExtending/index.html b/wearable/tct-behavior-tests/tests/AppControlExtending/index.html
new file mode 100755 (executable)
index 0000000..2a98175
--- /dev/null
@@ -0,0 +1,90 @@
+6<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview">
+                    <li data-role="list-divider">Test the custom feature</li>
+                    <li>
+                        <div data-role="button" id="install1" class="wgtButton">Install</div>
+                    </li>
+                    <li>
+                        <div data-role="button" id="launch1" class="wgtButton">Launch</div>
+                    </li>
+                    <li data-role="list-divider">Test the regular feature</li>
+                    <li>
+                        <div data-role="button" id="install2" class="wgtButton">Install</div>
+                    </li>
+                    <li>
+                        <div data-role="button" id="launch2" class="wgtButton">Launch</div>
+                    </li>
+                    <li data-role="list-divider">Packages Uninstall</li>
+                    <li>
+                        <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                    <p>Test Purpose: </p>
+                    <p>Verifies the functionality of launching the Application which control by user instead of system. Tests the two test Applications could be launched by App ID or customized AppControl's "operation" attribute by user.</p>
+                    <p>Test Step: </p>
+                    <ol>
+                        <li>Click the "Install" button to install the custom package.</li>
+                        <li>Click the "Launch" button to launch the custom package.</li>
+                        <li>Click the "Install" button to install the regular package.</li>
+                        <li>Click the "Launch" button to launch the regular package.</li>
+                        <li>Click the "Uninstall" button to uninstall the two widgets.</li>
+                    </ol>
+                    <p>Expected Result: </p>
+                    <p>Test passes if the test Applications launch successfully.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/AppControlExtending/js/main.js b/wearable/tct-behavior-tests/tests/AppControlExtending/js/main.js
new file mode 100755 (executable)
index 0000000..b0f4ad9
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+var installUrl1;
+var installUrl2;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install1").bind("vclick", function() {
+        install(installUrl1, "install1");
+    });
+    $("#install2").bind("vclick", function() {
+        install(installUrl2, "install2");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch("app-control1");
+        if(checkInstalledPkg("apcontrol2")) {
+            $("#install2").addClass("ui-disabled");
+            $("#launch2").removeClass("ui-disabled");
+        } else {
+            $("#install2").removeClass("ui-disabled");
+        }
+    });
+    $("#launch2").bind("vclick", function() {
+        launch("app-control2");
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        ["apcontrol1", "apcontrol2"].forEach(function(package_id) {
+            if(checkInstalledPkg(package_id)) {
+                setTimeout(function() {
+                    uninstall(package_id);
+                }, 1000);
+            }
+        });
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#install2").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+
+    if(checkInstalledPkg("apcontrol1")) {
+        $("#install1").addClass("ui-disabled");
+        $("#launch1").removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        alert("The package " + packageId + " is uninstalled");
+    }
+};
+
+function fileURI() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom_wgt.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl1 = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "app_control_regular_wgt.wgt")
+            {
+                var Url2 = files[i].toURI();
+                installUrl2 = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(url, type) {
+
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            if(type == "install1") {
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+            if(type == "install2") {
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>');
+            }
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(type == "install1") {
+                $("#install1").addClass("ui-disabled");
+                $("#launch1").removeClass("ui-disabled");
+                $("#install1").html('<div data-role="button" id="install1" style="height:40px; line-height:40px;">Install</div>');
+            }
+            if(type == "install2") {
+                $("#install2").addClass("ui-disabled");
+                $("#launch2").removeClass("ui-disabled");
+                $("#install2").html('<div data-role="button" id="install2" style="height:40px; line-height:40px;">Install</div>');
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+
+    var onUninstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            if(packageId == "apcontrol1") {
+                $("#launch1").addClass("ui-disabled");
+            }
+            if(packageId == "apcontrol2") {
+                $("#launch2").addClass("ui-disabled");
+                $("#uninstall").addClass("ui-disabled");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(option) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        if (option == "app-control1"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl1_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, null, onSuccess, onError, null);
+        }else if (option == "app-control2"){
+            var control;
+            var APP_CONTROL_OPERATION="http://tizen.org/appcontrol/operation/appControl2_c";
+            control = new tizen.ApplicationControl(APP_CONTROL_OPERATION, null, null, null, null);
+            tizen.application.launchAppControl(control, "apcontrol2.AppcontrolRegularWgt", onSuccess, onError, null);
+        }
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "app_control_custom.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/app_control_custom_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_custom.wgt Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "app_control_regular.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/app_control_regular_wgt.wgt",
+                    true,
+                    function() {
+                        console.log("app_control_regular.wgt Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/AppControlExtending/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom.wgt b/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom.wgt
new file mode 100755 (executable)
index 0000000..e91f5e3
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_custom.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular.wgt b/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular.wgt
new file mode 100755 (executable)
index 0000000..54a67f7
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/AppControlExtending/res/app_control_regular.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ApplicationInvisible/css/main.css b/wearable/tct-behavior-tests/tests/ApplicationInvisible/css/main.css
new file mode 100755 (executable)
index 0000000..5296294
--- /dev/null
@@ -0,0 +1,211 @@
+body{
+
+}
+.container {
+    padding: 50px;
+    text-align: center;
+}
+
+.timer {
+    padding: 10px;
+    background: -webkit-linear-gradient(top, #222, #444);
+    background: -moz-linear-gradient(top, #222, #444);
+    background: -ms-linear-gradient(top, #222, #444);
+    background: -o-linear-gradient(top, #222, #444);
+    background: linear-gradient(top, #222, #444);
+    overflow: hidden;
+    display: inline-block;
+    border: 7px solid #efefef;
+    border-radius: 5px;
+    position: relative;
+    box-shadow: inset 0 -2px 10px 1px rgba(0, 0, 0, 0.75), 0 5px 20px -10px rgba(0, 0, 0, 1);
+}
+
+.cell1 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.cell2 {
+
+    width: 0.60em;
+    height: 40px;
+    font-size: 50px;
+    overflow: hidden;
+    position: relative;
+    float: left;
+}
+
+.numbers {
+    width: 0.6em;
+    line-height: 40px;
+    font-family: digital, arial, verdana;
+    text-align: center;
+    color: #fff;
+    position: absolute;
+    top: 0;
+    left: 0;
+
+}
+
+
+#start:checked~.timer .numbers {
+  -webkit-animation-play-state: running;
+  -moz-animation-play-state: running;
+  -o-animation-play-state: running;
+  -ms-animation-play-state: running;
+  animation-play-state: running;
+}
+
+.moveten {
+
+    -webkit-animation: moveten 1s steps(10, end) infinite;
+    -moz-animation: moveten 1s steps(10, end) infinite;
+    -o-animation: moveten 1s steps(10, end) infinite;
+    -ms-animation: moveten 1s steps(10, end) infinite;
+    animation: moveten 1s steps(10, end) infinite;
+
+}
+.movesix {
+    -webkit-animation: movesix 1s steps(6, end) infinite;
+    -moz-animation: movesix 1s steps(6, end) infinite;
+    -o-animation: movesix 1s steps(6, end) infinite;
+    -ms-animation: movesix 1s steps(6, end) infinite;
+    animation: movesix 1s steps(6, end) infinite;
+}
+
+
+.second {
+ -webkit-animation-duration: 10s;
+ -moz-animation-duration: 10s;
+ -o-animation-duration: 10s;
+ -ms-animation-duration: 10s;
+ animation-duration: 10s;
+}
+.tensecond {
+  /*60 times .second*/
+  -webkit-animation-duration: 60s;
+  -moz-animation-duration: 60s;
+  -o-animation-duration: 60s;
+  -ms-animation-duration: 60s;
+  animation-duration: 60s;
+}
+
+.milisecond {
+  /*1/10th of .second*/
+  -webkit-animation-duration: 1s;
+    -moz-animation-duration: 1s;
+    -o-animation-duration: 1s;
+    -ms-animation-duration: 1s;
+    animation-duration: 1s;
+}
+.tenmilisecond {
+  -webkit-animation-duration: 0.1s;
+  -moz-animation-duration: 0.1s;
+  -ms-animation-duration: 0.1s;
+  -o-animation-duration: 0.1s;
+  animation-duration: 0.1s;
+}
+.hundredmilisecond {
+  -webkit-animation-duration: 0.01s;
+  -moz-animation-duration: 0.01s;
+  -o-animation-duration: 0.01s;
+  -ms-animation-duration: 0.01s;
+  animation-duration: 0.01s;
+}
+
+.minute {
+  /*60 times .second*/
+  -webkit-animation-duration: 600s;
+    -moz-animation-duration: 600s;
+    -o-animation-duration: 600s;
+    -ms-animation-duration: 600s;
+    animation-duration: 600s;
+}
+.tenminute {
+  /*60 times .minute*/
+  -webkit-animation-duration: 3600s;
+    -moz-animation-duration: 3600s;
+    -ms-animation-duration: 3600s;
+    -o-animation-duration: 3600s;
+    animation-duration: 3600s;
+}
+
+.hour {
+  /*60 times .minute*/
+  -webkit-animation-duration: 36000s;
+    -moz-animation-duration: 36000s;
+    -ms-animation-duration: 36000s;
+    -o-animation-duration: 36000s;
+    animation-duration: 36000s;
+}
+.tenhour {
+  /*10 times .hour*/
+  -webkit-animation-duration: 360000s;
+    -moz-animation-duration: 360000s;
+    -o-animation-duration: 360000s;
+    -ms-animation-duration: 360000s;
+    animation-duration: 360000s;
+}
+
+@-webkit-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-webkit-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+
+@-moz-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-moz-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-o-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-o-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@-ms-keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@-ms-keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
+@keyframes moveten {
+    0% {top: 0;}
+    100% {top: -400px;}
+    /*height = 40. digits = 10. hence -400 to move it completely to the top*/
+}
+
+@keyframes movesix {
+    0% {top: 0;}
+    100% {top: -240px;}
+    /*height = 40. digits = 6. hence -240 to move it completely to the top*/
+}
diff --git a/wearable/tct-behavior-tests/tests/ApplicationInvisible/index.html b/wearable/tct-behavior-tests/tests/ApplicationInvisible/index.html
new file mode 100755 (executable)
index 0000000..7ffba28
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <title>ApplicationInvisible</title>
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <link rel="stylesheet" type="text/css" href="css/main.css" />
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview" id="list">
+                    <li data-role="list-divider"><div>Enter time</div></li><li><div>
+                            <span id="en_time"></span>
+                        </div></li>
+                    <li data-role="list-divider"><div>Current time</div></li><li><div>
+                            <span id="current_time"></span>
+                        </div></li>
+                    <li data-role="list-divider"><div>Difference time</div></li><li><div>
+                            <span id="diff_time"></span>
+                        </div></li>
+                    <li data-role="list-divider"><div>JS time</div></li><li><div>
+                            <div class="container">
+                                <div class="timer">
+                                    <div class="cell1">
+                                        <div class="numbers" id="js_time_tensecond"></div>
+                                    </div>
+                                    <div class="cell2">
+                                        <div class="numbers" id="js_time_second"></div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div></li>
+                    <li data-role="list-divider"><div>Animation time :</div></li><li><div>
+                            <div class="container">
+                                <!-- time to add the controls -->
+                                <input id="start" name="controls" type="radio" checked hidden />
+                                <div class="timer">
+                                    <div class="cell1">
+                                        <div class="numbers tensecond movesix">0 1 2 3 4 5 6</div>
+                                    </div>
+                                    <div class="cell2">
+                                        <div class="numbers second moveten">0 1 2 3 4 5 6 7 8 9</div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div></li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                    <p>Test Purpose: </p>
+                    <p>Verifies js and css animation will suspend when application goes invisible.</p>
+                    <p>Test Step: </p>
+                    <ol>
+                        <li>Press the "Home" button on device to return to the menu.</li>
+                        <li>Long press "Home" button to start the "Task switcher" and select "tct-behavior-tests".</li>
+                    </ol>
+                    <p>Expected Result: </p>
+                    <ul>
+                        <li>The "JS time" is different from the "Difference time".</li>
+                        <li>The "Animation time" is different from the "Difference time".</li>
+                    </ul>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationInvisible/js/main.js b/wearable/tct-behavior-tests/tests/ApplicationInvisible/js/main.js
new file mode 100755 (executable)
index 0000000..64d5bf1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+
+*/
+
+var systime = new Date();
+var timer = systime.getTime();
+var timer2 = systime.toString().substr(15, 16);
+// Time interval
+var t = 1000;
+//Counter of js
+var Num = 0;
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    Refresh();
+    setInterval("Refresh();", t);
+    //The time when entry this page timer2
+    $("#en_time").html(timer2);
+    DisablePassButton();
+    document.addEventListener(visibilitychange, notification);
+});
+
+function Refresh() {
+    Num = Num + 1;
+    //The current time
+    var curtime = new Date();
+    var timer3 = curtime.toString().substr(15, 16);
+    $("#current_time").html(timer3);
+    //The true timer: NowTime - entryTime
+    $("#diff_time").html(Math.floor((new Date().getTime()-timer)/t) % 60);
+    //The timer of js
+    $("#js_time_tensecond").html((Num-1) / 10);
+    $("#js_time_second").html((Num-1) % 10);
+    if(Num == 60){
+        Num = 0;
+    }
+}
+
+function notification() {
+    EnablePassButton();
+}
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/index.html b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/index.html
new file mode 100755 (executable)
index 0000000..4958fb3
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test common directives</li>
+                <li id="lifecycle-background-foreground-nosevice">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-nosevice.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-nosevice</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-background-foreground-service">
+                    <a href="javascript:goToApp('res/lifecycle-background-foreground-service.html')" data-transition="slide" style="">
+                        <h2>lifecycle-background-foreground-service</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-page-visibility-visibilitychange">
+                    <a href="javascript:goToApp('res/lifecycle-page-visibility-visibilitychange.html')" data-transition="slide" style="">
+                        <h2>lifecycle-page-visibility-visibilitychange</h2>
+                    </a>
+                </li>
+                <li id="lifecycle-powerfailure-reinstall">
+                    <a href="javascript:goToApp('res/lifecycle-powerfailure-reinstall.html')" data-transition="slide" style="">
+                        <h2>lifecycle-powerfailure-reinstall</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies for applications whose execution was suspended the WRT must resume JavaScript execution and rendering(including CSS animations) when Web Application enters visible state.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/main.js
new file mode 100755 (executable)
index 0000000..b990feb
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt3css172',
+                    'wrt3css171',
+                    'wrt3css170',
+                    'wrt1nj0035',
+                    'wrt1nj0036',
+                    'wrt1nj0033',
+                    'wrt1nj0037',
+                    'wrt3lrj019');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ApplicationLifecycle";
+var RESULT_FILE_NAME = "tct-behavior-child.applicationlifecycle.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/js/tests.js
new file mode 100755 (executable)
index 0000000..ab10dea
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ApplicationLifecycle/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.html
new file mode 100755 (executable)
index 0000000..6c36e8f
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-nosevice">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-nosevice"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0035.lifecycleBackgroundForegroundNoservice"/>
+                <input type="hidden" id="package_id" value="wrt1nj0035"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt
new file mode 100755 (executable)
index 0000000..c45067f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-nosevice.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.html
new file mode 100755 (executable)
index 0000000..3e7fbfc
--- /dev/null
@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-background-foreground-service">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-background-foreground-service"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0036.lifecycleBackgroundForegroundService"/>
+                <input type="hidden" id="package_id" value="wrt1nj0036"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+                                <li>Tap Check button to check result.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                <li>The widget switch back.</li>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt
new file mode 100755 (executable)
index 0000000..29b6524
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-background-foreground-service.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.html
new file mode 100755 (executable)
index 0000000..26817d1
--- /dev/null
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2012 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfenx.hao@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-page-visibility-visibilitychange">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-page-visibility-visibilitychange"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0033.lifecyclePageVisibilitychange"/>
+                <input type="hidden" id="package_id" value="wrt1nj0033"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <ol>
+                 <li>Click the home key to hide the widget, and then hold on home key for 3 seconds and switch back to it.</li>
+              </ol>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>The widget installed successfully</li>
+              <li>The widget launcher successfully</li>
+              <ol>
+                               <li>A "PASS" displayed on the screen.</li>
+              </ol>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt
new file mode 100755 (executable)
index 0000000..4637c12
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-page-visibility-visibilitychange.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.html
new file mode 100755 (executable)
index 0000000..fb21e9b
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-powerfailure-reinstall">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-powerfailure-reinstall"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0037.lifecyclepowerfailurereinstall"/>
+                <input type="hidden" id="package_id" value="wrt1nj0037"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+                         <li>Use another device with same image and same behavior tool to test.</li>
+              <li>In another device, click the "Install" button to install the widget.</li>
+              <li>In another device, remove battery soon after install the test widget.</li>
+                         <li>Reboot another device and goto behavior to reinstall widget by click the "Install" button.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+                         <li>Another device have installed same version behavior tool</li>
+              <li>The widget installed successfully</li>
+              <li>Device power off, widget install fail</li>
+              <li>Web Application recover to its original state prior, can re-install the application</li>
+              <li>The widget uninstalled successfully</li>
+            </ol>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt
new file mode 100755 (executable)
index 0000000..ac90c7e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ApplicationLifecycle/res/lifecycle-powerfailure-reinstall.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/index.html b/wearable/tct-behavior-tests/tests/CSP/index.html
new file mode 100755 (executable)
index 0000000..66efe17
--- /dev/null
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                    <li data-role="list-divider" role="heading">Test common directives</li>
+                    <li id="csp-none">
+                        <a href="javascript:goToApp('res/csp-none.html')" data-transition="slide" style="">
+                            <h2>csp-none</h2>
+                        </a>
+                    </li>
+                    <li id="csp-self">
+                        <a href="javascript:goToApp('res/csp-self.html')" data-transition="slide" style="">
+                            <h2>csp-self</h2>
+                        </a>
+                    </li>
+                    <li id="csp-asterisk">
+                        <a href="javascript:goToApp('res/csp-asterisk.html')" data-transition="slide" style="">
+                            <h2>csp-asterisk</h2>
+                        </a>
+                    </li>
+                    <li id="csp-cross-origin">
+                        <a href="javascript:goToApp('res/csp-cross-origin.html')" data-transition="slide" style="">
+                            <h2>csp-cross-origin</h2>
+                        </a>
+                    </li>
+                    <li id="default-policy-by-directives-csp">
+                        <a href="javascript:goToApp('res/default-policy-by-directives-csp.html')" data-transition="slide" style="">
+                            <h2>default-policy-by-directives-csp</h2>
+                        </a>
+                    </li>
+                    <li id="default-policy-by-directives-report-only">
+                        <a href="javascript:goToApp('res/default-policy-by-directives-report-only.html')" data-transition="slide" style="">
+                            <h2>default-policy-by-directives-report-only</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test default-src directive</li>
+                    <li id="default-src_none">
+                        <a href="javascript:goToApp('res/default-src_none.html')" data-transition="slide" style="">
+                            <h2>default-src-none</h2>
+                        </a>
+                    </li>
+                    <li id="default-src_self">
+                        <a href="javascript:goToApp('res/default-src_self.html')" data-transition="slide" style="">
+                            <h2>default-src-self</h2>
+                        </a>
+                    </li>
+                    <li id="default-src_asterisk">
+                        <a href="javascript:goToApp('res/default-src_asterisk.html')" data-transition="slide" style="">
+                            <h2>default-src-asterisk</h2>
+                        </a>
+                    </li>
+                    <li id="default-src_cross_origin">
+                        <a href="javascript:goToApp('res/default-src_cross_origin.html')" data-transition="slide" style="">
+                            <h2>default-src-cross-origin</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test sandbox directive</li>
+                    <li id="sandbox-empty-ext">
+                        <a href="javascript:goToApp('res/sandbox-empty-ext.html')" data-transition="slide" style="">
+                            <h2>sandbox-empty-ext</h2>
+                        </a>
+                    </li>
+                    <li id="sandbox-empty-int">
+                        <a href="javascript:goToApp('res/sandbox-empty-int.html')" data-transition="slide" style="">
+                            <h2>sandbox-empty-int</h2>
+                        </a>
+                    </li>
+                    <li id="sandbox-empty-inline">
+                        <a href="javascript:goToApp('res/sandbox-empty-inline.html')" data-transition="slide" style="">
+                            <h2>sandbox-empty-inline</h2>
+                        </a>
+                    </li>
+                    <li id="sandbox-same-origin-allow-scripts">
+                        <a href="javascript:goToApp('res/sandbox-same-origin-allow-scripts.html')" data-transition="slide" style="">
+                            <h2>sandbox-same-origin-allow-scripts</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test script-src directive</li>
+                    <li id="script-src_none">
+                        <a href="javascript:goToApp('res/script-src_none.html')" data-transition="slide" style="">
+                            <h2>script-src-none</h2>
+                        </a>
+                    </li>
+                    <li id="script-src_inline_eval">
+                        <a href="javascript:goToApp('res/script-src_inline_eval.html')" data-transition="slide" style="">
+                            <h2>script-src-inline-eval</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test style-src directive</li>
+                    <li id="style-src_self">
+                        <a href="javascript:goToApp('res/style-src_self.html')" data-transition="slide" style="">
+                            <h2>style-src-self</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                    <li>
+                        <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                    <p>Test Note: </p>
+                    <p>Verifies the functionality of CSP worked well.</p>
+                    <p>Test Pre-condition: </p>
+                    <p>Tinyweb server launched with the command: "tinyweb -ssl_certificate /usr/share/tinyweb/server.pem -document_root / -listening_ports 80,8080,8081,8082,8083,8443s".</p>
+                    <p>Test Purpose: </p>
+                    <p>Verifies the functionality of CSP worked well when script-src, object-src, style-src, img-src, media-src, frame-src, font-src, connect-src directives set different values.</p>
+                    <p>Expected Result: </p>
+                    <p>Test passes if all sub-tests pass.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/js/main.js b/wearable/tct-behavior-tests/tests/CSP/js/main.js
new file mode 100755 (executable)
index 0000000..dec3af3
--- /dev/null
@@ -0,0 +1,304 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('beh1csp001',
+                    'beh1csp002',
+                    'beh1csp003',
+                    'beh1csp004',
+                    'beh1csp005',
+                    'beh1csp006',
+                    'beh1csp007',
+                    'beh1csp008',
+                    'beh1csp009',
+                    'beh1csp010',
+                    'beh1csp011',
+                    'beh1csp012',
+                    'beh1csp013',
+                    'beh1csp014',
+                    'beh1csp015',
+                    'beh1csp016',
+                    'beh1csp017');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CSP";
+var RESULT_FILE_NAME = "tct-behavior-child.csp.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/CSP/js/tests.js b/wearable/tct-behavior-tests/tests/CSP/js/tests.js
new file mode 100755 (executable)
index 0000000..7a1ab1e
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CSP/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.html b/wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.html
new file mode 100755 (executable)
index 0000000..cb0d909
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp001.cspasterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>$ web-tct_2.3/tools/python tct-config-device.py --check proc=tinyweb</li>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt b/wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt
new file mode 100755 (executable)
index 0000000..30b3180
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/csp-asterisk.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html b/wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.html
new file mode 100755 (executable)
index 0000000..ee39244
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-cross-origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-cross-origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp002.cspcrossorigin"/>
+                <input type="hidden" id="package_id" value="beh1csp002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...8, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt b/wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt
new file mode 100755 (executable)
index 0000000..ee610b9
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/csp-cross-origin.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-none.html b/wearable/tct-behavior-tests/tests/CSP/res/csp-none.html
new file mode 100755 (executable)
index 0000000..44726ba
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-none"/>
+                <input type="hidden" id="app_id"  value="beh1csp003.cspnone"/>
+                <input type="hidden" id="package_id" value="beh1csp003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-none.wgt b/wearable/tct-behavior-tests/tests/CSP/res/csp-none.wgt
new file mode 100755 (executable)
index 0000000..f9482db
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/csp-none.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-self.html b/wearable/tct-behavior-tests/tests/CSP/res/csp-self.html
new file mode 100755 (executable)
index 0000000..80119c3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-self"/>
+                <input type="hidden" id="app_id"  value="beh1csp004.cspself"/>
+                <input type="hidden" id="package_id" value="beh1csp004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...7, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/csp-self.wgt b/wearable/tct-behavior-tests/tests/CSP/res/csp-self.wgt
new file mode 100755 (executable)
index 0000000..285c753
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/csp-self.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.html
new file mode 100755 (executable)
index 0000000..056e2aa
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-csp">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-csp"/>
+                <input type="hidden" id="app_id"  value="beh1csp016.DefaultPolicyByDirectivesCsp"/>
+                <input type="hidden" id="package_id" value="beh1csp016"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt
new file mode 100755 (executable)
index 0000000..8d252e6
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-csp.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.html
new file mode 100755 (executable)
index 0000000..210de3f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-policy-by-directives-report-only">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-policy-by-directives-report-only"/>
+                <input type="hidden" id="app_id"  value="beh1csp017.DefaultPolicyByDirectivesReportOnly"/>
+                <input type="hidden" id="package_id" value="beh1csp017"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...6, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt
new file mode 100755 (executable)
index 0000000..5dd183f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-policy-by-directives-report-only.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html b/wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.html
new file mode 100755 (executable)
index 0000000..21b20d3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_asterisk">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_asterisk"/>
+                <input type="hidden" id="app_id"  value="beh1csp015.defaultSrcAsterisk"/>
+                <input type="hidden" id="package_id" value="beh1csp015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt
new file mode 100755 (executable)
index 0000000..0061262
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-src_asterisk.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html b/wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.html
new file mode 100755 (executable)
index 0000000..8d87ec4
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_cross_origin">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_cross_origin"/>
+                <input type="hidden" id="app_id"  value="beh1csp014.defaultSrcCrossOrigin"/>
+                <input type="hidden" id="package_id" value="beh1csp014"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...2, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt
new file mode 100755 (executable)
index 0000000..22335c8
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-src_cross_origin.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_none.html b/wearable/tct-behavior-tests/tests/CSP/res/default-src_none.html
new file mode 100755 (executable)
index 0000000..80e804f
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp013.defaultSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_none.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-src_none.wgt
new file mode 100755 (executable)
index 0000000..4a7044d
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-src_none.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_self.html b/wearable/tct-behavior-tests/tests/CSP/res/default-src_self.html
new file mode 100755 (executable)
index 0000000..ce74561
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="default-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="default-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp012.defaultSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp012"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all "TestN", N=1...5, pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/default-src_self.wgt b/wearable/tct-behavior-tests/tests/CSP/res/default-src_self.wgt
new file mode 100755 (executable)
index 0000000..c1e41cf
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/default-src_self.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/movie_5.mp4 b/wearable/tct-behavior-tests/tests/CSP/res/movie_5.mp4
new file mode 100755 (executable)
index 0000000..fb5dbca
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/movie_5.mp4 differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.html
new file mode 100755 (executable)
index 0000000..9887134
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-ext">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-ext"/>
+                <input type="hidden" id="app_id"  value="beh1csp011.sandboxemptyext"/>
+                <input type="hidden" id="package_id" value="beh1csp011"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt
new file mode 100755 (executable)
index 0000000..33a8fd2
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-ext.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.html
new file mode 100755 (executable)
index 0000000..429f724
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-inline">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-inline"/>
+                <input type="hidden" id="app_id"  value="beh1csp010.sandboxemptyinline"/>
+                <input type="hidden" id="package_id" value="beh1csp010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt
new file mode 100755 (executable)
index 0000000..f6b7927
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-inline.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.html
new file mode 100755 (executable)
index 0000000..b4d5361
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-empty-int">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-empty-int"/>
+                <input type="hidden" id="app_id"  value="beh1csp009.sandboxemptyint"/>
+                <input type="hidden" id="package_id" value="beh1csp009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is no text "FAIL" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt
new file mode 100755 (executable)
index 0000000..4e8d0a3
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-empty-int.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.html
new file mode 100755 (executable)
index 0000000..ed7b809
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="sandbox-same-origin-allow-scripts">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="sandbox-same-origin-allow-scripts"/>
+                <input type="hidden" id="app_id"  value="beh1csp008.sandboxsameoriginallowscripts"/>
+                <input type="hidden" id="package_id" value="beh1csp008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are three "Pass" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt
new file mode 100755 (executable)
index 0000000..1d5d39c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/sandbox-same-origin-allow-scripts.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html b/wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.html
new file mode 100755 (executable)
index 0000000..0f27d80
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_inline_eval">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_inline_eval"/>
+                <input type="hidden" id="app_id" value="beh1csp006.scriptSrcInlineEval"/>
+                <input type="hidden" id="package_id" value="beh1csp006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt b/wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt
new file mode 100755 (executable)
index 0000000..fd9b567
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/script-src_inline_eval.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/script-src_none.html b/wearable/tct-behavior-tests/tests/CSP/res/script-src_none.html
new file mode 100755 (executable)
index 0000000..a71d24b
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="script-src_none">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="script-src_none"/>
+                <input type="hidden" id="app_id"  value="beh1csp007.scriptSrcNone"/>
+                <input type="hidden" id="package_id" value="beh1csp007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/script-src_none.wgt b/wearable/tct-behavior-tests/tests/CSP/res/script-src_none.wgt
new file mode 100755 (executable)
index 0000000..d70b319
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/script-src_none.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/style-src_self.html b/wearable/tct-behavior-tests/tests/CSP/res/style-src_self.html
new file mode 100755 (executable)
index 0000000..e049128
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="style-src_self">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="style-src_self"/>
+                <input type="hidden" id="app_id"  value="beh1csp005.styleSrcSelf"/>
+                <input type="hidden" id="package_id" value="beh1csp005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a "PASS" under a blue square.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSP/res/style-src_self.wgt b/wearable/tct-behavior-tests/tests/CSP/res/style-src_self.wgt
new file mode 100755 (executable)
index 0000000..415ed98
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CSP/res/style-src_self.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css b/wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/css/style.css
new file mode 100755 (executable)
index 0000000..9170c1b
--- /dev/null
@@ -0,0 +1,179 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        li, cici <cici.x.li@intel.com>
+
+*/
+
+@keyframes cssAnimate
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;background:; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-webkit-keyframes cssAnimate /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotate(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-180deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-moz-keyframes cssAnimate /* Firefox */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@-o-keyframes cssAnimate /* Opera */
+{
+0%      {-webkit-transform: rotate(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px;; }
+20%     {-webkit-transform: rotate(0deg);left:80%;background: pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; border-radius:5px;}
+60%     {-webkit-transform: rotate(-360deg);left:0px; background: green;}
+80%     {-webkit-transform: rotate(360deg);left:0px; background: red}
+100%     {-webkit-transform: rotate(360deg);left:0px;border-radius:100%;}
+}
+
+@keyframes cssAnimate2
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink; }
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-webkit-keyframes cssAnimate2 /* Safari and Chrome */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotate(20deg);left:0px; }
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-180deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-moz-keyframes cssAnimate2 /* Firefox */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green;}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+@-o-keyframes cssAnimate2 /* Opera */
+{
+0%      {-webkit-transform: rotateY(0deg);left:0px; }
+10%     {-webkit-transform: rotateY(20deg);left:0px;}
+20%     {-webkit-transform: rotateY(0deg);left:80%;background:pink;}
+40%     {-webkit-transform: rotateY(0deg);left:80%;background:#1ec7e6; }
+60%     {-webkit-transform: rotateY(-360deg);left:0px;background: green}
+80%     {-webkit-transform: rotateY(360deg);left:0px;background:red;}
+100%     {-webkit-transform: rotateY(360deg);left:0px;border-radius:5px;}
+}
+
+#testbox1
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate 10s 1;
+        -webkit-animation:cssAnimate 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate 10s 1; /* Firefox */
+        -o-animation:cssAnimate 10s 1; /* Opera */
+        border-radius:5px;
+        -webkit-border-radius:5px;
+}
+
+#testbox2
+{
+        width:25px;
+        height:25px;
+        background:#92B901;
+        color:#ffffff;
+        position:relative;
+        font-weight:bold;
+        font:bold 8px Verdana, Arial, Helvetica, sans-serif;
+        padding:20px 10px 0px 10px;
+
+        animation:cssAnimate2 10s 1;
+        -webkit-animation:cssAnimate2 10s 1; /* Safari and Chrome */
+        -moz-animation:cssAnimate2 10s 1; /* Firefox */
+        -o-animation:cssAnimate2 10s 1; /* Opera */
+        border-radius:15px;
+        -webkit-border-radius:100px;
+}
+
+#box {
+        height: 100%;
+        width: 80%;
+        margin: 5px auto;
+        box-shadow: 10px 10px 5px #888888;
+        border:5px #92B901 outset;
+        border-radius:20px;
+        transition: border 1s linear;
+        -webkit-transition: border 1s linear;
+}
+
+#box.final {
+        border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+        width: 100%;
+        height: 300px;
+        padding: 30px 0px;
+        border: 3px  #000;
+}
diff --git a/wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html b/wearable/tct-behavior-tests/tests/CSS-AnimTransfBackgBordFont/index.html
new file mode 100755 (executable)
index 0000000..ac16016
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script type="text/javascript">
+            function reloadTest () {
+                document.location.reload();
+            }
+        </script>
+
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <div data-role="content">
+            <div class="display_box">
+                <div id="box">
+                    <div id="testbox1" style="color:black; top:25%"> SQUARE </div>
+                    <div id="testbox2" style="color:white; top:25%"> CIRCLE </div>
+                </div>
+            </div>
+            <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+        </div>
+
+
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div style="font-size:85%">
+                <p>Test Purpose: </p>
+                <p>Verifies the CSS two boxes: </p>
+                <p>1. Color is changing in order of green, pink, blue, green, red, green; </p>
+                <p>2. Square/Circle move with 20 degree direction from left to right; </p>
+                <p>3. About rotate direction from left to right, square is rotate in 2D(180degree), circle is rotate in 3D(Y-axis); </p>
+                <p>4. Square/circle is transfering between square/circle when moving from right to left; </p>
+                <p>5. About font type, "SQUARE" is black, "CIRCLE" is white, both are 8 px size; </p>
+                <p>6. About frame box border, style is outset in green, with gray shadow. </p>
+                <p>Expected Result: </p>
+                <p>This test PASS only if the transformation and animation function well follow above 6 rules.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSSAnimation/css/style.css b/wearable/tct-behavior-tests/tests/CSSAnimation/css/style.css
new file mode 100755 (executable)
index 0000000..cb2e375
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+@-webkit-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 150px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@-moz-keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 150px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+@keyframes sample {
+    from {
+        background-color: red;
+        left: 0px;
+    }
+    50% {
+        background-color: green;
+        left: 150px;
+    }
+    to {
+        background-color: blue;
+        left: 0px;
+    }
+}
+
+#testBox {
+    background-color: red;
+    width: 100px;
+    height: 100px;
+    position: relative;
+    margin: 20px 8px;
+    border: 3px solid yellow;
+    /* Transition */
+    -webkit-transition-duration: 5s;
+    -webkit-transition-timing-function: linear;
+
+     color: Yellow;
+     text-align: center;
+     vertical-align: middle;
+
+
+    -webkit-animation-name: sample;
+    -webkit-animation-duration: 10s;
+    -webkit-animation-timing-function: ease;
+    -webkit-animation-delay: 2s;
+    -webkit-animation-play-state: running;
+    -webkit-animation-iteration-count: 10;
+    -webkit-animation-direction: normal;
+
+    -moz-animation-name: sample;
+    -moz-animation-duration: 10s;
+    -moz-animation-timing-function: ease;
+    -moz-animation-delay: 2s;
+    -moz-animation-play-state: running;
+    -moz-animation-iteration-count: 10;
+    -moz-animation-direction: normal;
+
+    animation-name: sample;
+    animation-duration: 10s;
+    animation-timing-function: ease;
+    animation-delay: 2s;
+    animation-play-state: running;
+    animation-iteration-count: 10;
+    animation-direction: normal;
+}
+
+#testBox.final {
+    border-radius: 50px;
+    -webkit-border-radius: 50px;
+    transition-delay: 2s;
+    -webkit-transition-delay: 2s;
+}
+
+#box {
+    height: 150px;
+    width: 275px;
+    margin: 0px auto;
+    background-color: #ccc;
+    border: 0px solid rgb(0, 0, 255);
+    transition: border 1s linear;
+    -webkit-transition: border 1s linear;
+}
+
+#box.final {
+    border: 7px dashed rgb(0, 0, 255);
+}
+
+/* Test Display Box */
+.display_box {
+    width: 100%;
+    height: 180px;
+    padding: 30px 0px;
+    border: 1px solid #000;
+}
diff --git a/wearable/tct-behavior-tests/tests/CSSAnimation/index.html b/wearable/tct-behavior-tests/tests/CSSAnimation/index.html
new file mode 100755 (executable)
index 0000000..2d7aece
--- /dev/null
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/transition-test-helpers.js"></script>
+        <script type="text/javascript">
+            var box_txt = "1",
+                expectedValues = [
+                    [0.25, "testBox", "border-radius", 25, 500]
+                ],
+                expectedValues2 = [
+                    [0.5, "box", "border-top-color", [128, 0, 128], 300],
+                    [0.5, "box", "border-right-color", [128, 0, 128], 300],
+                    [0.5, "box", "border-bottom-color", [128, 0, 128], 300],
+                    [0.5, "box", "border-left-color", [128, 0, 128], 300],
+                    [0.5, "box", "border-top-width", 10, 200],
+                    [0.5, "box", "border-right-width", 10, 200],
+                    [0.5, "box", "border-bottom-width", 10, 200],
+                    [0.5, "box", "border-left-width", 10, 200]
+                ];
+            function init () {
+                test_box = document.getElementById("testBox");
+                test_box.addEventListener("webkitAnimationIteration", start_f, true);
+                test_box.addEventListener("animationiteration", start_f, true);
+            }
+            function start_f () {
+                try {
+                    box_txt = test_box.innerText;
+                    test_box.innerText = parseInt(box_txt, 10) + 1;
+                    if (test_box.innerText % 2 === 0) {
+                        $("#testBox").removeClass("final");
+                    } else {
+                        $("#testBox").addClass("final");
+                    }
+                } catch (err) {
+                    test_box.innerText = box_txt;
+                }
+            }
+
+            function reloadTest () {
+                document.location.reload();
+            }
+            function setupTest () {
+                document.getElementById("testBox").className = "testBox final";
+            }
+            function setupTest2 () {
+                var box = document.getElementById("box");
+                box.className = "final";
+            }
+            runTransitionTest(expectedValues, setupTest, usePauseAPI);
+            runTransitionTest(expectedValues2, setupTest2, usePauseAPI);
+        </script>
+    </head>
+    <body bgcolor="FFFFFF"  onload="init()">
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div class="display_box">
+                <div id="box">
+                    <div id="testBox">1</div>
+                </div>
+            </div>
+            <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the CSS box is transferring between square and circle when moving from left to right, its background color is changing in the order of red, green and blue, and the counter record the times of CSS animation from 1 to 10.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the transformation and animation functions all work well.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSSAnimation/js/COPYING b/wearable/tct-behavior-tests/tests/CSSAnimation/js/COPYING
new file mode 100755 (executable)
index 0000000..86c307b
--- /dev/null
@@ -0,0 +1,6 @@
+The code of main.js comes from
+http://svn.webkit.org/repository/webkit/trunk/LayoutTests/transitions/resources/transition-test-helpers.js
+without modification.
+
+These resources are under BSD Two Clause License:
+http://trac.webkit.org/browser/trunk/Source/WebKit/LICENSE
diff --git a/wearable/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js b/wearable/tct-behavior-tests/tests/CSSAnimation/js/transition-test-helpers.js
new file mode 100755 (executable)
index 0000000..614e1c9
--- /dev/null
@@ -0,0 +1,298 @@
+/* This is the helper function to run transition tests:
+
+ Test page requirements:
+ - The body must contain an empty div with id "result"
+ - Call this function directly from the <script> inside the test page
+
+ Function parameters:
+ expected [required]: an array of arrays defining a set of CSS properties that must have given values at specific times (see below)
+ callback [optional]: a function to be executed just before the test starts (none by default)
+
+ Each sub-array must contain these items in this order:
+ - the time in seconds at which to snapshot the CSS property
+ - the id of the element on which to get the CSS property value
+ - the name of the CSS property to get [1]
+ - the expected value for the CSS property
+ - the tolerance to use when comparing the effective CSS property value with its expected value
+
+ [1] If the CSS property name is "-webkit-transform", expected value must be an array of 1 or more numbers corresponding to the matrix elements,
+ or a string which will be compared directly (useful if the expected value is "none")
+ If the CSS property name is "-webkit-transform.N", expected value must be a number corresponding to the Nth element of the matrix
+
+ */
+
+var usePauseAPI = true;
+var dontUsePauseAPI = false;
+
+var shouldBeTransitioning = true;
+var shouldNotBeTransitioning = false;
+
+function roundNumber (num, decimalPlaces) {
+    return Math.round(num * Math.pow(10, decimalPlaces)) / Math.pow(10, decimalPlaces);
+}
+
+function isCloseEnough (actual, desired, tolerance) {
+    var diff = Math.abs(actual - desired);
+    return diff <= tolerance;
+}
+
+function isShadow (property) {
+    return (property === "-webkit-box-shadow" || property === "text-shadow");
+}
+
+function getShadowXY (cssValue) {
+    var text = cssValue.cssText,
+        shadowPositionRegExp = /\)\s*(-?\d+)px\s*(-?\d+)px/,
+        result = shadowPositionRegExp.exec(text);
+    return [parseInt(result[1], 10), parseInt(result[2], 10)];
+}
+
+function compareRGB (rgb, expected, tolerance) {
+    return (isCloseEnough(parseInt(rgb[0], 10), expected[0], tolerance) &&
+            isCloseEnough(parseInt(rgb[1], 10), expected[1], tolerance) &&
+            isCloseEnough(parseInt(rgb[2], 10), expected[2], tolerance));
+}
+
+function parseCrossFade (s) {
+    var matches = s.match("-webkit-cross-fade\\((.*)\\s*,\\s*(.*)\\s*,\\s*(.*)\\)");
+
+    if (!matches) {
+        return null;
+    }
+    return {
+        "from": matches[1],
+        "to": matches[2],
+        "percent": parseFloat(matches[3])
+    };
+}
+
+function checkExpectedValue (expected, index) {
+    var time = expected[index][0], elementId = expected[index][1], property = expected[index][2],
+        expectedValue = expected[index][3], tolerance = expected[index][4], postCompletionCallback = expected[index][5],
+        computedValue, pass = false, transformRegExp = /^-webkit-transform(\.\d+)?$/, m, components, computedStyle,
+        values, i, shadowXY, rgbColor;
+    if (transformRegExp.test(property)) {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).webkitTransform;
+        if (typeof expectedValue === "string") {
+            pass = (computedValue === expectedValue);
+        } else if (typeof expectedValue === "number") {
+            m = computedValue.split("(");
+            m = m[1].split(",");
+            pass = isCloseEnough(parseFloat(m[parseInt(property.substring(18), 10)]), expectedValue, tolerance);
+        } else {
+            m = computedValue.split("(");
+            m = m[1].split(",");
+            for (i = 0; i < expectedValue.length; ++i) {
+                pass = isCloseEnough(parseFloat(m[i]), expectedValue[i], tolerance);
+                if (!pass) {
+                    break;
+                }
+            }
+        }
+    } else if (property === "fill" || property === "stroke") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).rgbColor;
+        if (compareRGB([computedValue.red.cssText, computedValue.green.cssText, computedValue.blue.cssText], expectedValue, tolerance)) {
+            pass = true;
+        } else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        }
+    } else if (property === "stop-color" || property === "flood-color" || property === "lighting-color") {
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        // The computedValue cssText is rgb(num, num, num)
+        components = computedValue.cssText.split("(")[1].split(")")[0].split(",");
+        if (compareRGB(components, expectedValue, tolerance)) {
+            pass = true;
+        } else {
+            // We failed. Make sure computed value is something we can read in the error message
+            computedValue = computedValue.cssText;
+        }
+    } else if (property === "lineHeight") {
+        computedValue = parseInt(window.getComputedStyle(document.getElementById(elementId)).lineHeight, 10);
+        pass = isCloseEnough(computedValue, expectedValue, tolerance);
+    } else if (property === "background-image" ||
+            property === "border-image-source" ||
+            property === "border-image" ||
+            property === "list-style-image" ||
+            property === "-webkit-mask-image" ||
+            property === "-webkit-mask-box-image") {
+        if (property === "border-image" || property === "-webkit-mask-image" || property === "-webkit-mask-box-image") {
+            property += "-source";
+        }
+
+        computedValue = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property).cssText;
+        computedCrossFade = parseCrossFade(computedValue);
+
+        if (!computedCrossFade) {
+            pass = false;
+        } else {
+            pass = isCloseEnough(computedCrossFade.percent, expectedValue, tolerance);
+        }
+    } else {
+        computedStyle = window.getComputedStyle(document.getElementById(elementId)).getPropertyCSSValue(property);
+        if (computedStyle.cssValueType === CSSValue.CSS_VALUE_LIST) {
+            values = [];
+            for (i = 0; i < computedStyle.length; ++i) {
+                switch (computedStyle[i].cssValueType) {
+                    case CSSValue.CSS_PRIMITIVE_VALUE:
+                        values.push(computedStyle[i].getFloatValue(CSSPrimitiveValue.CSS_NUMBER));
+                        break;
+                    case CSSValue.CSS_CUSTOM:
+                        // arbitrarily pick shadow-x and shadow-y
+                        if (isShadow) {
+                            shadowXY = getShadowXY(computedStyle[i]);
+                            values.push(shadowXY[0]);
+                            values.push(shadowXY[1]);
+                        } else {
+                            values.push(computedStyle[i].cssText);
+                        }
+                        break;
+                }
+            }
+            computedValue = values.join(",");
+            pass = true;
+            for (i = 0; i < values.length; ++i) {
+                pass &= isCloseEnough(values[i], expectedValue[i], tolerance);
+            }
+        } else if (computedStyle.cssValueType === CSSValue.CSS_PRIMITIVE_VALUE) {
+            switch (computedStyle.primitiveType) {
+                case CSSPrimitiveValue.CSS_STRING:
+                case CSSPrimitiveValue.CSS_IDENT:
+                    computedValue = computedStyle.getStringValue();
+                    pass = computedValue === expectedValue;
+                    break;
+                case CSSPrimitiveValue.CSS_RGBCOLOR:
+                    rgbColor = computedStyle.getRGBColorValue();
+                    computedValue = [rgbColor.red.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                        rgbColor.green.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                        rgbColor.blue.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)]; // alpha is not exposed to JS
+                    pass = true;
+                    for (i = 0; i < 3; ++i) {
+                        pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    }
+                    break;
+                case CSSPrimitiveValue.CSS_RECT:
+                    computedValue = computedStyle.getRectValue();
+                    computedValue = [computedValue.top.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                        computedValue.right.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                        computedValue.bottom.getFloatValue(CSSPrimitiveValue.CSS_NUMBER),
+                        computedValue.left.getFloatValue(CSSPrimitiveValue.CSS_NUMBER)];
+                    pass = true;
+                    for (i = 0; i < 4; ++i) {
+                        pass &= isCloseEnough(computedValue[i], expectedValue[i], tolerance);
+                    }
+                    break;
+                case CSSPrimitiveValue.CSS_PERCENTAGE:
+                    computedValue = parseFloat(computedStyle.cssText);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+                    break;
+                default:
+                    computedValue = computedStyle.getFloatValue(CSSPrimitiveValue.CSS_NUMBER);
+                    pass = isCloseEnough(computedValue, expectedValue, tolerance);
+            }
+        }
+    }
+
+    if (pass) {
+        result += "PASS - \"" + property + "\" property for \"" + elementId +
+            "\" element at " + time + "s saw something close to: " + expectedValue + "<br>";
+    } else {
+        result += "FAIL - \"" + property + "\" property for \"" + elementId +
+            "\" element at " + time + "s expected: " + expectedValue + " but saw: " + computedValue + "<br>";
+    }
+
+    if (postCompletionCallback) {
+        result += postCompletionCallback();
+    }
+}
+
+function endTest () {
+    document.getElementById("result").innerHTML = result;
+
+    if (window.testRunner) {
+        testRunner.notifyDone();
+    }
+}
+
+function checkExpectedValueCallback (expected, index) {
+    return function () {
+        checkExpectedValue(expected, index);
+    };
+}
+
+function runTest (expected, usePauseAPI) {
+    var maxTime = 0, i, time, elementId, property, tryToPauseTransition, element;
+    for (i = 0; i < expected.length; ++i) {
+        time = expected[i][0];
+        elementId = expected[i][1];
+        property = expected[i][2];
+        if (!property.indexOf("-webkit-transform.")) {
+            property = "-webkit-transform";
+        }
+        tryToPauseTransition = expected[i][6];
+        if (tryToPauseTransition === undefined) {
+            tryToPauseTransition = shouldBeTransitioning;
+        }
+        if (hasPauseTransitionAPI && usePauseAPI) {
+            if (tryToPauseTransition) {
+                element = document.getElementById(elementId);
+                if (!internals.pauseTransitionAtTimeOnElement(property, time, element)) {
+                    window.console.log("Failed to pause '" + property + "' transition on element '" + elementId + "'");
+                }
+            }
+            checkExpectedValue(expected, i);
+        } else {
+            if (time > maxTime) {
+                maxTime = time;
+            }
+            window.setTimeout(checkExpectedValueCallback(expected, i), time * 1000);
+        }
+    }
+
+    if (maxTime > 0) {
+        window.setTimeout(endTest, maxTime * 1000 + 50);
+    } else {
+        endTest();
+    }
+}
+
+function waitForAnimationStart (callback, delay) {
+    var delayTimeout = delay ? 1000 * delay + 10 : 0;
+    // Why the two setTimeouts? Well, for hardware animations we need to ensure that the hardware animation
+    // has started before we try to pause it, and timers fire before animations get committed in the runloop.
+    window.setTimeout(function () {
+        window.setTimeout(function () {
+            callback();
+        }, 0);
+    }, delayTimeout);
+}
+
+function startTest (expected, usePauseAPI, callback) {
+    if (callback) {
+        callback();
+    }
+    waitForAnimationStart(function () {
+        runTest(expected, usePauseAPI);
+    });
+}
+
+var result = "";
+var hasPauseTransitionAPI;
+
+function runTransitionTest (expected, callback, usePauseAPI, doPixelTest) {
+    hasPauseTransitionAPI = "internals" in window;
+
+    if (window.testRunner) {
+        if (!doPixelTest) {
+            testRunner.dumpAsText();
+        }
+        testRunner.waitUntilDone();
+    }
+
+    if (!expected) {
+        throw("Expected results are missing!");
+    }
+    window.addEventListener("load", function () {
+        startTest(expected, usePauseAPI, callback);
+    }, false);
+}
diff --git a/wearable/tct-behavior-tests/tests/CSSStyle/css/style.css b/wearable/tct-behavior-tests/tests/CSSStyle/css/style.css
new file mode 100755 (executable)
index 0000000..1d31a68
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+#d{
+    width: 100%;
+    height: 330px;
+    border: 1px solid #000;
+    margin-bottom: 20px;
+}
+#text-div{
+    background: #fff;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    margin: 35px auto;
+    outline: #bed742 dotted 5px;
+    outline-offset: 5px;
+    width: 280px;
+    height: 230px;
+    opacity: 1;
+    overflow: auto;
+}
+h3{
+    font-family: TestFont, Georgia, "Times New Roman", Times, serif;
+    text-align: center;
+}
+#p{
+    background: url("../../../res/images/1x1-white.png") 40%/10em repeat fixed border-box;
+    word-wrap: break-word;
+    font-size: 14px;
+    white-space: normal;
+    text-indent: 30px;
+}
+
+#p:first-letter {
+    position: relative;
+    font-size: 24px;
+    color: red;
+    color: rgb(255, 0, 0%);
+    color: rgb(100%, 0%, 0);
+    color: rgb(100%, 1, 0);
+    color: rgb(254, 255%, 0);
+}
+
+/* CSS font */
+@font-face {
+    font-family: TestFont;
+    font-style: normal;
+    font-weight: bolder;
+    src: url(../../../res/font/CanvasTest.ttf);
+}
+.text-font {
+    font-family: TestFont;
+    font-size: xx-large;
+    font-weight: bolder;
+}
+
+/* CSS Multicolumn */
+.text-multi{
+    columns: 3;
+    column-rule: 10px groove orange;
+    column-gap: 2em;
+    -webkit-columns: 3;
+    -webkit-column-rule: 10px groove orange;
+    -webkit-column-gap: 2em;
+}
+.text-h{
+    column-span: all;
+    -webkit-column-span: all;
+}
+
+/* CSS Color */
+.text-red{
+    color: rgb(255   ,0                , 0);
+}
+.text-green{
+    color: rgb(0%, 100%, 0%);
+}
+.text-blue{
+    color: blue;
+    color: #f;
+    color: #ff00;
+    color: #ff000000;
+}
+
+/* CSS Text Align */
+.text-left{
+    text-align: left;
+}
+.text-right{
+    text-align: right;
+}
+
+/* CSS Text Transform */
+.text-upper{
+    text-transform: uppercase;
+}
+.text-lower{
+    text-transform: lowercase;
+}
+
+/* CSS Text Shadow */
+.text-shadow1{
+    text-shadow: -3px -3px 0 rgba(106,90,205,0.5);
+}
+.text-shadow2{
+    text-shadow: 3px 3px 0 rgba(106,90,205,0.5);
+}
+
+/* CSS Box Shadow */
+.box-shadow1{
+    box-shadow: -15px -15px 10px hsla(150, 20%, 30%, 0.5);
+}
+.box-shadow2{
+    box-shadow: 15px 15px 10px hsla(150, 20%, 30%, 0.5);
+}
+
+/* CSS Border */
+.border1{
+    border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+    -webkit-border-image: url(../../../res/images/ring.png) 10% 15% 10% 15% / 5px repeat stretch;
+}
+.border2{
+    border: 5px groove rgb(135,206,235);
+    border-radius: 20px 20px;
+}
+
+/* CSS text-decoration */
+.decoration1{
+    text-decoration: underline;
+}
+.decoration2{
+    text-decoration: line-through;
+}
+.decoration3{
+    text-decoration: overline;
+}
+
+/* CSS break-word */
+.break1{
+    word-break: break-all;
+    text-align: justify;
+}
+.break2{
+    word-break: break-word;
+    text-align: justify;
+}
+
+/* CSS Transparency */
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+
+.text-on{
+    background:#5393c5;
+}
+
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:96%;
+}
+
+.content .ui-controlgroup-controls{
+    width: 100%;
+}
+
+.q{
+    margin-left: 2%;
+}
+
+.u{
+    margin-left: 2%;
+}
+
+.s{
+    margin-left: 2%;
+}
+ .q .ui-corner-right{
+
+}
+
+ .q .ui-corner-left{
+
+}
+
+.u .ui-corner-right{
+
+}
+
+.u .ui-corner-left{
+
+}
+
+.u .ui-btn-up-c{
+    width: 32%;
+}
+
+.u .ui-btn-down-c{
+    width: 32%;
+}
+
+.u .ui-btn-hover-c{
+    width: 32%
+}
+
+.q .ui-btn-up-c{
+    width: 48%;
+}
+
+.q .ui-btn-down-c{
+    width: 48%;
+}
+
+.q .ui-btn-hover-c{
+    width: 48%;
+}
+
+.u .ui-btn-inner, .q .ui-btn-inner{
+    padding: .6em 5px;
+    overflow: visible;
+}
diff --git a/wearable/tct-behavior-tests/tests/CSSStyle/index.html b/wearable/tct-behavior-tests/tests/CSSStyle/index.html
new file mode 100755 (executable)
index 0000000..02265f2
--- /dev/null
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+        <style>
+            .normalSpan {
+                display:none;
+                color:red;
+            }
+            .columnSpan {
+                visibility:hidden;
+                color:red;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content" class="content">
+            <div id="d">
+                <div id="text-div">
+                    <div id="p"><span class="normalSpan">A</span>
+                        By&nbsp;using&nbsp;functionality&nbsp;described in this document, style sheets can declare that the content of an element is to be laid out in multiple columns.
+                        <h3 id="h"><span class="columnSpan">A</span>column span</h3>
+                        The main benefit of using CSS-based columns is flexibility; content can flow from one column to another.
+                    </div>
+                </div>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Mulcolumn</label>
+                <a id="on" data-role="button">On</a>
+                <a id="off" data-role="button">Off</a>
+            </div>
+            <div data-role="controlgroup" class="s">
+                <label for="slider-1">Transparency</label>
+                <input name="slider-1" id="slider-1" min="0" max="1" step=".01" value="1" data-highlight="true" data-show-value="true" type="range">
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="u">
+                <label for="slider-1">Font Color</label>
+                <a id="red" data-role="button">Red</a>
+                <a id="green" data-role="button">Green</a>
+                <a id="blue" data-role="button">Blue</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Text Align</label>
+                <a id="left" data-role="button">Left</a>
+                <a id="right" data-role="button">Right</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Text Transform</label>
+                <a id="upper" data-role="button">Uppercase</a>
+                <a id="lower" data-role="button">Lowercase</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Text Shadow</label>
+                <a id="shadow1" data-role="button">Shadow1</a>
+                <a id="shadow2" data-role="button">Shadow2</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Box Shadow</label>
+                <a id="box-shadow1" data-role="button">Shadow1</a>
+                <a id="box-shadow2" data-role="button">Shadow2</a>
+            </div>
+            <div data-role="controlgroup" class="s">
+                <label for="slider-2">Outline offset</label>
+                <input name="slider-2" id="slider-2" min="0" max="15" step="1" value="5" data-highlight="true" data-show-value="true" type="range">
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Border</label>
+                <a id="border1" data-role="button">Border1</a>
+                <a id="border2" data-role="button">Border2</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="u">
+                <label for="slider-1">Text Decoration</label>
+                <a id="decoration1" data-role="button">Underline</a>
+                <a id="decoration2" data-role="button">Through</a>
+                <a id="decoration3" data-role="button">Overline</a>
+            </div>
+            <div data-role="controlgroup" data-type="horizontal" class="q">
+                <label for="slider-1">Word Break</label>
+                <a id="break1" data-role="button">Break All</a>
+                <a id="break2" data-role="button">Break Word</a>
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies</p>
+                <ul>
+                    <li>the dotted line box has a white background, red first letter, green dotted border.</li>
+                    <li>the general description uses default font in browser.</li>
+                    <li>the functionality of all the text color in red, green or blue, background transparence from 0% to 100%, outline offset from 0 to 15, multicolumn enabling and disabling.</li>
+                    <li>the text align in left or right, text in uppercase or lowercase, text and box shadow in two effects, text decoration in three effects and word break in two effects.</li>
+                    <li>the "column span" text shows in random code when using uppercase.</li>
+                </ul>
+                <p>Expected Result: </p>
+                <p>Test passes if all the check points work well in the dotted line box.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CSSStyle/js/COPYING b/wearable/tct-behavior-tests/tests/CSSStyle/js/COPYING
new file mode 100755 (executable)
index 0000000..2cd9881
--- /dev/null
@@ -0,0 +1,42 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue*100)+"%");
++                $("#p").css("opacity", newValue);
++                if(newValue != 1){
++                    testFlag.Transparency = true;
++                    status();
++                }
++            }
++        }else if(ID == "slider-2"){
++            if ( o.showValue ) {
++                this._handleText.html(Math.round(newValue));
++                $("#text-div").css("outline-offset", newValue);
++                if(newValue != 5){
++                    testFlag.Outline = true;
++                    status();
++                }
++            }
++        }
+-        if (o.popupEnabled) {
+-            this._positionPopup();
+-            this._popup.html(Math.round(newValue));
+-        }
+-        if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
+-        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/wearable/tct-behavior-tests/tests/CSSStyle/js/main.js b/wearable/tct-behavior-tests/tests/CSSStyle/js/main.js
new file mode 100755 (executable)
index 0000000..3176a7e
--- /dev/null
@@ -0,0 +1,264 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+var testFlag={
+        Mulcolumn: false,
+        Transparency: false,
+        Color: false,
+        Align: false,
+        Transform: false,
+        TextShadow: false,
+        BoxShadow: false,
+        Outline: false,
+        Border: false,
+        Decoration: false,
+        Break: false
+    };
+
+function status(){
+    if(testFlag.Mulcolumn && testFlag.Transparency && testFlag.Color && testFlag.Align && testFlag.Transform && testFlag.TextShadow && testFlag.BoxShadow && testFlag.Outline && testFlag.Border && testFlag.Decoration && testFlag.Break)
+        EnablePassButton();
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    /** CSS Multicolumn */
+    $("#on").click(function(){
+        $("#off").removeClass("text-on");
+        $("#on").addClass("text-on");
+        $("#p").addClass("text-multi");
+        $("#h").addClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+    $("#off").click(function(){
+        $("#on").removeClass("text-on");
+        $("#off").addClass("text-on");
+        $("#p").removeClass("text-multi");
+        $("#h").removeClass("text-h");
+        testFlag.Mulcolumn = true;
+        status();
+    });
+
+    /** CSS Color */
+    $("#red").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#red").toggleClass("text-on");
+        // remove text-green and text-blue style
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-red style
+        $p.toggleClass("text-red");
+        testFlag.Color = true;
+        status();
+    });
+    $("#green").click(function(){
+        var $p = $("#p");
+        $("#red").removeClass("text-on");
+        $("#blue").removeClass("text-on");
+        $("#green").toggleClass("text-on");
+        // remove text-red and text-blue style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-blue")) $p.removeClass("text-blue");
+        // add/remove text-green style
+        $p.toggleClass("text-green");
+        testFlag.Color = true;
+        status();
+    });
+    $("#blue").click(function(){
+        var $p = $("#p");
+        $("#green").removeClass("text-on");
+        $("#red").removeClass("text-on");
+        $("#blue").toggleClass("text-on");
+        // remove text-red and text-green style
+        if($p.hasClass("text-red")) $p.removeClass("text-red");
+        if($p.hasClass("text-green")) $p.removeClass("text-green");
+        // add/remove text-blue style
+        $p.toggleClass("text-blue");
+        testFlag.Color = true;
+        status();
+    });
+
+    /** CSS Text Align */
+    $("#left").click(function(){
+        $("#right").removeClass("text-on");
+        $("#left").toggleClass("text-on");
+        $("#p").removeClass("text-right");
+        $("#p").toggleClass("text-left");
+        testFlag.Align = true;
+        status();
+    });
+    $("#right").click(function(){
+        $("#left").removeClass("text-on");
+        $("#right").toggleClass("text-on");
+        $("#p").removeClass("text-left");
+        $("#p").toggleClass("text-right");
+        testFlag.Align = true;
+        status();
+    });
+
+    /** CSS Text Transform */
+    $("#upper").click(function(){
+        $("#lower").removeClass("text-on");
+        $("#upper").toggleClass("text-on");
+        $("#p").removeClass("text-lower");
+        $("#p").toggleClass("text-upper");
+        testFlag.Transform = true;
+        status();
+    });
+    $("#lower").click(function(){
+        $("#upper").removeClass("text-on");
+        $("#lower").toggleClass("text-on");
+        $("#p").removeClass("text-upper");
+        $("#p").toggleClass("text-lower");
+        testFlag.Transform = true;
+        status();
+    });
+
+    /** CSS Text Shadow */
+    $("#shadow1").click(function(){
+        $("#shadow2").removeClass("text-on");
+        $("#shadow1").toggleClass("text-on");
+        $("#p").removeClass("text-shadow2");
+        $("#p").toggleClass("text-shadow1");
+        testFlag.TextShadow = true;
+        status();
+    });
+    $("#shadow2").click(function(){
+        $("#shadow1").removeClass("text-on");
+        $("#shadow2").toggleClass("text-on");
+        $("#p").removeClass("text-shadow1");
+        $("#p").toggleClass("text-shadow2");
+        testFlag.TextShadow = true;
+        status();
+    });
+
+    /** CSS Box Shadow */
+    $("#box-shadow1").click(function(){
+        $("#box-shadow2").removeClass("text-on");
+        $("#box-shadow1").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow2");
+        $("#text-div").toggleClass("box-shadow1");
+        testFlag.BoxShadow = true;
+        status();
+    });
+    $("#box-shadow2").click(function(){
+        $("#box-shadow1").removeClass("text-on");
+        $("#box-shadow2").toggleClass("text-on");
+        $("#text-div").removeClass("box-shadow1");
+        $("#text-div").toggleClass("box-shadow2");
+        testFlag.BoxShadow = true;
+        status();
+    });
+
+    /** CSS Border */
+    $("#border1").click(function(){
+        $("#border2").removeClass("text-on");
+        $("#border1").toggleClass("text-on");
+        $("#text-div").removeClass("border2");
+        $("#text-div").toggleClass("border1");
+        testFlag.Border = true;
+        status();
+    });
+    $("#border2").click(function(){
+        $("#border1").removeClass("text-on");
+        $("#border2").toggleClass("text-on");
+        $("#text-div").removeClass("border1");
+        $("#text-div").toggleClass("border2");
+        testFlag.Border = true;
+        status();
+    });
+
+    /** CSS Break Word */
+    $("#break1").click(function(){
+        $("#break2").removeClass("text-on");
+        $("#break1").toggleClass("text-on");
+        $("#text-div").removeClass("break2");
+        $("#text-div").toggleClass("break1");
+        testFlag.Break = true;
+        status();
+    });
+    $("#break2").click(function(){
+        $("#break1").removeClass("text-on");
+        $("#break2").toggleClass("text-on");
+        $("#text-div").removeClass("break1");
+        $("#text-div").toggleClass("break2");
+        testFlag.Break = true;
+        status();
+    });
+
+    /** CSS Text Decoration */
+    $("#decoration1").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration1").toggleClass("text-on");
+        // remove decoration2 and decoration3 style
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration1 style
+        $p.toggleClass("decoration1");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration2").click(function(){
+        var $p = $("#p");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").removeClass("text-on");
+        $("#decoration2").toggleClass("text-on");
+        // remove decoration1 and decoration3 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration3")) $p.removeClass("decoration3");
+        // add decoration2 style
+        $p.toggleClass("decoration2");
+        testFlag.Decoration = true;
+        status();
+    });
+    $("#decoration3").click(function(){
+        var $p = $("#p");
+        $("#decoration2").removeClass("text-on");
+        $("#decoration1").removeClass("text-on");
+        $("#decoration3").toggleClass("text-on");
+        // remove decoration1 and decoration2 style
+        if($p.hasClass("decoration1")) $p.removeClass("decoration1");
+        if($p.hasClass("decoration2")) $p.removeClass("decoration2");
+        // add decoration3 style
+        $p.toggleClass("decoration3");
+        testFlag.Decoration = true;
+        status();
+    });
+
+    /* Hide input*/
+    $("#slider-1").hide();
+    $("#slider-2").hide();
+});
diff --git a/wearable/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js b/wearable/tct-behavior-tests/tests/CSSStyle/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..035bc67
--- /dev/null
@@ -0,0 +1,141 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue*100)+"%");
+                $("#p").css("opacity", newValue);
+                if(newValue != 1){
+                    testFlag.Transparency = true;
+                    status();
+                }
+            }
+        }else if(ID == "slider-2"){
+            if ( o.showValue ) {
+                this._handleText.html(Math.round(newValue));
+                $("#text-div").css("outline-offset", newValue);
+                if(newValue != 5){
+                    testFlag.Outline = true;
+                    status();
+                }
+            }
+        }
+
+               //if ( o.popupEnabled ) {
+               //      this._positionPopup();
+               //      this._popup.html( newValue );
+               //}
+
+               //if ( o.showValue ) {
+               //      this._handleText.html( newValue );
+               //}
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/wearable/tct-behavior-tests/tests/Camera/index.html b/wearable/tct-behavior-tests/tests/Camera/index.html
new file mode 100755 (executable)
index 0000000..aabd410
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 300px;
+            }
+            #photoShow {
+                height: 210px;
+                line-height:210px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+                <p id="filename"></p>
+                <div id="photoShow" align="center"></div>
+            </div>
+            <input type="file" id="files" accept="image/*" capture="camera" class="hideButton" />
+            <div align="center">
+                <input id="button" type="button" value="Launch camera to take a photo" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the functionality of Camera. Opens a device camera, previews the image automatically, then presents the captured photo after clicking the "capture" button.</p>
+                <p>Test Step: </p>
+                <p>Click the "Launch camera to take a photo" button to launch the camera preview.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the camera preview and capture work well.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Camera/js/main.js b/wearable/tct-behavior-tests/tests/Camera/js/main.js
new file mode 100755 (executable)
index 0000000..0169f6d
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+function drawOnCanvas(file) {
+  var reader = new FileReader();
+
+  reader.onload = function (e) {
+    var dataURL = e.target.result;
+        var c = document.createElement("Canvas");
+        ctx = c.getContext('2d');
+        img = new Image();
+
+    img.onload = function() {
+      c.width = img.width;
+      c.height = img.height;
+
+      var fheight = 180;
+      var fwidth = fheight / img.height * img.width
+      ctx.drawImage(img, 0, 0, fwidth, fheight);
+    };
+    img.src = dataURL;
+    $('#photoShow').html(c);
+  };
+
+  reader.readAsDataURL(file);
+}
+
+$(document).ready(function(){
+    DisablePassButton();
+    $("#photoShow").html("No photo");
+    $("#files")[0].onchange = function(evt) {
+        try {
+            // loading
+            $.mobile.showPageLoadingMsg();
+
+            var files = evt.target.files; // FileList object
+            $("#filename").html(files[0].name);
+            drawOnCanvas(files[0]);
+
+            $.mobile.hidePageLoadingMsg();
+            EnablePassButton();
+        } catch(err) {
+            $.mobile.hidePageLoadingMsg();
+            $("#filename").html(err);
+        }
+    }
+
+    $("#button")[0].onclick = function() {
+        var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
+        if(ie){
+            $("#files")[0].click();
+            $("#button")[0].value = $("#files")[0].value;
+        }else{
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#files")[0].dispatchEvent(evt);
+        }
+    }
+
+});
diff --git a/wearable/tct-behavior-tests/tests/CameraViaUserMedia/index.html b/wearable/tct-behavior-tests/tests/CameraViaUserMedia/index.html
new file mode 100755 (executable)
index 0000000..d015268
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            #observateEare {
+                border: black solid 1px;
+                height: 330px;
+                line-height:330px;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="observateEare" align="center">
+                <p id="errormassage"></p>
+                <div align="center">
+                    <video width="330px" height="330px" id="localView" autoplay="autoplay"></video>
+                </div>
+            </div>
+            <div align="center">
+                <input id="getUserMeida" type="button" value="Start camera preview" />
+                <input id="stopUserMeida" type="button" value="Stop camera preview" />
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the functionality of enabling and disabling the Camera preview.</p>
+                <p>Test Step: </p>
+                <ol>
+                    <li>Click the "Start camera preview" button to launch the preview.</li>
+                    <li>Click the "Stop camera preview" button to close the preview.</li>
+                </ol>
+                <p>Expected Result: </p>
+                <p>Test passes if the Camera preview works well.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js b/wearable/tct-behavior-tests/tests/CameraViaUserMedia/js/main.js
new file mode 100755 (executable)
index 0000000..5e1556a
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+$(document).ready(function(){
+    DisablePassButton();
+    $("#errormassage").html("No video");
+    //getUserMedia
+    $("#getUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia({video: true}, function(s){
+                var url = webkitURL.createObjectURL(s);
+                $("#localView")[0].src = url;
+                $("#localView").show();
+                $("#errormassage").hide();
+                EnablePassButton();
+            }, function(error){
+                $("#errormassage").show();
+                $("#errormassage").html("Get user media occur error:<font color='red'>PERMISSION DENIED</font>");
+            });
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").html("Get usr media occur error,with error message:<font color='red'>"+e.message+"</font>");
+        }
+    }
+
+    //stop getUserMedia
+    $("#stopUserMeida")[0].onclick = function() {
+        try {
+            navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
+            navigator.getUserMedia();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        } catch (e) {
+            $("#localView").hide();
+            $("#errormassage").show();
+            $("#errormassage").html("No video");
+        }
+    }
+});
diff --git a/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png b/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png
new file mode 100755 (executable)
index 0000000..f9bfe88
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/flowser.png differ
diff --git a/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html b/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/index.html
new file mode 100755 (executable)
index 0000000..62486c5
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+
+-->
+
+<!DOCTYPE html>
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script type="text/javascript">
+            function reloadTest () {
+                document.location.reload();
+            }
+        </script>
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <h3>Original Picture</p>
+        <img id="flowser" src="./flowser.png" alt="flowser" />
+
+        <p>Target Picture</p>
+        <canvas id="myCanvas" width="300" height="240" style="border:1px solid #c3c3c3;">
+            Your browser does not support the canvas element.
+        </canvas>
+
+        <script type="text/javascript">
+            var c = document.getElementById("myCanvas");
+            var cxt = c.getContext("2d");
+            var img = new Image()
+            img.src = "./flowser.png"
+            cxt.drawImage(img, 0, 0);
+        </script>
+
+        <div data-role="content">
+            <button onclick="rotate()">Rotate Pic</button>
+            <button onclick="scale()">Scale Pic</button>
+            <button onclick="transform()">Transform Pic</button>
+            <button onclick="to_blackWhite()">Vampix Pic</button>
+            <p><a href="javascript: reloadTest();" data-role="button">Test Again</a></p>
+        </div>
+
+
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div style="font-size:85%">
+                <p>Test Purpose: </p>
+                <p>Verifies picture management with HTML5 Canvas: </p>
+                <p>1.click "Rotate Pic" button to rotate pic with 20 degree, then click "Test Again" button; </p>
+                <p>2.click "Scale Pic" to enlarger with 1.5 scale, click 2 or many times to enlarge continuously, then click "Test Again" button; </p>
+                <p>3.click "Transform Pic" to check pic transformation, then click "Test Again" button; </p>
+                <p>4.click "Vampix Pic" to change pic to "black white", then click "Test Again" button; </p>
+                <p>5.Do combination test, click "Rotate Pic" + "Scale Pic" + "Vampix Pic" in order, then click "Test Again" button; </p>
+                <p>Expected Result: </p>
+                <p>This test PASS only if the pic could be rotated,scaled,transformed, vampixed well.</p>
+            </div>
+        </div>
+</body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js b/wearable/tct-behavior-tests/tests/Canvas-PicRotaScaleTransfVampix/js/main.js
new file mode 100755 (executable)
index 0000000..fc82eb0
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, cici <cici.x.li@intel.com>
+*/
+
+function rotate()
+{
+        cxt.rotate(20*Math.PI/180);
+        cxt.clearRect(0,0,500,500);
+        cxt.drawImage(img,0,0);
+}
+function scale()
+{
+        cxt.scale(1.5,1.5);
+        cxt.drawImage(img,0,0);
+}
+/*
+function translate()
+{
+        cxt.translate(70,70);
+        cxt.drawImage(img,0,0);
+}*/
+
+function transform()
+{
+        cxt.transform(0.8,0.5,0.5,1,10,0);
+        cxt.drawImage(img,0,0);
+}
+
+function to_blackWhite()
+{
+        cxt.drawImage(img,0,0);
+        var imgData = cxt.getImageData(0, 0, c.width, c.height);
+        var imgD = imgData.data;
+        for(var i=0, n=imgD.length; i<n; i+=4){
+                var gray = imgD[i] * 0.3 + imgD[i+1] * 0.59 + imgD[i+2] * 0.11;
+                imgD[i] = gray;
+                imgD[i+1] = gray;
+                imgD[i+2] = gray;
+        }
+        cxt.putImageData(imgData, 0, 0);
+}
+
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/index.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/index.html
new file mode 100755 (executable)
index 0000000..57c98ed
--- /dev/null
@@ -0,0 +1,158 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                    <li data-role="list-divider" role="heading">Test src content</li>
+                    <li id="application-content">
+                        <a href="javascript:goToApp('res/application-content.html')" data-transition="slide" style="">
+                            <h2>application-content</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test auto rotation</li>
+                    <li id="setting-ar-true">
+                        <a href="javascript:goToApp('res/setting-ar-true.html')" data-transition="slide" style="">
+                            <h2>setting-ar-true</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test background support</li>
+                    <li id="setting-bs-disable">
+                        <a href="javascript:goToApp('res/setting-bs-disable.html')" data-transition="slide" style="">
+                            <h2>setting-bs-disable</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test context menu</li>
+                    <li id="setting-cm-disable">
+                        <a href="javascript:goToApp('res/setting-cm-disable.html')" data-transition="slide" style="">
+                            <h2>setting-cm-disable</h2>
+                        </a>
+                    </li>
+                    <li id="setting-cm-enable">
+                        <a href="javascript:goToApp('res/setting-cm-enable.html')" data-transition="slide" style="">
+                            <h2>setting-cm-enable</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test encryption</li>
+                    <li id="setting-encrypt-disable">
+                        <a href="javascript:goToApp('res/setting-encrypt-disable.html')" data-transition="slide" style="">
+                            <h2>setting-encrypt-disable</h2>
+                        </a>
+                    </li>
+                    <li id="setting-encrypt-enable">
+                        <a href="javascript:goToApp('res/setting-encrypt-enable.html')" data-transition="slide" style="">
+                            <h2>setting-encrypt-enable</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test allow navigation</li>
+                    <li id="setting-an-more">
+                        <a href="javascript:goToApp('res/setting-an-more.html')" data-transition="slide" style="">
+                            <h2>setting-an-more</h2>
+                        </a>
+                    </li>
+                    <li id="setting-an-one">
+                        <a href="javascript:goToApp('res/setting-an-one.html')" data-transition="slide" style="">
+                            <h2>setting-an-one</h2>
+                        </a>
+                    </li>
+                    <li id="setting-an-zero">
+                        <a href="javascript:goToApp('res/setting-an-zero.html')" data-transition="slide" style="">
+                            <h2>setting-an-zero</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test hwkey</li>
+                    <li id="setting-hwkey-default">
+                        <a href="javascript:goToApp('res/setting-hwkey-default.html')" data-transition="slide" style="">
+                            <h2>setting-hwkey-default</h2>
+                        </a>
+                    </li>
+                    <li id="setting-hwkey-disable">
+                        <a href="javascript:goToApp('res/setting-hwkey-disable.html')" data-transition="slide" style="">
+                            <h2>setting-hwkey-disable</h2>
+                        </a>
+                    </li>
+                    <li id="setting-hwkey-enable">
+                        <a href="javascript:goToApp('res/setting-hwkey-enable.html')" data-transition="slide" style="">
+                            <h2>setting-hwkey-enable</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test install location</li>
+                    <li id="setting-install-location-internal-only-with-card">
+                        <a href="javascript:goToApp('res/setting-install-location-internal-only-with-card.html')" data-transition="slide" style="">
+                            <h2>setting-install-location-internal-only-with-card</h2>
+                        </a>
+                    </li>
+                    <li id="setting-install-location-prefer-external-no-card">
+                        <a href="javascript:goToApp('res/setting-install-location-prefer-external-no-card.html')" data-transition="slide" style="">
+                            <h2>setting-install-location-prefer-external-no-card</h2>
+                        </a>
+                    </li>
+                    <li id="setting-install-location-prefer-external-with-card">
+                        <a href="javascript:goToApp('res/setting-install-location-prefer-external-with-card.html')" data-transition="slide" style="">
+                            <h2>setting-install-location-prefer-external-with-card</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                    <li>
+                        <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                    <p>Test Note: </p>
+                    <p>Verifies the functionality of tizen-specific widget configuration extension and w3c widget configuration extension.</p>
+                    <p>Test Purpose: </p>
+                    <p>Verifies WRT MUST support additional configuration elements that are not included in W3C Widget Packaging and XML Configuration, like "&lt;tizen:application&gt;", "&lt;tizen:privilege&gt;", "&lt;tizen:setting&gt;" etc.</p>
+                    <p>Expected Result: </p>
+                    <p>Test passes if all sub-tests pass.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/js/main.js b/wearable/tct-behavior-tests/tests/ConfigurationExtension/js/main.js
new file mode 100755 (executable)
index 0000000..3a5c517
--- /dev/null
@@ -0,0 +1,303 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt2apc001',
+                    'wrt2sam045',
+                    'wrt2sao044',
+                    'wrt2saz043',
+                    'wrt2sod031',
+                    'wrt2sbd024',
+                    'wrt2scd026',
+                    'wrt2sce027',
+                    'wrt2sil053',
+                    'wrt2sil054',
+                    'wrt2sil055',
+                    'wrt2shd044',
+                    'wrt2skd041',
+                    'wrt2ske042',
+                    'wrt2sed028',
+                    'wrt2see029');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "ConfigurationExtension";
+var RESULT_FILE_NAME = "tct-behavior-child.ce.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js b/wearable/tct-behavior-tests/tests/ConfigurationExtension/js/tests.js
new file mode 100755 (executable)
index 0000000..8f6a128
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var nolaunch_wgt = new Array('setting-encrypt-enable','setting-encrypt-disable');
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    }
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/ConfigurationExtension/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.html
new file mode 100755 (executable)
index 0000000..950a207
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-content">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-content"/>
+                <input type="hidden" id="app_id"  value="wrt2apc001.ApplicationContent"/>
+                <input type="hidden" id="package_id" value="wrt2apc001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget redirect the start page to "http://www.google.com".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt
new file mode 100755 (executable)
index 0000000..f480d47
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/application-content.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.html
new file mode 100755 (executable)
index 0000000..b59519f
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-more">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-more"/>
+                <input type="hidden" id="app_id"  value="wrt2sam045.settinganmore"/>
+                <input type="hidden" id="package_id" value="wrt2sam045"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "baidu" and "baike.baidu" links cannot be opened in Web App, they will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt
new file mode 100755 (executable)
index 0000000..6ccd46e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-more.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.html
new file mode 100755 (executable)
index 0000000..fb80afd
--- /dev/null
@@ -0,0 +1,88 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-one">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-one"/>
+                <input type="hidden" id="app_id"  value="wrt2sao044.settinganone"/>
+                <input type="hidden" id="package_id" value="wrt2sao044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>After launch the widget,</p>
+            <ul>
+              <li>The "tizen", "developer.tizen" links can be opened in Web App.</li>
+              <li>The "google" link cannot be opened in Web App, it will be opened in the default browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt
new file mode 100755 (executable)
index 0000000..996a62e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-one.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.html
new file mode 100755 (executable)
index 0000000..e5585fa
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-an-zero">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-an-zero"/>
+                <input type="hidden" id="app_id"  value="wrt2saz043.settinganzero"/>
+                <input type="hidden" id="package_id" value="wrt2saz043"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can access to Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "google" and "tizen" links are displayed on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt
new file mode 100755 (executable)
index 0000000..597b6e3
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-an-zero.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.html
new file mode 100755 (executable)
index 0000000..0f9fb0e
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-ar-true">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-ar-true"/>
+                <input type="hidden" id="app_id"  value="wrt2sod031.settingartrue"/>
+                <input type="hidden" id="package_id" value="wrt2sod031"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Set the auto rotate enable in Setting > Display> Auto rotate screen.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget application can rotate with the device orientation change.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt
new file mode 100755 (executable)
index 0000000..71e5a8e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-ar-true.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.html
new file mode 100755 (executable)
index 0000000..fd39b5e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-bs-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-bs-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sbd024.SettingBsDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sbd024"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the counter on the page doesn't change when the widget is running background.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt
new file mode 100755 (executable)
index 0000000..07e7862
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-bs-disable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.html
new file mode 100755 (executable)
index 0000000..5f17cd4
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2scd026.SettingCmDisable"/>
+                <input type="hidden" id="package_id" value="wrt2scd026"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>No popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt
new file mode 100755 (executable)
index 0000000..890bdf1
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-disable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.html
new file mode 100755 (executable)
index 0000000..f763928
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-cm-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-cm-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2sce027.SettingCmEnable"/>
+                <input type="hidden" id="package_id" value="wrt2sce027"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a popup menu after release the press.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt
new file mode 100755 (executable)
index 0000000..432cf51
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-cm-enable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.html
new file mode 100755 (executable)
index 0000000..d6b5408
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2sed028.SettingEncryptDisable"/>
+                <input type="hidden" id="package_id" value="wrt2sed028"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is not encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2sed028/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2sed028/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is a normal text.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt
new file mode 100755 (executable)
index 0000000..c66c307
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-disable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.html
new file mode 100755 (executable)
index 0000000..85280e4
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-encrypt-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-encrypt-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2see029.SettingEncryptEnable"/>
+                <input type="hidden" id="package_id" value="wrt2see029"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Use the command: admin user: "vi /opt/usr/globalapps/wrt2see029/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt2see029/res/wgt/index.html" to show the content of index.html in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the content of "index.html" is messy code.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt
new file mode 100755 (executable)
index 0000000..b393ac5
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-encrypt-enable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.html
new file mode 100755 (executable)
index 0000000..782ca06
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-default">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-default"/>
+                <input type="hidden" id="app_id"  value="wrt2shd044.settinghwkeydefault"/>
+                <input type="hidden" id="package_id" value="wrt2shd044"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt
new file mode 100755 (executable)
index 0000000..1a2f05e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-default.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.html
new file mode 100755 (executable)
index 0000000..524b464
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-disable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-disable"/>
+                <input type="hidden" id="app_id"  value="wrt2skd041.settinghwkeydisable"/>
+                <input type="hidden" id="package_id" value="wrt2skd041"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there are two "Pass" displayed and no change on the screen when click the menu or back key.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt
new file mode 100755 (executable)
index 0000000..4c57996
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-disable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.html
new file mode 100755 (executable)
index 0000000..f059d5e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-hwkey-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-hwkey-enable"/>
+                <input type="hidden" id="app_id"  value="wrt2ske042.settinghwkeyenable"/>
+                <input type="hidden" id="package_id" value="wrt2ske042"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Fail" is changed by "Pass --- menu event is invoked" or "Pass --- back event is invoked".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt
new file mode 100755 (executable)
index 0000000..3bc6a8b
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-hwkey-enable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.html
new file mode 100755 (executable)
index 0000000..279147c
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-internal-only-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-internal-only-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil053.settinginstalllocationinternalonlywithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil053"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>There is a "PASS" after launch the widget.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt
new file mode 100755 (executable)
index 0000000..0adf57f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-internal-only-with-card.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.html
new file mode 100755 (executable)
index 0000000..a7cb588
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-no-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-no-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil054.settinginstalllocationpreferexternalnocard"/>
+                <input type="hidden" id="package_id" value="wrt2sil054"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure there is no memory card inserted into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt
new file mode 100755 (executable)
index 0000000..937b177
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-no-card.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.html
new file mode 100755 (executable)
index 0000000..b5ea548
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="setting-install-location-prefer-external-with-card">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="setting-install-location-prefer-external-with-card"/>
+                <input type="hidden" id="app_id"  value="wrt2sil055.settinginstalllocationpreferexternalwithcard"/>
+                <input type="hidden" id="package_id" value="wrt2sil055"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Insert a memory card into the device.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the widget can be installed and launched successfully.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt
new file mode 100755 (executable)
index 0000000..248df72
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/ConfigurationExtension/res/setting-install-location-prefer-external-with-card.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CordovaSupport/index.html b/wearable/tct-behavior-tests/tests/CordovaSupport/index.html
new file mode 100755 (executable)
index 0000000..cb1461e
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cordovaList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Cordova Support</li>
+                <li id="cordova-support">
+                    <a href="javascript:goToApp('res/cordova-support.html')" data-transition="slide" style="">
+                        <h2>cordova-support</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of cordova support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies cordova support tizen APIs.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/tests/CordovaSupport/js/main.js b/wearable/tct-behavior-tests/tests/CordovaSupport/js/main.js
new file mode 100755 (executable)
index 0000000..759121d
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var allId=new Array('G4rvZJzDIa');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "CordovaSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.cordova.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cordovaList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/CordovaSupport/js/tests.js b/wearable/tct-behavior-tests/tests/CordovaSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..0d1b966
--- /dev/null
@@ -0,0 +1,240 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/CordovaSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+document.write('<script src="../webrunner/jquery-1.10.2.min.js"></script>');
diff --git a/wearable/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt b/wearable/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt
new file mode 100644 (file)
index 0000000..6edc30b
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/CordovaSupport/res/TizenCordovaMobileSpec.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html b/wearable/tct-behavior-tests/tests/CordovaSupport/res/cordova-support.html
new file mode 100755 (executable)
index 0000000..081c526
--- /dev/null
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="cordova-support">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="TizenCordovaMobileSpec"/>
+                <input type="hidden" id="app_id"  value="G4rvZJzDIa.TizenCordovaMobileSpec"/>
+                <input type="hidden" id="package_id" value="G4rvZJzDIa"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all cordova test cases pass".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/index.html b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/index.html
new file mode 100755 (executable)
index 0000000..abb6b49
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main1.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test DeviceAPI access by external</li>
+                <li id="deviceapi-access-by-external">
+                    <a href="javascript:goToApp('res/deviceapi-access-by-external.html')" data-transition="slide" style="">
+                        <h2>deviceapi-access-by-external</h2>
+                    </a>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies support identification of the sensitive API Privileges.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support access to sensitive API</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main1.js
new file mode 100755 (executable)
index 0000000..7523e46
--- /dev/null
@@ -0,0 +1,332 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Lin Guo <lin87.guo@samsung.com>
+
+*/
+var allId=new Array('wrt5san005',
+                    'wrt5sar019',
+                    'wrtkill002',
+                    'wrt5sal017',
+                    'wrt5sbr079',
+                    'wrt5sbr080',
+                    'wrt5sba023',
+                    'wrt5sbg025',
+                    'wrt5sbs027',
+                    'wrt5scr031',
+                    'wrt5scw033',
+                    'wrt5sch039',
+                    'wrt5sch041',
+                    'wrt5scr047',
+                    'wrt5scw049',
+                    'wrt5con147',
+                    'wrt5con145',
+                    'wrt5sbr081',
+                    'wrt5sbr082',
+                    'wrt5dow143',
+                    'wrt5sfr053',
+                    'wrt5sfw055',
+                    'wrt5smr069',
+                    'wrt5smw073',
+                    'wrt5sbr084',
+                    'wrt5sna075',
+                    'wrt5nfc139',
+                    'wrt5snp079',
+                    'wrt5snt081',
+                    'wrt5not137',
+                    'wrt5sbr085',
+                    'wrt5sbr086',
+                    'wrt5pow135',
+                    'wrt5sbr087',
+                    'wrt5sbr088',
+                    'wrt5sse083',
+                    'wrt5sse087',
+                    'wrt5sys131',
+                    'wrt5ste091',
+                    'wrt1nj0034');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/main2.js
new file mode 100755 (executable)
index 0000000..993b0d8
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt5sed003',
+                    'wrt5sar018',
+                    'wrtkill001',
+                    'wrt5sal016',
+                    'wrt5sbr089',
+                    'wrt5sbr090',
+                    'wrt5sad022',
+                    'wrt5sbg024',
+                    'wrt5sbs026',
+                    'wrt5scr030',
+                    'wrt5scw032',
+                    'wrt5sch038',
+                    'wrt5sch040',
+                    'wrt5scr046',
+                    'wrt5scw048',
+                    'wrt5con148',
+                    'wrt5con146',
+                    'wrt5sbr091',
+                    'wrt5sbr092',
+                    'wrt5dow144',
+                    'wrt5sfr052',
+                    'wrt5sfw054',
+                    'wrt5smr068',
+                    'wrt5smw072',
+                    'wrt5sbr094',
+                    'wrt5sna074',
+                    'wrt5nfc140',
+                    'wrt5snp078',
+                    'wrt5snt080',
+                    'wrt5not138',
+                    'wrt5sbr095',
+                    'wrt5sbr096',
+                    'wrt5pow136',
+                    'wrt5sbr097',
+                    'wrt5sbr098',
+                    'wrt5ssd082',
+                    'wrt5ssd089',
+                    'wrt5sys132',
+                    'wrt5std090');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/js/tests.js
new file mode 100755 (executable)
index 0000000..410c96d
--- /dev/null
@@ -0,0 +1,227 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DeviceAPISecurity/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.html
new file mode 100755 (executable)
index 0000000..b08bbcd
--- /dev/null
@@ -0,0 +1,115 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+         Lin Guo <lin87.guo@samsung.com>
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="deviceapi-access-by-external">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="deviceapi-access-by-external"/>
+                <input type="hidden" id="app_id"  value="wrt1nj0034.deviceapiAccessByExternal"/>
+                <input type="hidden" id="package_id" value="wrt1nj0034"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>"deviceapi-access-by-external-application" test Step: </p>
+            <ol>
+              <li>Choose application.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse application html successfully.</li>
+              <li>Browser launched and open application.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-bluetooth" test Step: </p>
+            <ol>
+              <li>Choose bluetooth.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse bluetooth html successfully.</li>
+              <li>Browser launched and open bluetooth.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-download" test Step: </p>
+            <ol>
+              <li>Choose download.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse download html successfully.</li>
+              <li>Browser launched and open download.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+            <p>"deviceapi-access-by-external-systeminfo" test Step: </p>
+            <ol>
+              <li>Choose systeminfo.html from deviceapi list.</li>
+              <li>Tap Launch Sevice APP button.</li>
+              <li>Close browser.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ol>
+              <li>Can chosse systeminfo html successfully.</li>
+              <li>Browser launched and open systeminfo.html, A "PASS" displayed on the screen.</li>
+              <li>Browser closed.</li>
+            </ol>
+
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt
new file mode 100755 (executable)
index 0000000..2fb39fb
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DeviceAPISecurity/res/deviceapi-access-by-external.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/index.html b/wearable/tct-behavior-tests/tests/DynamicBox/index.html
new file mode 100755 (executable)
index 0000000..8967b2a
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the functionality of DynamicBox application: mouse event and visibility event for DynamicBox.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button, test step passes if all app widgets installed successfully.</li>
+              <li>Click the "Launch" button to launch the DynamicBox Viewer. After each step below, press "Back" key (soft or hard key) to go forward next step:</li>
+              <ol>
+                <li>Click the "Dynamicbox reload backgorund"; press test button(it will open another screen); then press Home key to back home screen and waitting 60s; test step passes if the number which show in the screen will recount immediately when click behavior tool/launch again.</li>
+                <li>Click the "Dynamicbox reload foregorund"; press test button(it will open another screen); then press Home key to back home screen and entry behavior tool/launch again; test step passes if the number which show in the screen will recount after a few seconds</li>
+              </ol>
+              <li>Click the "Uninstall" button, test step passes if all app widgets uninstalled successfully.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if all the test steps pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/js/main.js b/wearable/tct-behavior-tests/tests/DynamicBox/js/main.js
new file mode 100755 (executable)
index 0000000..7cf03c4
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Hao, Yunfei <yunfeix.hao@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var installUrl;
+var install_number = 0;
+var uninstall_number = 0;
+var launch_tpk = "";
+var wgt_names = new Array('app-widget-mouse-event-false.wgt',
+                          'app-widget-sample.wgt',
+                          'app-widget-box-appwidgetready-event.wgt',
+                          'app-widget-mouse-event-true.wgt',
+                          'app-widget-load-event.wgt',
+                          'app-widget-visibility-event.wgt',
+                          'app-widget-box-size-decoration.wgt',
+                          'app-widget-box-size-preview.wgt',
+                          'app-widget-sign-author.wgt',
+                          'app-widget-sign-author-distributor.wgt',
+                          'app-widget-sign-distributor.wgt',
+                          'app-widget-sign-invalid.wgt',
+                          'app-widget-sign-none.wgt',
+                          'app-device-api-security-alarm.wgt',
+                          'app-device-api-security-application-info.wgt',
+                          'app-device-api-security-application-launch.wgt',
+                          'app-device-api-security-appmanager-certificate.wgt',
+                          'app-device-api-security-bluetooth-health.wgt',
+                          'app-device-api-security-bluetooth-manager.wgt',
+                          'app-device-api-security-negative.wgt',
+                          'app-device-api-security-system.wgt',
+                          'app-device-api-security-systemmanager.wgt',
+                          'app-device-api-security-websetting.wgt',
+                          'app-device-api-security-secureelement.wgt',
+                          'app-device-api-security-setting.wgt',
+                          'dynamicbox-reload-background.wgt',
+                          'dynamicbox-reload-foreground.wgt',
+                          'app-widget-unload-event.wgt',
+                          'app-widget-load-event-alive-time.wgt');
+
+var package_ids = new Array('wrt6awi014',
+                            'wrt6app001',
+                            'wrt6awb006',
+                            'wrt6awi013',
+                            'wrt6aws016',
+                            'wrt6aws018',
+                            'wrt6awb003',
+                            'wrt6awb005',
+                            'wrt6sig001',
+                            'wrt6sig003',
+                            'wrt6sig004',
+                            'wrt6sig002',
+                            'wrt6sig005',
+                            'wrt6api003',
+                            'wrt6api004',
+                            'wrt6api005',
+                            'wrt6api006',
+                            'wrt6api010',
+                            'wrt6api012',
+                            'wrt6api050',
+                            'wrt6api041',
+                            'wrt6api042',
+                            'wrt6api043',
+                            'wrt6api039',
+                            'wrt6api040',
+                            'tctdyna009',
+                            'tctdyna010',
+                            'wrt6aws020',
+                            'wrt6aws021');
+
+var id_maps = {'rMLtTXzQr2-2.0.0-arm.tpk':                           'rMLtTXzQr2',
+               'SD2nFxbyeA-2.0.0-i386.tpk':                          'SD2nFxbyeA',
+               'app-widget-mouse-event-false.wgt':                   'wrt6awi014',
+               'app-widget-sample.wgt':                              'wrt6app001',
+               'app-widget-box-appwidgetready-event.wgt':            'wrt6awb006',
+               'app-widget-mouse-event-true.wgt':                    'wrt6awi013',
+               'app-widget-load-event.wgt':                          'wrt6aws016',
+               'app-widget-visibility-event.wgt':                    'wrt6aws018',
+               'app-widget-box-size-decoration.wgt':                 'wrt6awb003',
+               'app-widget-box-size-preview.wgt':                    'wrt6awb005',
+               'app-widget-sign-author.wgt':                         'wrt6sig001',
+               'app-widget-sign-author-distributor.wgt':             'wrt6sig003',
+               'app-widget-sign-distributor.wgt':                    'wrt6sig004',
+               'app-widget-sign-invalid.wgt':                        'wrt6sig002',
+               'app-widget-sign-none.wgt':                           'wrt6sig005',
+               'app-device-api-security-alarm.wgt':                  'wrt6api003',
+               'app-device-api-security-application-info.wgt':       'wrt6api004',
+               'app-device-api-security-application-launch.wgt':     'wrt6api005',
+               'app-device-api-security-appmanager-certificate.wgt': 'wrt6api006',
+               'app-device-api-security-bluetooth-health.wgt':       'wrt6api010',
+               'app-device-api-security-bluetooth-manager.wgt':      'wrt6api012',
+               'app-device-api-security-negative.wgt':               'wrt6api050',
+               'app-device-api-security-system.wgt':                 'wrt6api041',
+               'app-device-api-security-systemmanager.wgt':          'wrt6api042',
+               'app-device-api-security-websetting.wgt':             'wrt6api043',
+               'app-device-api-security-secureelement.wgt':          'wrt6api039',
+               'app-device-api-security-setting.wgt':                'wrt6api040',
+               'dynamicbox-reload-background.wgt':                   'tctdyna009',
+               'dynamicbox-reload-foreground.wgt':                   'tctdyna010',
+               'app-widget-unload-event.wgt':                        'wrt6aws020',
+               'app-widget-load-event-alive-time.wgt':               'wrt6aws021'};
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(launch_tpk);
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_ids[uninstall_number]);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    gettpkInfoByPlatForm();
+    packagePre(wgt_names[install_number]);
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is installed");
+        },
+        onupdated: function(packageInfo) {
+            $.mobile.loading('hide');
+            alert("The package " + packageInfo.name + " is updated");
+        },
+        onuninstalled: function(packageId) {
+            $.mobile.loading('hide');
+            alert("The package " + packageId + " is uninstalled");
+        }
+};
+
+function gettpkInfoByPlatForm(){
+    var deviceCapabilities = tizen.systeminfo.getCapabilities();
+    if(deviceCapabilities.platformCoreCpuArch=="armv7"){
+        wgt_names.unshift("rMLtTXzQr2-2.0.0-arm.tpk");
+        package_ids.unshift("rMLtTXzQr2");
+        launch_tpk = "rMLtTXzQr2.DBV";
+    }else if(deviceCapabilities.platformCoreCpuArch=="x86"){
+        wgt_names.unshift("SD2nFxbyeA-2.0.0-i386.tpk");
+        package_ids.unshift("SD2nFxbyeA");
+        launch_tpk = "SD2nFxbyeA.DBV";
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                var Url = files[i].toURI();
+                installUrl = Url.replace("file:///", "/");
+                if(install_number != 0){
+                    install();
+                }
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error" + e.message);
+            }, "r"
+    );
+}
+
+function checkWgtName(filePath) {
+    var name = "";
+    wgt_names.forEach(function (wgt_name) {
+        if (filePath.indexOf(wgt_name) != -1) {
+            name = wgt_name;
+        }
+    });
+
+    return name;
+}
+
+function install() {
+    var totalBar = Math.floor(install_number / wgt_names.length * 100);
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Installing...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            install_number++;
+            if(install_number < wgt_names.length){
+                setTimeout(function() {
+                    packagePre(wgt_names[install_number]);
+                }, 500);
+            }else{
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#launch").removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on installation : " + err.name);
+        }
+        if (install_number < package_ids.length) {
+            $("#install").removeClass("ui-disabled");
+        }
+    }
+
+    $("#install").addClass("ui-disabled");
+    try {
+        var wgt_name = checkWgtName(installUrl);
+        if (wgt_name && checkInstalledPkg(id_maps[wgt_name])) {
+            install_number++;
+            if(install_number < wgt_names.length){
+                packagePre(wgt_names[install_number]);
+            } else {
+                install_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is installed!");
+                $("#install").addClass("ui-disabled");
+                $("#launch").removeClass("ui-disabled");
+            }
+        } else {
+            tizen.package.install(installUrl, onInstallationSuccess, onError);
+        }
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var totalBar = Math.floor(uninstall_number / package_ids.length * 100);
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.loading('show', {
+                text: 'Uninstalling...' + totalBar + '%',
+                textVisible: true,
+                theme: 'a',
+                textonly: false,
+                html: ""
+            });
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            uninstall_number++;
+            if(uninstall_number < package_ids.length){
+                setTimeout(function() {
+                    uninstall(package_ids[uninstall_number]);
+                }, 1000);
+            }else{
+                uninstall_number = 0;
+                $.mobile.loading('hide');
+                alert("All widgets is uninstalled!");
+                EnablePassButton();
+            }
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.loading('hide');
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+        if (uninstall_number < package_ids.length) {
+            $("#uninstall").removeClass("ui-disabled");
+        }
+    }
+
+    $("#launch").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(launch_tpk) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        $.mobile.loading('hide');
+        alert("launch failed : " + err.message);
+    }
+    try {
+        tizen.application.launch(launch_tpk, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name)
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/" + wgt_name,
+                    true,
+                    function() {
+                        console.log(wgt_name + " Precondition Success(1)!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/DynamicBox/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora b/wearable/tct-behavior-tests/tests/DynamicBox/res/LICENSE.Flora
new file mode 100755 (executable)
index 0000000..4a0af40
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices
+     within Derivative Works that You distribute, alongside or as an addendum
+     to the NOTICE text from the Work, provided that such additional attribution
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     and your own copyright statement or terms and conditions do not conflict
+     the conditions stated in the License including section 3.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk b/wearable/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk
new file mode 100755 (executable)
index 0000000..8241fb8
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/SD2nFxbyeA-2.0.0-i386.tpk differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt
new file mode 100755 (executable)
index 0000000..e357ab4
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-alarm.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt
new file mode 100755 (executable)
index 0000000..0669555
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-info.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt
new file mode 100755 (executable)
index 0000000..faf9006
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-application-launch.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt
new file mode 100755 (executable)
index 0000000..691481c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-appmanager-certificate.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt
new file mode 100755 (executable)
index 0000000..378fc5c
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-health.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt
new file mode 100755 (executable)
index 0000000..058bb62
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-bluetooth-manager.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt
new file mode 100755 (executable)
index 0000000..815b192
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-negative.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt
new file mode 100755 (executable)
index 0000000..30f000f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-secureelement.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt
new file mode 100755 (executable)
index 0000000..d6e9d9b
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-setting.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt
new file mode 100755 (executable)
index 0000000..348cbce
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-system.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt
new file mode 100755 (executable)
index 0000000..4488453
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-systemmanager.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt
new file mode 100755 (executable)
index 0000000..4575603
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-device-api-security-websetting.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt
new file mode 100755 (executable)
index 0000000..b85d44f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author-distributor.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt
new file mode 100755 (executable)
index 0000000..6146d9a
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-author.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt
new file mode 100755 (executable)
index 0000000..3a4c627
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-distributor.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt
new file mode 100755 (executable)
index 0000000..04aa91f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-invalid.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt
new file mode 100755 (executable)
index 0000000..2d98f31
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/app-widget-sign-none.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt
new file mode 100755 (executable)
index 0000000..e18ab2e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-background.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt
new file mode 100755 (executable)
index 0000000..2bb2f92
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/dynamicbox-reload-foreground.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt b/wearable/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt
new file mode 100755 (executable)
index 0000000..4f2e3cb
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/invalidsignature.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk b/wearable/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk
new file mode 100755 (executable)
index 0000000..777a62a
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/DynamicBox/res/rMLtTXzQr2-2.0.0-arm.tpk differ
diff --git a/wearable/tct-behavior-tests/tests/FileReader/css/style.css b/wearable/tct-behavior-tests/tests/FileReader/css/style.css
new file mode 100755 (executable)
index 0000000..9ffb372
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+*/
+
+/* Message Div */
+#messageInfo {
+   margin: 10px;
+}
+.errorMessage {
+    color: red;
+}
+
+/* File List */
+#filesList {
+    table-layout: fixed;
+}
+
+#filesList tr td {
+    padding: 5px;
+    font-size: large;
+    word-break: break-all;
+    word-wrap:break-word;
+}
+
+#filePreview {
+    margin-top: 10px;
+    text-align: center;
+    border: 1px solid black;
+    width: 100%;
+    height: 300px;
+    overflow: auto;
+}
+
+#fileContent {
+    position:relative;
+    top:40%;
+}
+
+#uploadButton {
+    margin-top: 20px;
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/tests/FileReader/index.html b/wearable/tct-behavior-tests/tests/FileReader/index.html
new file mode 100755 (executable)
index 0000000..7f1cc20
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <input id="fileUpload" type="file" multiple size="80" onchange="getFileList()" hidden/>
+            <div id="messageInfo">Upload: 0 file</div>
+            <table id="filesList" border="1" width="100%" align="center">
+                <tr id="example"><td width='70%'>No file selected</td><td width='30%'>0KB</td></tr>
+            </table>
+            <div align="center"><div id="filePreview"><p id="fileContent">No file data</p></div></div>
+            <div id="uploadButton" data-role="button">Open files</div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the functionality of File Reader. Tests the functionality of loading one or multiple files, opening the files one by one by clicking the hyperlink in file name.</p>
+                <p>Test Pre-configuration: </p>
+                <p>Ensure at least one txt file is located in the device.</p>
+                <p>Expected Result: </p>
+                <ul>
+                    <li>File upload successfully.</li>
+                    <li>File size show correctly.</li>
+                    <li>File content print on the screen.</li>
+                </ul>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/FileReader/js/main.js b/wearable/tct-behavior-tests/tests/FileReader/js/main.js
new file mode 100755 (executable)
index 0000000..aa8cbe1
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li,Hao <haox.li@intel.com>
+
+*/
+$(document).ready(function(){
+    $("#uploadButton").on("click", function() {
+        if (document.createEvent) {
+            var evt = document.createEvent("MouseEvents");
+            evt.initEvent("click", true, true);
+            $("#fileUpload")[0].dispatchEvent(evt);
+        }
+    });
+    DisablePassButton();
+});
+
+
+function getFileList() {
+    try{
+        // get FileList through input element
+        var filesList = document.getElementById("fileUpload").files;
+        // FileList.length
+        if(filesList && filesList.length > 0){
+            $("#example").remove();
+            $("#messageInfo").html("Upload: " + filesList.length + " file/s");
+            var filesStr = "";
+            for(var i= 0; i < filesList.length; i++) {
+                // FileList.item() to get file items
+                var file = filesList.item(i);
+                // Blob.slice testing
+                file.slice = file.slice || file.webkitSlice || file.mozSlice;
+                var fileBlob = file.slice(0, file.size);
+                // This fileBlob should be the same with the file
+                if(fileBlob.size == file.size){
+                    filesStr = filesStr + "<tr><td width='70%'><a href='javascript:startRead(" + i + ")'>" + file.name + "</a></td><td width='30%'>" + Math.round(file.size/1024) + "KB</td>" + "</tr>";
+                }
+            }
+            $("#filesList").show();
+            $("#filesList").html(filesStr);
+        }
+    } catch (err) {
+        $("#messageInfo").addClass("errorMessage");
+        $("#messageInfo").html("Error: " + err.code + " - " + err.message);
+    }
+}
+
+var filetype = "";
+function startRead(index) {
+
+    var file = document.getElementById("fileUpload").files[index];
+    if (file) {
+        var reader = new FileReader();
+        if(file.type.indexOf("text") >= 0) {
+            // readAsText
+            // Read file into memory as UTF-8
+            reader.readAsText(file, "UTF-8");
+            filetype = "text";
+        } else if (file.type.indexOf("image") >= 0) {
+            // readAsDataURL
+            reader.readAsDataURL(file);
+            filetype = "image";
+        } else {
+            try {
+                //try to read other types of file as text.
+                reader.readAsText(file, "UTF-8");
+                filetype = "text";
+            } catch(e) {
+                $.mobile.hidePageLoadingMsg();
+                $("#filePreview").html("Cannot pre-view this type of file!");
+            }
+        }
+        EnablePassButton();
+        // Handle progress, success, and errors
+        reader.onloadstart = loadstart;
+        reader.onload = loaded;
+        reader.onloadend = loadend;
+        reader.onerror = errorHandler;
+    }
+}
+function loadstart(evt) {
+    // loading
+    $.mobile.showPageLoadingMsg();
+}
+
+function loaded(evt) {
+    var reader = evt.target;
+    if (reader && reader.result) {
+        if(filetype == "text") {
+            $("#filePreview").html(reader.result);
+        } else if (filetype == "image") {
+            $("#filePreview").html("<image src='" + reader.result + "'></image>");
+        }
+    }
+}
+
+function loadend(evt) {
+    $.mobile.hidePageLoadingMsg();
+}
+
+function errorHandler(evt) {
+   $("#messageInfo").addClass("errorMessage");
+   $("#messageInfo").html(evt.target.error.name);
+}
diff --git a/wearable/tct-behavior-tests/tests/FullScreen/index.html b/wearable/tct-behavior-tests/tests/FullScreen/index.html
new file mode 100755 (executable)
index 0000000..96402ca
--- /dev/null
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <style>
+            div:full-screen {
+                opacity: 0;
+            }
+            div:-webkit-full-screen {
+                opacity: 0;
+            }
+            :full-screen-ancestor {
+                opacity: 1;
+                background: green;
+            }
+            :-webkit-full-screen-ancestor {
+                background: green;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider" id="labelFullScreen">FullScreen</li>
+                <li id ="buttonFullScreen">
+                    <div data-role="button" id="requestFullScreen">Request</div>
+                    <div data-role="button" id="cancelFullScreen" class="hideButton">Cancle FullScreen</div>
+                </li>
+                <li data-role="list-divider" id="labelcssFullScreen">CSS FullScreen</li>
+                <li id ="buttoncssFullScreen">
+                    <div data-role="button" id="cssFullScreen">Request</div>
+                    <div data-role="button" id="cancelCssFullScreen" class="hideButton">Cancle CSS FullScreen</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the full screen mode and CSS full screen mode could be enabled and cancelled. The CSS full screen mode is filled with green color in background.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if full screen mode and CSS full screen mode functions all work well.</p>
+            </div>
+        </div>
+    </body>
+</body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/FullScreen/js/main.js b/wearable/tct-behavior-tests/tests/FullScreen/js/main.js
new file mode 100755 (executable)
index 0000000..cfb4371
--- /dev/null
@@ -0,0 +1,97 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+*/
+$(document).ready(function () {
+    DisablePassButton();
+    $("#requestFullScreen").on(
+        "click",
+        function(evt) {
+            document.documentElement.webkitRequestFullScreen();
+            requestElement("cancelFullScreen");
+            EnablePassButton();
+     });
+
+     $("#cancelFullScreen").on(
+        "click",
+        function(evt) {
+            document.webkitCancelFullScreen();
+            requestElement("");
+     });
+
+     $("#cssFullScreen").on(
+        "click",
+        function(evt) {
+            if (!document.webkitIsFullScreen) {
+                var element = evt.originalEvent.srcElement;
+                requestElement("cancelCssFullScreen");
+                element.webkitRequestFullScreen();
+                setTimeout(function() {
+                    document.documentElement.webkitRequestFullScreen();
+                }, 50);
+            }
+            EnablePassButton();
+     });
+
+     $("#cancelCssFullScreen").on(
+        "click",
+        function(evt) {
+            window.location.reload();
+            /**if (document.webkitIsFullScreen) {
+                document.webkitCancelFullScreen();
+                if ($(document)["context"].styleSheets.length == 2) {
+                    $(document)["context"].styleSheets[1].deleteRule(1);
+                }
+                document.documentElement.webkitRequestFullScreen();
+                window.location.reload();
+            }*/
+     });
+});
+
+function requestElement(ID) {
+    var IDs = ["requestFullScreen", "cancelFullScreen", "cssFullScreen", "cancelCssFullScreen", "labelFullScreen", "labelcssFullScreen", "buttonFullScreen", "buttoncssFullScreen"];
+    IDs.forEach(function(entry) {
+        if (ID != entry) {
+            if (ID == "cancelFullScreen" && entry != "labelFullScreen" && entry != "buttonFullScreen") {
+                $("#" + entry).hide();
+            } else if (ID == "cancelCssFullScreen" && entry != "labelcssFullScreen" && entry != "buttoncssFullScreen") {
+                $("#" + entry).hide();
+            }
+        } else {
+            $("#" + entry).css("display", "");
+            $("#" + entry).show();
+        }
+        if (ID == "") {
+            if (entry == IDs[1] || entry == IDs[3]) {
+                $("#" + entry).hide();
+            } else {
+                $("#" + entry).show();
+            }
+        }
+    });
+}
diff --git a/wearable/tct-behavior-tests/tests/IMEApplication/index.html b/wearable/tct-behavior-tests/tests/IMEApplication/index.html
new file mode 100755 (executable)
index 0000000..a59df6d
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8"/>
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width"/>
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css"/>
+    <link rel="stylesheet" type="text/css" href="../../css/main.css"/>
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="fixed" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="imeapp" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">IME Application</li>
+                <li id="imeapplication">
+                    <a href="javascript:goToApp('res/ime_application.html')" data-transition="slide" style="">
+                        <h2>IME_Application_Test</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean the installed package</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean test application</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of IME application.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies IME application.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/IMEApplication/js/main.js b/wearable/tct-behavior-tests/tests/IMEApplication/js/main.js
new file mode 100755 (executable)
index 0000000..ed4d4df
--- /dev/null
@@ -0,0 +1,298 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+var allId=new Array('X4o1yeBCfC');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "IMEApplication";
+var RESULT_FILE_NAME = "tct-behavior-child.ime.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cordovaList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/IMEApplication/js/tests.js b/wearable/tct-behavior-tests/tests/IMEApplication/js/tests.js
new file mode 100755 (executable)
index 0000000..f4d7c3b
--- /dev/null
@@ -0,0 +1,239 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/IMEApplication/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
+
+document.write('<script src="../webrunner/jquery-1.10.2.min.js"></script>');
diff --git a/wearable/tct-behavior-tests/tests/IMEApplication/res/WebInputMethodEditor.wgt b/wearable/tct-behavior-tests/tests/IMEApplication/res/WebInputMethodEditor.wgt
new file mode 100644 (file)
index 0000000..149a417
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/IMEApplication/res/WebInputMethodEditor.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/IMEApplication/res/ime_application.html b/wearable/tct-behavior-tests/tests/IMEApplication/res/ime_application.html
new file mode 100755 (executable)
index 0000000..918cc28
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2015 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Zhongyuan Yuan <zy123.yuan@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="imeapplication">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="WebInputMethodEditor"/>
+                <input type="hidden" id="app_id"  value="X4o1yeBCfC.WebInputMethodEditor"/>
+                <input type="hidden" id="package_id" value="X4o1yeBCfC"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Text Input</li>
+                <li>
+                                       <div data-role="fieldcontain">
+                      <input type="text" name="input" id="input" align="center">
+                    </div>
+                </li>
+                <li data-role="list-divider">IME Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="fixed" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Step 1: Click the "Install" button to install the IME application.</li>
+              <li>Step 2: Go to Setting->Text Input->Default keyborad->Select WebInputMethodEditor.</li>
+              <li>Step 3: Touch the input field should show the IME layout.</li>
+              <li>Step 4: Touch on characters to input any string.</li>
+              <li>Step 5: Touch on other place should hide the IME layout.</li>
+              <li>Step 6: Click "Back" and then click "Clean test application" button to uninstall the IME application.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if IME works well.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/MediaPlayback/css/style.css b/wearable/tct-behavior-tests/tests/MediaPlayback/css/style.css
new file mode 100755 (executable)
index 0000000..c2ee1ee
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+*/
+
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.7em;
+}
+.ui-slider-popup {
+    position: absolute !important;
+    width: 64px;
+    height: 64px;
+    text-align: center;
+    font-size: 36px;
+    padding-top: 14px;
+    z-index: 100;
+    opacity: 0.8;
+}
+div.ui-slider {
+    margin: 0 2% 0 0px;
+    width:100%;
+}
+
+div.ui-slider-bg {
+border: none;
+height: 100%;
+}
diff --git a/wearable/tct-behavior-tests/tests/MediaPlayback/index.html b/wearable/tct-behavior-tests/tests/MediaPlayback/index.html
new file mode 100755 (executable)
index 0000000..ca95f5d
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="contentdiv">
+                <video id="MediaPlayback" width="300" height="176" src="" poster="../../res/images/PNG_512x512_318Kb_BBB.png" controls="controls" loop>Not Support ...</video>
+            </div>
+            <div id="volumediv" data-role="controlgroup">
+                <label for="slider-1">Volume</label>
+                <input name="slider-1" id="slider-1" min="0" max="1" step="0.01" value="0.60" data-highlight="true" data-show-value="true" type="range">
+            </div>
+            <div id="buttondiv">
+                <a href="javascript:Previous()" id="previous" data-role="button">Retest Previous Video</a>
+                <a href="javascript:Next()" id="next" data-role="button">Test Next Video</a>
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the video playback of 3GP and MP4 files works correctly. And tests the functionality of playback operations including play and pause, volume up and down, time bar sliding forward and backward, full screen and normal screen switching on every video files.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if all the check points work well during the video playback.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/MediaPlayback/js/COPYING b/wearable/tct-behavior-tests/tests/MediaPlayback/js/COPYING
new file mode 100755 (executable)
index 0000000..ecf954c
--- /dev/null
@@ -0,0 +1,25 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+-  define( [ "jquery", "./slider" ], function( $ ) {
++  //define( [ "jquery", "./slider" ], function( $ ) {
+
+        if (o.popupEnabled) {
+             this._positionPopup();
+-            this._popup.html(Math.round(newValue));
++            this._popup.html(Math.round(newValue*100)+"%" );
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+         if (o.showValue) {
+-            this._handleText.html(Math.round(newValue));
++            this._handleText.html(Math.round(newValue*100)+"%");
++            document.getElementById("MediaPlayback").volume = newValue;
+         }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/wearable/tct-behavior-tests/tests/MediaPlayback/js/main.js b/wearable/tct-behavior-tests/tests/MediaPlayback/js/main.js
new file mode 100755 (executable)
index 0000000..8b31e0f
--- /dev/null
@@ -0,0 +1,103 @@
+/*
+ Copyright (c) 2013 Intel Corporation.
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+ * Redistributions of works must retain the original copyright notice, this list
+ of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the original copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this work without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Authors:
+ Cui,Jieqiong <jieqiongx.cui@intel.com>
+
+ */
+
+var videoFileList = [
+        "3GP_h263_CIF_30FPS_507Kbps_eAAC+_Stereo_64Kbps_60sec(4.1Mb)_BBB.3gp",
+        "MP4_h264_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3.4Mb)_BBB(hinted).mp4",
+        "MP4_MPEG4_CIF_15FPS_387Kbps_MP3_44.1KHz_64Kbps_60sec(3Mb)_BBB(hinted).mp4"
+    ];
+var testTarget = "";
+
+$(document).ready(function () {
+    $("#previous").addClass("ui-disabled");
+
+    //add contentdiv style
+    $("#contentdiv").css({"width": "340px", "margin": "0px auto"});
+    //set default video.src
+    $("#MediaPlayback").attr("src", "../../res/media/" + videoFileList[0]);
+    document.getElementById("MediaPlayback").play();
+
+    document.getElementById("MediaPlayback").volume = 0.6;
+    $("#slider-1").hide();
+    DisablePassButton();
+});
+
+function Previous() {
+    var fileName, i;
+    testTarget = document.getElementById("MediaPlayback");
+    fileName = getFileName(testTarget.src);
+    for (i = 0; i < 3; i++) {
+        if (fileName !== videoFileList[i]) {
+            continue;
+        } else {
+            break;
+        }
+    }
+    if (i > 1) {
+        testTarget.src = "../../res/media/" + videoFileList[i - 1];
+        testTarget.play();
+        $("#next").removeClass("ui-disabled");
+    } else {
+        testTarget.src = "../../res/media/" + videoFileList[i - 1];
+        testTarget.play();
+        $("#previous").addClass("ui-disabled");
+        $("#next").removeClass("ui-disabled");
+    }
+}
+
+function Next() {
+    var fileName, i;
+    testTarget = document.getElementById("MediaPlayback");
+    fileName = getFileName(testTarget.src);
+    for (i = 0; i < 3; i++) {
+        if (fileName !== videoFileList[i]) {
+            continue;
+        } else {
+            break;
+        }
+    }
+    if (i < 1) {
+        testTarget.src = "../../res/media/" + videoFileList[i + 1];
+        testTarget.play();
+        $("#previous").removeClass("ui-disabled");
+    } else {
+        testTarget.src = "../../res/media/" + videoFileList[i + 1];
+        testTarget.play();
+        $("#next").addClass("ui-disabled");
+        $("#previous").removeClass("ui-disabled");
+        EnablePassButton();
+    }
+}
+
+function getFileName(o) {
+    var pos = o.lastIndexOf("/");
+    return o.substring(pos + 1);
+}
diff --git a/wearable/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js b/wearable/tct-behavior-tests/tests/MediaPlayback/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..ee23568
--- /dev/null
@@ -0,0 +1,115 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function ($, undefined) {
+
+    $.widget("mobile.slider", $.mobile.slider, {
+        options: {
+            popupEnabled: false,
+            showValue: false
+        },
+        _create: function () {
+            var o = this.options,
+                popup = $("<div></div>", {
+                    class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + (o.theme ? o.theme : $.mobile.getInheritedTheme(this.element, "c"))
+                });
+
+            this._super();
+
+            $.extend(this, {
+                _currentValue: null,
+                _popup: popup,
+                _popupVisible: false,
+                _handleText: this.handle.find(".ui-btn-text")
+            });
+
+            this.slider.before(popup);
+            popup.hide();
+
+            this._on(this.handle, {"vmousedown": "_showPopup"});
+            this._on(this.slider.add($.mobile.document), {"vmouseup": "_hidePopup"});
+            this._refresh();
+        },
+        // position the popup centered 5px above the handle
+        _positionPopup: function () {
+            var dstOffset = this.handle.offset();
+            this._popup.offset({
+                left: dstOffset.left + (this.handle.width() - this._popup.width()) / 2,
+                top: dstOffset.top - this._popup.outerHeight() - 5
+            });
+        },
+        _setOption: function (key, value) {
+            this._super(key, value);
+
+            if (key === "showValue") {
+                if (value) {
+                    this._handleText.html(this._value()).show();
+                } else {
+                    this._handleText.hide();
+                }
+            }
+        },
+        // show value on the handle and in popup
+        refresh: function () {
+            this._super.apply(this, arguments);
+
+            // necessary because slider's _create() calls refresh(), and that lands
+            // here before our own _create() has even run
+            if (!this._popup) {
+                return;
+            }
+
+            this._refresh();
+        },
+        _refresh: function () {
+            var o = this.options, newValue;
+
+            if (o.popupEnabled) {
+                // remove the title attribute from the handle (which is
+                // responsible for the annoying tooltip); NB we have
+                // to do it here as the jqm slider sets it every time
+                // the slider's value changes :(
+                this.handle.removeAttr("title");
+            }
+
+            newValue = this._value();
+            if (newValue === this._currentValue) {
+                return;
+            }
+            this._currentValue = newValue;
+
+            if (o.popupEnabled) {
+                this._positionPopup();
+                this._popup.html(Math.round(newValue * 100) + "%");
+                document.getElementById("MediaPlayback").volume = newValue;
+            }
+
+            if (o.showValue) {
+                this._handleText.html(Math.round(newValue * 100) + "%");
+                document.getElementById("MediaPlayback").volume = newValue;
+            }
+        },
+        _showPopup: function () {
+            if (this.options.popupEnabled && !this._popupVisible) {
+                this._handleText.hide();
+                this._popup.show();
+                this._positionPopup();
+                this._popupVisible = true;
+            }
+        },
+        _hidePopup: function () {
+            if (this.options.popupEnabled && this._popupVisible) {
+                this._handleText.show();
+                this._popup.hide();
+                this._popupVisible = false;
+            }
+        }
+    });
+
+})(jQuery);
diff --git a/wearable/tct-behavior-tests/tests/Package/NOTICE b/wearable/tct-behavior-tests/tests/Package/NOTICE
new file mode 100755 (executable)
index 0000000..d9be9d0
--- /dev/null
@@ -0,0 +1,13 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
+
+Following resources are licensed under its own license.
+
+res/TestPackage1,
+res/TestPackage2 :
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All right reserved.
+The above resource files are licensed under Creative Commons Attribution 3.0.
+Please see the LICENSE.CC-BY-3.0 for Creative Commons Attribution 3.0 terms and conditions.
diff --git a/wearable/tct-behavior-tests/tests/Package/index.html b/wearable/tct-behavior-tests/tests/Package/index.html
new file mode 100755 (executable)
index 0000000..240ef99
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview">
+                    <li data-role="list-divider">Package Install</li>
+                    <li>
+                        <div data-role="button" id="install" style="height:40px; line-height:20px;">TestPackage1 Install</div>
+                    </li>
+                    <li data-role="list-divider">TestPackage Application Launch</li>
+                    <li>
+                        <div data-role="button" id="launch1">Launch</div>
+                    </li>
+                    <li data-role="list-divider">Package Update</li>
+                    <li>
+                        <div data-role="button" id="update" style="height:40px; line-height:20px;">TestPackage2 Update</div>
+                    </li>
+                    <li data-role="list-divider">TestPackage Application Launch</li>
+                    <li>
+                        <div data-role="button" id="launch2">Launch</div>
+                    </li>
+                    <li data-role="list-divider">Package UnInstall</li>
+                    <li>
+                        <div data-role="button" id="uninstall" style="height:40px; line-height:20px;">TestPackage UnInstall</div>
+                    </li>
+                    <li data-role="list-divider">TestPackage Application Launch</li>
+                    <li>
+                        <div data-role="button" id="launch3">Launch</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info">
+                <div style="font-size:85%">
+                    <p>Check if Package is successfully installed, updated and uninstalled</p><br>
+                    <p>1. Install TestPackage1</p>
+                    <p>2. Launch TestPackage1</p>
+                    <p>3. Check if TestPackage is launched successfully</p>
+                    <p>4. Automatically write the text('Package_Test') and click the OK button</p>
+                    <p>5. Check the PASS text
+                    <p>6. Update TestPackage2</p>
+                    <p>7. Launch TestPackage2</p>
+                    <p>8. Check if TestPackage is updated and launched successfully</p>
+                    <p>9. Automatically read the text('Package_Test') and click the OK button</p>
+                    <p>10. Check the PASS text
+                    <p>11. Uninstall TestPackage</p>
+                    <p>12. Launch TestPackage and check it fails</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Package/js/main.js b/wearable/tct-behavior-tests/tests/Package/js/main.js
new file mode 100755 (executable)
index 0000000..b8bf016
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+ */
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var installUrl, updateUrl;
+var flag = false;
+$(document).delegate("#main", "pageinit", function() {
+    $("#install").bind("vclick", function() {
+        install(installUrl, "install");
+        $("#launch1").removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall();
+        $("#launch3").removeClass("ui-disabled");
+        $("#launch2").addClass("ui-disabled");
+    });
+    $("#update").bind("vclick", function() {
+        install(updateUrl, "update");
+        $("#launch2").removeClass("ui-disabled");
+        $("#launch1").addClass("ui-disabled");
+    });
+    $("#launch1").bind("vclick", function() {
+        launch();
+        $("#update").removeClass("ui-disabled");
+    });
+    $("#launch2").bind("vclick", function() {
+        launch();
+        $("#uninstall").removeClass("ui-disabled");
+    });
+    $("#launch3").bind("vclick", function() {
+        launch();
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+    packagePre();
+    $("#launch1").addClass("ui-disabled");
+    $("#launch2").addClass("ui-disabled");
+    $("#launch3").addClass("ui-disabled");
+    $("#uninstall").addClass("ui-disabled");
+    $("#update").addClass("ui-disabled");
+});
+
+var packageEventCallback = {
+        oninstalled: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is installed");
+            flag = true;
+        },
+        onupdated: function(packageInfo) {
+            alert("The package " + packageInfo.name + " is updated");
+            flag = true;
+        },
+        onuninstalled: function(packageId) {
+            alert("The package " + packageId + " is uninstalled");
+            flag = false;
+        }
+};
+
+function fileURI() {
+    var documentsDir, i;
+    function onsuccess(files) {
+        for (i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage1.wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+            if(files[i].name == "TestPackage2.wgt")
+            {
+                var Url2 = files[i].toURI();
+                updateUrl = Url2.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+            'file://' + RESOURCE_DIR + '/Documents',
+            function(dir){
+                documentsDir = dir;
+                dir.listFiles(onsuccess, onerror);
+            }, function(e) {
+                alert("Error " + e.message);
+            }, "r"
+    );
+}
+
+function install(url, type) {
+    var onInstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+                if(type == "install")
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">Installing... ' + percentage + "%" + '</div>';
+                if(type == "update")
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">Updating... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Installation(" + packageId + ") Complete");
+                if(type == "install"){
+                    document.getElementById("install").innerHTML =  '<div data-role="button" id="install" style="height:40px; line-height:40px;">TestPackage1 Install</div>';
+                    $("#install").addClass("ui-disabled");
+                }
+                if(type == "update") {
+                    document.getElementById("update").innerHTML =  '<div data-role="button" id="update" style="height:40px; line-height:40px;">TestPackage2 Update</div>';
+                    $("#update").addClass("ui-disabled");
+                }
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        tizen.package.install(url, onInstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall() {
+    var onUninstallationSuccess = {
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">UnInstalling... ' + percentage + "%" + '</div>';
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                document.getElementById("uninstall").innerHTML =  '<div data-role="button" id="uninstall" style="height:40px; line-height:40px;">TestPackage UnInstall</div>';
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.name);
+    }
+
+    try {
+        if(flag == false)
+            alert("TestPackage is already Uninstalled or not Installed");
+        else
+            tizen.package.uninstall("bhvtcpacka", onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch() {
+    function onSuccess() {
+        console.log("Application launched successfully");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch("bhvtcpacka.TestPackage", onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre() {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == "TestPackage2.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestPackage2.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(1)!");
+                    });
+            }
+            if(files[i].name == "TestPackage1.wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/TestPackage1.wgt",
+                    true,
+                    function() {
+                        console.log("Package Precondition Success(2)!");
+                    });
+            }
+        }
+        fileURI();
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Package/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error " + e.message);
+        }, "r"
+    );
+}
diff --git a/wearable/tct-behavior-tests/tests/Package/res/TestPackage1.wgt b/wearable/tct-behavior-tests/tests/Package/res/TestPackage1.wgt
new file mode 100755 (executable)
index 0000000..774a336
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Package/res/TestPackage1.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/Package/res/TestPackage2.wgt b/wearable/tct-behavior-tests/tests/Package/res/TestPackage2.wgt
new file mode 100755 (executable)
index 0000000..8663731
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Package/res/TestPackage2.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/index.html b/wearable/tct-behavior-tests/tests/PackageManagement/index.html
new file mode 100755 (executable)
index 0000000..66d1e85
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                    <li data-role="list-divider" role="heading">Test PKManagement installation</li>
+                    <li id="Sample-widget1">
+                        <a href="javascript:goToApp('res/Sample-widget1.html')" data-transition="slide" style="">
+                            <h2>pkmanagement-app-installed</h2>
+                        </a>
+                    </li>
+                    <li id="Sample-widget2">
+                        <a href="javascript:goToApp('res/Sample-widget2.html')" data-transition="slide" style="">
+                            <h2>pkmanagement-powerfailure-install</h2>
+                        </a>
+                    </li>
+                    <li id="Sample-widget3">
+                        <a href="javascript:goToApp('res/Sample-widget3.html')" data-transition="slide" style="">
+                            <h2>webapp-filebrowser-install</h2>
+                        </a>
+                    </li>
+                    <li id="Sample-widget4">
+                        <a href="javascript:goToApp('res/Sample-widget4.html')" data-transition="slide" style="">
+                            <h2>webapp-get-information</h2>
+                        </a>
+                    </li>
+                    <li id="widget-version-1">
+                        <a href="javascript:goToApp('res/widget-version-1.html')" data-transition="slide" style="">
+                            <h2>pkmanagement-offlineupdate-closeupdate</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Clean all the Installed packages</li>
+                    <li>
+                        <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                    <p>Test Note: </p>
+                    <p>Verifies the functionality of installing, updating and uninstalling web applications.</p>
+                    <p>Test Purpose: </p>
+                    <p>Verifies WRT can manage web applications by installing, updating and uninstalling web applications.</p>
+                    <p>Expected Result: </p>
+                    <p>Test passes if all sub-tests pass.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/js/main.js b/wearable/tct-behavior-tests/tests/PackageManagement/js/main.js
new file mode 100755 (executable)
index 0000000..a759c1d
--- /dev/null
@@ -0,0 +1,308 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrt1wvt006',
+                    'wrt1smt007',
+                    'wrt1smt008',
+                    'wrt1smt009',
+                    'wrt1smt010',
+                    'UZmPMhuMeO',
+                    'ZkMSjQuYt8');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "PackageManagement";
+var RESULT_FILE_NAME = "tct-behavior-child.pm.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function getPackageInfo(packageId){
+    var packageInfo = tizen.package.getPackageInfo(packageId);
+    console.log("Current Package ID : " + packageInfo.id);
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/js/tests.js b/wearable/tct-behavior-tests/tests/PackageManagement/js/tests.js
new file mode 100755 (executable)
index 0000000..81f60de
--- /dev/null
@@ -0,0 +1,257 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var update_wgt = new Array('widget-version-1');
+var nolaunch_wgt = new Array('Sample-widget3','Sample-widget4');
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install("install");
+    });
+    if(jQuery.inArray(wgt_name, update_wgt) != -1){
+        $("#launch").bind("vclick", function() {
+            packagePre("widget-version-1-1");
+            install("update");
+        });
+    } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install(type) {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            if(jQuery.inArray(wgt_name, update_wgt) != -1 && type == "update"){
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').removeClass("ui-disabled");
+            } else if(jQuery.inArray(wgt_name, nolaunch_wgt) != -1){
+                $('#uninstall').removeClass("ui-disabled");
+            } else {
+                $('#launch').removeClass("ui-disabled");
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/PackageManagement/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.html
new file mode 100755 (executable)
index 0000000..fb2b344
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget1"/>
+                <input type="hidden" id="app_id"  value="wrt1smt007.Samplewidget1"/>
+                <input type="hidden" id="package_id" value="wrt1smt007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is a widget named "Sample-widget1" on the device screen after the widget installed.</li>
+              <li>When click the "Launch" button, a "PASS" is displayed.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt
new file mode 100755 (executable)
index 0000000..d3c4150
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget1.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.html
new file mode 100755 (executable)
index 0000000..692c339
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget2">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget2"/>
+                <input type="hidden" id="app_id"  value="wrt1smt008.Samplewidget2"/>
+                <input type="hidden" id="package_id" value="wrt1smt008"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the "Sample-widget2" app is not installed.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget, during the installing power off(e.g,takre off battery) and power on the device, and make sure the "Sample-widget2" is not installed.</li>
+              <li>Re-open the "pkmanagement-powerfailure-install" test.</li>
+              <li>Click the "Install" button to install the widget again.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation of "Sample-widget2" app can run correctly.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt
new file mode 100755 (executable)
index 0000000..f7dfc1f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget2.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.html
new file mode 100755 (executable)
index 0000000..57c6871
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget3">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget3"/>
+                <input type="hidden" id="app_id"  value="wrt1smt009.Samplewidget3"/>
+                <input type="hidden" id="package_id" value="wrt1smt009"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Copy the "Sample-widget3.wgt" to "Downloads" folder. For example, use the command 1: admin user: "sdb pull /opt/usr/globalapps/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt", local user: "sdb pull /home/{user}/apps_rw/tctbhtests/res/wgt/tests/PackageManagement/res/Sample-widget3.wgt" command 2: admin user: "sdb push Sample-widget3.wgt /opt/usr/share/Downloads/", local user: "sdb push Sample-widget3.wgt /home/{user}/share/Downloads/"</li>
+              <li>Open the file browser and select "Sample-widget3" webapp to install.</li>
+              <li>Click the "Uninstall" button to uninstall the widget "Sample-widget3".</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the "Sample-widget3" webapp is installed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt
new file mode 100755 (executable)
index 0000000..d23e547
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget3.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.html
new file mode 100755 (executable)
index 0000000..47a47df
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="Sample-widget4">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="Sample-widget4"/>
+                <input type="hidden" id="app_id"  value="wrt1smt010.Samplewidget4"/>
+                <input type="hidden" id="package_id" value="wrt1smt010"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Check the widget details information with command: "wrt-launcher -l" in terminal.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the command line displays: "Name: Sample-widget4", "Version: 1.0.0", " Package ID: wrt1smt010", "App ID: wrt1smt010.Samplewidget4".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt
new file mode 100755 (executable)
index 0000000..7e1fcae
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/Sample-widget4.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt
new file mode 100755 (executable)
index 0000000..dcd347e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1-1.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html b/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.html
new file mode 100755 (executable)
index 0000000..98f16db
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="widget-version-1">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="widget-version-1"/>
+                <input type="hidden" id="app_id"  value="wrt1wvt006.widgetversion"/>
+                <input type="hidden" id="package_id" value="wrt1wvt006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Update</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Update</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Update" button to update the widget, during the updating close the terminal.</li>
+              <li>Re-open this TC, click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>There is <strong>no error message</strong>.</li>
+              <li>There is <strong>no system crash</strong>.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt b/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt
new file mode 100755 (executable)
index 0000000..96bdbc1
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/PackageManagement/res/widget-version-1.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/PageVisibility/index.html b/wearable/tct-behavior-tests/tests/PageVisibility/index.html
new file mode 100755 (executable)
index 0000000..6cea88d
--- /dev/null
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Ma, Yue <yuex.ma@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div data-role="content">
+                <div data-role="collapsible-set" data-inset="false" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" data-theme="b">
+                    <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                        <h3 id="homeList1">Screen-lock State</h3>
+                        <ul data-role="listview" data-inset="false">
+                            <li class="ui-li ui-li-static" id="lock"></li>
+                        </ul>
+                    </div>
+                    <div data-role="collapsible" data-collapsed="true" data-theme="b">
+                        <h3 id="homeList2">Screen-unlock State</h3>
+                        <ul data-role="listview" data-inset="false">
+                            <li class="ui-li ui-li-static" id="unlock"></li>
+                        </ul>
+                    </div>
+                </div>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the device is able to handle pageVisible event when lock and unlock the screen by gesture.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the screen lock and unlock information displayed correctly on screen.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/PageVisibility/js/main.js b/wearable/tct-behavior-tests/tests/PageVisibility/js/main.js
new file mode 100755 (executable)
index 0000000..e1eb13f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ Copyright (c) 2013 Intel Corporation.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of works must retain the original copyright notice, this list
+ of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the original copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors
+ may be used to endorse or promote products derived from this work without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ Authors:
+   Ma,Yue <yuex.ma@intel.com>
+
+*/
+
+var visibilitychange = "visibilitychange";
+var array = new Array("webkit", "o", "moz", "ms");
+for(var i = 0; i < array.length; i++) {
+    if(array[i] + "Hidden" in document) {
+        visibilitychange = array[i] + "visibilitychange";
+    }
+}
+
+$(document).delegate("#main", "pageinit", function() {
+    document.addEventListener(visibilitychange, notification);
+    DisablePassButton();
+});
+
+function notification() {
+    EnablePassButton();
+    var doc_hidden = document.hidden | document.webkitHidden | document.oHidden | document.mozHidden | document.msHidden;
+    var visibilitystate = document.visibilityState || document.webkitVisibilityState || document.oVisibilityState || document.mozVisibilityState || document.msVisibilityState;
+    var hidden = doc_hidden == 0 ? false : true;
+    var date = new Date().toString().substr(4, 20);
+    if(visibilitystate === "hidden" && hidden) {
+        $("#lock").html(function(i, origText) {return origText  + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    } else if (visibilitystate === "visible" && !hidden) {
+         $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "visibilitystate : " + visibilitystate + "<br>" + " hidden : " + hidden + "<br>"});
+    }else {
+        $("#lock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+        $("#unlock").html(function(i, origText) {return origText + date + "<br>" + "Fail " + "<br>"});
+    }
+}
diff --git a/wearable/tct-behavior-tests/tests/Power/NOTICE b/wearable/tct-behavior-tests/tests/Power/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/wearable/tct-behavior-tests/tests/Power/index.html b/wearable/tct-behavior-tests/tests/Power/index.html
new file mode 100755 (executable)
index 0000000..c517c7e
--- /dev/null
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="list">
+                <li data-role="list-divider">Request Screen</li>
+                <li>
+                    <input type="button" value="Request SCREEN_DIM" onclick="request('SCREEN_DIM');" />
+                </li>
+                <li>
+                    <input type="button" value="Request SCREEN_NORMAL" onclick="request('SCREEN_NORMAL');" />
+                </li>
+                <li data-role="list-divider">Release Screen</li>
+                <li>
+                    <input type="button" value="Release SCREEN" onclick="release();" />
+                </li>
+                <li data-role="list-divider">Turn Off</li>
+                <li>
+                    <input type="button" value="Turn SCREEN_OFF" onclick="turnScreenOff();" />
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div style="font-size:85%">
+                <p>Check if the screen status is successfully changed</p>
+                <p>(Note: Response time varies depends on the system setting)</p><br>
+                <p>* Setting -> Display -> Backlight time : 15 Seconds<p>
+                <p>1. Click Request SCREEN_DIM(After 15 second) : Check if the screen is dim. But Screen doesn't turn off</p>
+                <p>2. Click Request SCREEN_NORMAL(After 15 second) : Check if the screen doesn't dim and turn off</p>
+                <p>3. Click Release SCREEN(After 15 second) : Check the screen resource release(Screen is dim and turn off)</p>
+                <p>4. Click Turn SCREEN_OFF and check the screen is off immediately</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Power/js/main.js b/wearable/tct-behavior-tests/tests/Power/js/main.js
new file mode 100755 (executable)
index 0000000..6494db4
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+
+//request
+function request(screenState){
+    tizen.power.release("SCREEN");
+    try{
+        alert(screenState);
+        tizen.power.request("SCREEN", screenState);
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+// release
+function release(){
+    try{
+        alert("SCREEN_RELEASE");
+        tizen.power.release("SCREEN");
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
+
+//turnScreenOff
+function turnScreenOff(){
+    try{
+        alert("SCREEN_OFF");
+        tizen.power.turnScreenOff();
+    }catch(err) {
+        console.log("errorname: " + err.name + ", description: " + err.description + ", messsage: " + err.message);
+    }
+}
diff --git a/wearable/tct-behavior-tests/tests/SVGTransformation/index.html b/wearable/tct-behavior-tests/tests/SVGTransformation/index.html
new file mode 100755 (executable)
index 0000000..bcf7f9b
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Cui, Jieqiong <jieqiongx.cui@intel.com>
+
+-->
+
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <style>
+            /* Test Display Box */
+            .display_box {
+                width: 100%;
+                border: 1px solid #000;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role= "content">
+            <svg width="330" height="400" class="display_box">
+            <circle cx="100" cy="50" r="20" fill="blue">
+            <animateTransform attributeName='transform' attributeType='XML' type='rotate' from='180 170 200' to='-360 100 50' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+            <animateTransform attributeName='transform' attributeType='XML' type='scale' from='1' to='2' dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+            <animateTransform attributeName='transform' attributeType='XML' type='skewX' by="30" dur='10s' additive='sum' fill='freeze' repeatCount='indefinite'/>
+            </circle>
+            </svg>
+            <p><a href="javascript: document.location.reload();" data-role="button">Test Again</a></p>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the blue circle could be transferred to ellipse, and rotate along with elliptical patch at the same time.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the transformation and rotate function well.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Security/css/style.css b/wearable/tct-behavior-tests/tests/Security/css/style.css
new file mode 100755 (executable)
index 0000000..9148460
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+#content ul ul {
+    padding: 5px 15px;
+}
+
+.containing-element .ui-slider-switch { width: 8em }
+
+/*over write*/
+ul .ui-corner-all {
+    -moz-border-radius: 0 /*{global-radii-blocks}*/;
+    -webkit-border-radius: 0 /*{global-radii-blocks}*/;
+    border-radius: 0 /*{global-radii-blocks}*/;
+}
\ No newline at end of file
diff --git a/wearable/tct-behavior-tests/tests/Security/index.html b/wearable/tct-behavior-tests/tests/Security/index.html
new file mode 100755 (executable)
index 0000000..f6bb99c
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">Shared Media Directory</li>
+                <li><div data-role="button" id="openMediaBtn">If local user, open /home/{user}/apps_rw/share directory. If admin user, open /opt/usr/globalapps/share directory.</div></li>
+                <li><div data-role="button" id="createFileBtn">Create file</div></li>
+                <li data-role="list-divider">File List</li>
+                <ul data-role="listview" id="media" data-inset="true" hidden="true"></ul>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies that (1) this applicaton is running by non-root ID and, (2) it is allowed to read and write files in the shared media directory.</p>
+                <p>Test Step: </p>
+                <ol>
+                    <li>Get the "USER" info via cmdline "ps aux|awk 'NR==1;/tctbhtests\.TCTBehaviorTests/'" in console.</li>
+                    <li>Open shared media directory.</li>
+                    <li>Create and remove files in shared media directory.</li>
+                </ol>
+                <p>Expected Result: </p>
+                <ul>
+                    <li>The "USRER" info is NOT root user.</li>
+                    <li>There is <strong>no error message</strong> when click buttons under "Shared Media Directory".</li>
+                    <li>Only new created files can be removed; opened files in step 2 cannot.</li>
+                </ul>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Security/js/main.js b/wearable/tct-behavior-tests/tests/Security/js/main.js
new file mode 100755 (executable)
index 0000000..1aaaabd
--- /dev/null
@@ -0,0 +1,170 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xu, YuhanX <yuhanx.xu@intel.com>
+
+*/
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+var SHARED_MEDIA_DIR = "file://" + RESOURCE_DIR,
+    MEDIA_ID = "#media";
+var count = 0, mediaDir;
+var gFiles = [], createdId = [];
+
+$(document).ready(function(){
+    DisablePassButton();
+    $('#createFileBtn').addClass("ui-disabled");
+
+    function onError(err) {
+        alert("Error: " + err.message);
+    }
+
+    function makeFileList(files, selector) {
+        var str = "";
+
+        for (var i = 0; i < files.length; i++) {
+            if (files[i].isDirectory == false) {
+                str += '<li id="'
+                    + files[i].name
+                    + '"><a href="#"><h4>'
+                    + files[i].name
+                    + '</h4></a><a href="'
+                    + 'javascript:deleteFile('
+                    + count
+                    + ')" data-icon="delete" data-theme="c">'
+                    + '</a></li>';
+                gFiles[count++] = files[i];
+            }
+        }
+        if (str) {
+            $(selector).append(str).trigger("create").listview("refresh");
+        }
+
+        $('#createFileBtn').removeClass("ui-disabled");
+        $('#openMediaBtn').addClass("ui-disabled");
+    }
+
+    function openDirectory(str, selector) {
+        try {
+            tizen.filesystem.resolve(str, function(dir) {
+                dir.listFiles(function(files) {
+                    $(MEDIA_ID).show();
+                    makeFileList(files, selector);
+                    mediaDir = dir;
+                    alert("Open Success");
+                }, function(err) {
+                    alert("Open Fail: " + err.message);
+                });
+            }, onError, "rw");
+        } catch (exc) {
+            alert("tizen.filesystem.resolve(" + str + ") exc: " + exc.message);
+        }
+    }
+
+    function createFile(dir, selector) {
+        if (!dir) {
+            alert("Create File Error: The directory can not be opened");
+            return;
+        }
+
+        try {
+            var newFile, str = "";
+            var time = new Date().getTime();
+            newFile = dir.createFile("newFile" + time);
+            str += '<li id="'
+                + newFile.name
+                + '"><a href="#"><h4>'
+                + newFile.name
+                + '</h4></a><a href="'
+                + 'javascript:deleteFile('
+                + count
+                + ')" data-icon="delete" data-theme="c">'
+                + '</a></li>';
+            createdId.push(count);
+            gFiles[count++] = newFile;
+            if (str) {
+                $(selector).append(str).trigger("create").listview("refresh");
+            }
+        } catch (exc) {
+            alert("Create File Error: " + exc.message);
+        }
+    }
+
+    $("#openMediaBtn").on("click",function() {
+        if (!mediaDir) {
+            openDirectory(SHARED_MEDIA_DIR, MEDIA_ID);
+        }
+    });
+    $("#createFileBtn").on("click",function() {
+        createFile(mediaDir, MEDIA_ID);
+        EnablePassButton();
+    });
+});
+
+function deleteFile(id) {
+    var dir, selector, index;
+
+    if (id == null) {
+        return;
+    }
+    //Only delete the file by user created.
+    index = createdId.indexOf(id);
+    if (index == -1) {
+        return;
+    }
+
+    try {
+        dir = mediaDir;
+        selector = MEDIA_ID;
+        dir.deleteFile(gFiles[Number(id)].fullPath, function() {
+            //Delete the id in createdId array.
+            createdId.splice(index, 1);
+            $("#" + gFiles[Number(id)].name).remove();
+            $(selector).trigger("create").listview("refresh");
+        }, function (err) {
+            alert("Error: " + err.message);
+        });
+    } catch (exc) {
+        alert("Delete File Error: " + exc.message);
+    }
+}
+
+function backAppsHome() {
+    createdId.forEach(function(id) {
+        deleteFile(id);
+    });
+    window.close();
+}
diff --git a/wearable/tct-behavior-tests/tests/Stability/index.html b/wearable/tct-behavior-tests/tests/Stability/index.html
new file mode 100755 (executable)
index 0000000..e6a8fa1
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="page" id="main">
+            <div data-role="header" data-position="inline" data-tap-toggle="false">
+                <h1 id="main_page_title"></h1>
+            </div>
+            <div id="content">
+                <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                    <li data-role="list-divider" role="heading">Test half memory</li>
+                    <li id="test-half-memory">
+                        <a href="javascript:goToApp('res/test-half-memory.html')" data-transition="slide" style="">
+                            <h2>wrt-install-large-webapp</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Test hd image</li>
+                    <li id="test-hd-image">
+                        <a href="javascript:goToApp('res/test-hd-image.html')" data-transition="slide" style="">
+                            <h2>wrt-high-resolution-picture</h2>
+                        </a>
+                    </li>
+                    <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                    <li>
+                        <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                    </li>
+                </ul>
+            </div>
+            <div data-role="footer" data-position="inline" data-tap-toggle="false">
+            </div>
+            <div data-role="popup" id="popup_info" data-theme="a">
+                <div class="fontSize">
+                <p>Test Note: </p>
+                <p>Verifies the stability of the device.</p>
+                <p>Test Purpose: </p>
+                <p>Verifies the stability of the device. The device should not crash when install a large widget or display a high resolution picture.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the large widget installed successfully and high resolution picture displayed well.</p>
+                </div>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Stability/js/main.js b/wearable/tct-behavior-tests/tests/Stability/js/main.js
new file mode 100755 (executable)
index 0000000..212a512
--- /dev/null
@@ -0,0 +1,299 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+var allId=new Array('wrttest003',
+                    'wrttest001');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "Stability";
+var RESULT_FILE_NAME = "tct-behavior-child.sta.result.xml";
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('file://' + RESOURCE_DIR + '/Documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/Stability/js/tests.js b/wearable/tct-behavior-tests/tests/Stability/js/tests.js
new file mode 100755 (executable)
index 0000000..7087ca5
--- /dev/null
@@ -0,0 +1,250 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('test-half-memory');
+var RESOURCE_DIR;
+$.ajax({
+  url:"/tmp/TCT_CONFIG",
+  data:{},
+  async:false,
+  success:function(data){
+    var regEx = /DEVICE_SUITE_TARGET_30=(.+)/i;
+    var path = regEx.exec(data);
+    RESOURCE_DIR = path[1];
+  }
+});
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    if(jQuery.inArray(wgt_name, install_wgt) != -1){
+        $('#launch').hide();
+        $('#launch_divider').hide();
+    } else {
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+    }
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        if(jQuery.inArray(wgt_name, install_wgt) != -1){
+            $('#uninstall').removeClass("ui-disabled");
+        } else {
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'file://' + RESOURCE_DIR + '/Documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            if(checkInstalledPkg(package_id)) {
+                $('#install').addClass("ui-disabled");
+                if(jQuery.inArray(wgt_name, install_wgt) != -1){
+                    $('#uninstall').removeClass("ui-disabled");
+                } else {
+                    $('#launch').removeClass("ui-disabled");
+                }
+            }
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+            onprogress: function(packageId, percentage)
+            {
+                console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+                $.mobile.showPageLoadingMsg();
+            },
+            oncomplete: function(packageId)
+            {
+                console.log("Uninstallation(" + packageId + ") Complete");
+                $('#launch').addClass("ui-disabled");
+                $('#uninstall').addClass("ui-disabled");
+                EnablePassButton();
+            }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "file://" + RESOURCE_DIR + "/Documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/Stability/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.html b/wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.html
new file mode 100755 (executable)
index 0000000..b0eafbd
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-half-memory">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-half-memory"/>
+                <input type="hidden" id="app_id"  value="wrttest003.testhalfmemory"/>
+                <input type="hidden" id="package_id" value="wrttest003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider" id="launch_divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the free storage is more than half memory.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Change the "test-half-memory.wgt".</li>
+              <ol type="a">
+                <li>Open the folder of "test-half-memory"(suppose you have the "test-half-memory.wgt" or you can find it in the behavior rpm, unzip the wgt as "test-half-memory").</li>
+                <li>Push a file that the size is larger than half memory into the folder and rename the file as "zipzip.png".</li>
+                <li>Use the command :"zip -rq ../test-half-memory.wgt *" to create a "test-half-memory.wgt".</li>
+                <li>Push the created widget to device with the command: admin user: "sdb push 'path'/test-half-memory.wgt /opt/usr/globalapps/tctbhtests/res/wgt/tests/Stability/res/", local user: "sdb push 'path'/test-half-memory.wgt /home/{user}/apps_rw/tctbhtests/res/wgt/tests/Stability/res/".</li>
+              </ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the installation is successful.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt b/wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt
new file mode 100755 (executable)
index 0000000..37d4c9e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Stability/res/test-half-memory.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.html b/wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.html
new file mode 100755 (executable)
index 0000000..e0a5e37
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="test-hd-image">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="test-hd-image"/>
+                <input type="hidden" id="app_id"  value="wrttest001.testhdimage"/>
+                <input type="hidden" id="package_id" value="wrttest001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the image display normally.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt b/wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt
new file mode 100755 (executable)
index 0000000..77e32dd
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Stability/res/test-hd-image.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/SystemInfo/NOTICE b/wearable/tct-behavior-tests/tests/SystemInfo/NOTICE
new file mode 100755 (executable)
index 0000000..28f0df2
--- /dev/null
@@ -0,0 +1,5 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Copyright (c) 2012 Intel Corporation.
+Except as noted, this software is licensed under Apache License, Version 2 or BSD-3-Clause License.
+Please, see the LICENSE.Apache-2.0 file for Apache License, Version 2 terms and conditions
+or the LICENSE.BSD-3 file for BSD-3-Clause License.
diff --git a/wearable/tct-behavior-tests/tests/SystemInfo/index.html b/wearable/tct-behavior-tests/tests/SystemInfo/index.html
new file mode 100755 (executable)
index 0000000..4028379
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="errors" style="display:none">
+                <li data-role="list-divider">Errors</li>
+            </ul>
+            <ul data-role="listview" id="info-list1"></ul>
+            <ul data-role="listview" id="info-list2"></ul>
+            <ul data-role="listview" id="info-list3"></ul>
+            <ul data-role="listview" id="info-list4"></ul>
+            <ul data-role="listview" id="info-list5"></ul>
+            <ul data-role="listview" id="info-list6"></ul>
+            <ul data-role="listview" id="info-list7"></ul>
+            <ul data-role="listview" id="info-list8"></ul>
+            <ul data-role="listview" id="info-list9"></ul>
+            <ul data-role="listview" id="info-list10"></ul>
+            <ul data-role="listview" id="info-list11"></ul>
+            <ul data-role="listview" id="info-list12"></ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div style="font-size:85%">
+                <p>Check if a SystemInfo reflects current device status</p><br>
+                <p>1. Check WiFi Network Status if it reflects the current device Wi-Fi status</p>
+                <p>2. Change device WiFi status and Check WiFi Network Status again</p>
+                <p>3. Check Device Orientation Status if it displays correct value that fits the current device position</p>
+                <p>4. Rotate the device per 90 degrees and check Device Orientation shows the correct status</p>
+                <p>5. Check Battery Status</p>
+                <p>6. Check the Brightness if it changes the current device brightness</p>
+                <p>7. Check the Resolution</p>
+                <p>8. Check the Dots per inch</p>
+                <p>9. Check the Physical size</p>
+                <p>10. Check the Storage Status</p>
+                <p>11. Check the CPU Status</p>
+                <p>12. Check the Build Status</p>
+                <p>13. Check the Locale Status</p>
+                <p>14. Check the Network Status</p>
+                <p>15. Check the Cellular Network Status</p>
+                <p>16. Check the Sim Status</p>
+                <p>17. Check the Peripheral Status</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/SystemInfo/js/main.js b/wearable/tct-behavior-tests/tests/SystemInfo/js/main.js
new file mode 100755 (executable)
index 0000000..1a06b67
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Choi, Jongheon <j-h.choi@samsung.com>
+
+*/
+var gInfo, handlers;
+var init = function () {
+    var property;
+    for (property in handlers) {
+        if (handlers.hasOwnProperty(property)) {
+            try {
+                tizen.systeminfo.addPropertyValueChangeListener(property, handlers[property]);
+            } catch (error) {
+                reportError("Set property " + property + " listener error: " + error);
+            }
+        }
+    }
+
+    getPropertyValue();
+};
+
+function getPropertyValue() {
+    var property;
+    for (property in handlers) {
+        if (handlers.hasOwnProperty(property)) {
+            try {
+                tizen.systeminfo.getPropertyValue(property, handlers[property]);
+            } catch (error) {
+                handlers[property]({});
+                reportError("Get " + property + " property value error: " + error);
+            }
+        }
+    }
+}
+
+function onError(e) {
+    alert("Error: " + e.message);
+}
+
+function make1lineListItem(value) {
+    return '<li>' + value + '</li>';
+}
+
+function makeDividerListItem(value) {
+    return '<li data-role="list-divider">' + value + '</li>';
+}
+
+function reportError(message) {
+    $("#errors").show().append(
+        $("<li/>").text(message).css("font-size", "small").css("color", "red")
+    ).trigger("create").listview("refresh");
+}
+
+function onWifiNetworkSuccess(wifi) {
+    gInfo = makeDividerListItem("WIFI_NETWORK Status")
+            + make1lineListItem("Stauts : " + wifi.status)
+            + make1lineListItem("SSID : " + wifi.ssid)
+            + make1lineListItem("IPAddress : " + wifi.ipAddress)
+            + make1lineListItem("IPv6Address : " + wifi.ipv6Address)
+            + make1lineListItem("SignalStrength : " + wifi.signalStrength);
+    $("#info-list1").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDeviceOrientationSuccess(orientation) {
+    gInfo = makeDividerListItem("DEVICE_ORIENTATION Status")
+            + make1lineListItem("Status : " + orientation.status)
+            + make1lineListItem("AutoRotation : " + (orientation.isAutoRotation == true ? "Yes" : "No"));
+    $("#info-list2").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onDisplaySuccess(display) {
+    gInfo = makeDividerListItem("DISPLAY Status")
+            + make1lineListItem("Brightness : " + (display.brightness * 100) + "%")
+            + makeDividerListItem("Resolution")
+            + make1lineListItem("Width : " + display.resolutionWidth)
+            + make1lineListItem("Height : " + display.resolutionHeight)
+            + makeDividerListItem("Dots per inch")
+            + make1lineListItem("Horizontal : " + display.dotsPerInchWidth)
+            + make1lineListItem("Vertical : " + display.dotsPerInchHeight)
+            + makeDividerListItem("Physical size")
+            + make1lineListItem("Width : " + display.physicalWidth)
+            + make1lineListItem("Height : " + display.physicalHeight);
+    $("#info-list4").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBatterySuccess(battery) {
+    gInfo = makeDividerListItem("BATTERY Status")
+            + make1lineListItem("Level : " + (battery.level * 100) + "%")
+            + make1lineListItem("Charging : " + (battery.isCharging == true ? "Yes" : "No"));
+    $("#info-list3").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onStorageSuccess(storages) {
+    gInfo = makeDividerListItem("STORAGE Status")
+          + make1lineListItem("Storage : " + storages.units.length);
+    for (var i = 0; i < storages.units.length; i++) {
+        gInfo += makeDividerListItem("Type : " + storages.units[i].type)
+               + make1lineListItem("Capacity : " + Math.floor(storages.units[i].capacity / 1000000) + " MB")
+               + make1lineListItem("Available capacity : " + Math.floor(storages.units[i].availableCapacity / 1000000) + " MB")
+               + make1lineListItem("Removable : " + (storages.units[i].isRemovable == true ? "Yes" : "No"));
+    }
+    $("#info-list5").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCpuSuccess(cpu) {
+    gInfo = makeDividerListItem("CPU Status")
+            + make1lineListItem("Load : " + cpu.load);
+    $("#info-list6").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onBuildSuccess(build) {
+    gInfo = makeDividerListItem("BUILD Status")
+            + make1lineListItem("Model : " + build.model)
+            + make1lineListItem("Manufacturer : " + build.manufacturer)
+            + make1lineListItem("BuildVersion : " + build.buildVersion);
+    $("#info-list7").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onLocaleSuccess(locale) {
+    gInfo = makeDividerListItem("LOCALE Status")
+            + make1lineListItem("Language : " + locale.language)
+            + make1lineListItem("Country : " + locale.country);
+    $("#info-list8").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onNetworkSuccess(network) {
+    gInfo = makeDividerListItem("NETWORK Status")
+            + make1lineListItem("NetworkType : " + network.networkType);
+    $("#info-list9").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onCellularNetworkSuccess(cellular) {
+    gInfo = makeDividerListItem("CELLULAR_NETWORK Status")
+            + make1lineListItem("Status : " + cellular.status)
+            + make1lineListItem("Apn : " + cellular.apn)
+            + make1lineListItem("IPAddress : " + cellular.ipAddress)
+            + make1lineListItem("IPv6Address : " + cellular.ipv6Address)
+            + make1lineListItem("Mcc : " + cellular.mcc)
+            + make1lineListItem("Mnc : " + cellular.mnc)
+            + make1lineListItem("CellId : " + cellular.cellId)
+            + make1lineListItem("Lac : " + cellular.lac)
+            + make1lineListItem("IsRoaming : " + cellular.isRoaming)
+            + make1lineListItem("IsFlightMode : " + cellular.isFlightMode)
+            + make1lineListItem("IMEI : " + cellular.imei);
+    $("#info-list10").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onSimSuccess(sim) {
+    gInfo = makeDividerListItem("SIM Status")
+            + make1lineListItem("State : " + sim.state)
+            + make1lineListItem("OperatorName : " + sim.operatorName)
+            + make1lineListItem("Msisdn : " + sim.msisdn)
+            + make1lineListItem("Iccid : " + sim.iccid)
+            + make1lineListItem("Mcc : " + sim.mcc)
+            + make1lineListItem("Mnc : " + sim.mnc)
+            + make1lineListItem("Msin : " + sim.msin)
+            + make1lineListItem("Spn : " + sim.spn);
+    $("#info-list11").html(gInfo).trigger("create").listview("refresh");
+}
+
+function onPeripheralSuccess(peripheral) {
+    gInfo = makeDividerListItem("PERIPHERAL Status")
+            + make1lineListItem("IsVideoOutputOn : " + peripheral.isVideoOutputOn);
+    $("#info-list12").html(gInfo).trigger("create").listview("refresh");
+}
+
+handlers = {
+    "WIFI_NETWORK": onWifiNetworkSuccess,
+    "DEVICE_ORIENTATION": onDeviceOrientationSuccess,
+    "DISPLAY": onDisplaySuccess,
+    "BATTERY": onBatterySuccess,
+    "STORAGE": onStorageSuccess,
+    "CPU": onCpuSuccess,
+    "BUILD": onBuildSuccess,
+    "LOCALE": onLocaleSuccess,
+    "NETWORK": onNetworkSuccess,
+    "CELLULAR_NETWORK": onCellularNetworkSuccess,
+    "SIM": onSimSuccess,
+    "PERIPHERAL": onPeripheralSuccess
+};
+
+$(document).bind("pageinit", init);
diff --git a/wearable/tct-behavior-tests/tests/Template/index.html b/wearable/tct-behavior-tests/tests/Template/index.html
new file mode 100755 (executable)
index 0000000..e11ae1a
--- /dev/null
@@ -0,0 +1,56 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+    </head>
+
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+
+        <div id="content">
+        Hello World !
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+            <p>Test Info</p>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Touch/css/style.css b/wearable/tct-behavior-tests/tests/Touch/css/style.css
new file mode 100755 (executable)
index 0000000..389d4c9
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+*/
+
+
+.scroll_area {
+    background: #eee;
+    border: 1px solid #ccc;
+    height: 100px;
+    font-weight: bold;
+    text-shadow: 0 1px 0 #fff;
+    margin-bottom: 10px;
+    background-image: -webkit-gradient(linear,left top,left bottom,from( #fff ),to( #f1f1f1 ));
+    background-image: -webkit-linear-gradient( #fff,#f1f1f1 );
+    background-image: -moz-linear-gradient( #fff,#f1f1f1 );
+    background-image: -ms-linear-gradient( #fff,#f1f1f1 );
+    background-image: -o-linear-gradient( #fff,#f1f1f1 );
+    background-image: linear-gradient( #fff,#f1f1f1 );
+}
+
diff --git a/wearable/tct-behavior-tests/tests/Touch/img/btn_down.png b/wearable/tct-behavior-tests/tests/Touch/img/btn_down.png
new file mode 100755 (executable)
index 0000000..981d624
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Touch/img/btn_down.png differ
diff --git a/wearable/tct-behavior-tests/tests/Touch/img/btn_up.png b/wearable/tct-behavior-tests/tests/Touch/img/btn_up.png
new file mode 100755 (executable)
index 0000000..bc5f8b2
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Touch/img/btn_up.png differ
diff --git a/wearable/tct-behavior-tests/tests/Touch/img/scroll.png b/wearable/tct-behavior-tests/tests/Touch/img/scroll.png
new file mode 100755 (executable)
index 0000000..dc80c78
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/Touch/img/scroll.png differ
diff --git a/wearable/tct-behavior-tests/tests/Touch/index.html b/wearable/tct-behavior-tests/tests/Touch/index.html
new file mode 100755 (executable)
index 0000000..58e32a2
--- /dev/null
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="css/style.css"/>
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script> document.ontouchmove = function(e){ e.preventDefault(); }</script>
+        <style>
+            .target {
+                left: 80px;
+                top: 80px;
+                position: absolute;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div id="scrollArea" class="scroll_area">
+                <div id="scrollTarget" class="target"><img id="imageScroll" src="img/scroll.png" height="40" width="40" /></div>
+            </div>
+            <p class="ui-li-desc">* Drag this red button in above area.</p>
+            <p id="errormessage" class="ui-li-desc"></p>
+            <table id="tabletouch" style="padding:1px">
+                <tr>
+                    <td><img id="image1" src="img/btn_up.png" height="40" width="40" style="margin-right: 25px;" /></td>
+                    <td><img id="image2" src="img/btn_up.png" height="40" width="40" style="margin-left: 50px; margin-right: 50px;" /></td>
+                    <td><img id="image3" src="img/btn_up.png" height="40" width="40" style="margin-left: 25px;" /></td>
+                </tr>
+            </table>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the device supports single touch, two fingers touch and three fingers touch(if it is supported) by clicking the blue buttons, and supports move touch by dragging the red button.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if all the tips "one button touched, two buttons touched at one time, three buttons touched at one time(if it is supported)" show and the red button can be dragged.</p>
+            </div>
+        </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Touch/js/main.js b/wearable/tct-behavior-tests/tests/Touch/js/main.js
new file mode 100755 (executable)
index 0000000..6d3f4a6
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Xin, liu <xinx.liu@intel.com>
+
+*/
+
+jQuery(document).ready(function() {
+    try {
+        DisablePassButton();
+        var scrollTarget = $("#scrollTarget")[0];
+        var multitouch_count = tizen.systeminfo.getCapability("http://tizen.org/feature/multi_point_touch.point_count");
+
+        var resultMessage =["one button touched", "two buttons touched at one time", "three buttons touched at one time"];
+        var current_touchCnt = 0;
+        var touchCnt_goal = 3;
+
+        function touchstartFunction(obj){
+           obj.src = "img/btn_down.png"; 
+           current_touchCnt++;
+           $("#testresult").html("Touch info: " + resultMessage[current_touchCnt-1]);
+            if(current_touchCnt >= touchCnt_goal){
+                EnablePassButton();
+            }
+        }
+
+        function touchendFunction(obj){
+            obj.src = "img/btn_up.png";
+            current_touchCnt--;
+        }
+
+        $("#image1").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image2").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+        $("#image3").bind("touchstart", function(event){
+            touchstartFunction(this);
+        });
+
+        $("#image1").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image2").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+        $("#image3").bind("touchend", function(event){
+            touchendFunction(this);
+        });
+
+        if(multitouch_count == 2){
+            step3 = true;
+            touchCnt_goal = 2;
+            $("#image3").remove();
+        }
+
+        //touchmove event
+        document.getElementById("scrollTarget").addEventListener("touchmove",  function (event){
+            var image = $("#imageScroll")[0], changedTouches = event.changedTouches,
+                scrollArea = $("#scrollArea")[0];
+            image.src = "img/btn_down.png";
+
+            if (changedTouches.item(0).clientX <= getLeft(scrollArea) + 20) {
+                scrollTarget.style.left = getLeft(scrollArea) + "px";
+            } else if (changedTouches.item(0).clientX >= getLeft(scrollArea) + 270) {
+                scrollTarget.style.left = getLeft(scrollArea) + 250 + "px";
+            } else {
+                scrollTarget.style.left = changedTouches.item(0).clientX - 20 + "px";
+            }
+
+            if (changedTouches.item(0).clientY <= getTop(scrollArea) + 20) {
+                scrollTarget.style.top = getTop(scrollArea) + "px";
+            } else if (changedTouches.item(0).clientY >= getTop(scrollArea) + 85) {
+                scrollTarget.style.top = getTop(scrollArea) + 62 + "px";
+            } else {
+                scrollTarget.style.top = changedTouches.item(0).clientY - 20 + "px";
+            }
+        }, false);
+
+        //touchend event
+        document.getElementById("scrollTarget").addEventListener('touchcancel',  function (event){
+            var image = $("#imageScroll")[0];
+            image.src = "img/scroll.png";
+        }, false);
+
+        document.getElementById("scrollTarget").addEventListener('touchend',  function (event){
+            var image = $("#imageScroll")[0];
+            if(image.src.toString().indexOf("scroll.png") == -1){
+              $("#errormessage").html("touchcancel event can not be fired");
+            }
+        }, false);
+    } catch (err) {
+        jQuery("#testresult").html("Html Console:" + err.message);
+    }
+
+    function getTop(e){
+        var offset=e.offsetTop;
+        if(e.offsetParent!=null) offset+=getTop(e.offsetParent);
+        return offset;
+    }
+
+    function getLeft(e){
+        var offset=e.offsetLeft;
+        if(e.offsetParent!=null) offset+=getLeft(e.offsetParent);
+        return offset;
+    }
+});
diff --git a/wearable/tct-behavior-tests/tests/UserAgentString/index.html b/wearable/tct-behavior-tests/tests/UserAgentString/index.html
new file mode 100755 (executable)
index 0000000..2cfd49d
--- /dev/null
@@ -0,0 +1,131 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Li, Hao <haox.li@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script>
+            $(document).ready(function () {
+                jQuery("#user-agent-string").text(navigator.userAgent);
+                var agent_string = navigator.userAgent;
+                var tizen_platform_ver = agent_string.substring(agent_string.indexOf("(") + 1, agent_string.indexOf(")"));
+                var khtml = agent_string.substring(agent_string.lastIndexOf("(") + 1, agent_string.lastIndexOf(")"));
+                agent_string = agent_string.replace("(" + tizen_platform_ver + ")", "");
+                agent_string = agent_string.replace("(" + khtml + ")", "");
+                agent_string = agent_string.replace("  ", " ");
+                agent_string = agent_string.replace("  ", " ");
+                var platform_ver_array = tizen_platform_ver.split(";");
+
+                if (platform_ver_array.length == 3) { // tizen
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text(platform_ver_array[2]);
+                } else if (platform_ver_array.length == 2) { // chrome
+                    jQuery("#user-platform-ver").text(platform_ver_array[1]);
+                    jQuery("#user-model-string").text("N/A");
+                } else if (platform_ver_array.length == 4) { //firefox
+                    jQuery("#user-platform-ver").text(platform_ver_array[2]);
+                    jQuery("#user-model-string").text("N/A");
+                }
+
+                var agent_string_array = agent_string.split(" ");
+                if (agent_string_array.length == 6) { //chrome
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/") + 1));
+                    jQuery("#user-app-name").text(agent_string_array[4].substring(0, agent_string_array[4].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[4].substr(agent_string_array[4].indexOf("\/") + 1));
+                } else if (agent_string_array.length == 5) { //tizen
+                    jQuery("#user-apple-webkit-ver").text(agent_string_array[1].substr(agent_string_array[1].indexOf("\/") + 1));
+                    jQuery("#user-app-name").text(agent_string_array[2].substring(0, agent_string_array[2].indexOf("\/")));
+                    jQuery("#user-app-ver").text(agent_string_array[2].substr(agent_string_array[2].indexOf("\/") + 1));
+                }
+            });
+        </script>
+        <style type="text/css">
+            .d{
+                border: 1px solid #000;
+                width:100%;
+                height:280px;
+            }
+            .d li{
+                margin: 10px 5px;
+
+            }
+            #user-agent-string {
+                list-style : none;
+            }
+            .tips{
+                color: red;
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div class="d">
+                <ul>
+                    <li>User-Agent:</li>
+                    <li id="user-agent-string"><span class="tips">Failed to get user agent string</span></li>
+                    <li>PLATFORM_VER: <span id="user-platform-ver"></span></li>
+                    <li>MODEL: <span id="user-model-string"></span></li>
+                    <li>APPLE_WEBKIT_VER: <span id="user-apple-webkit-ver"></span></li>
+                    <li>APP_NAME: <span id="user-app-name"></span></li>
+                    <li>APP_VER: <span id="user-app-ver"></span></li>
+                </ul>
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies the user agent string follow correct format.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if the user agent string reported by the Web View follow this format:</p>
+            <p>Mozilla/5.0 (Linux; Tizen PLATFORM_VER; MODEL) AppleWebKit/APPLE_WEBKIT_VER (KHTML, like Gecko) APP_NAME/APP_VER Mobile Safari/APPLE_WEBKIT_VER</p>
+            <ul>
+                <li>The value of the PLATFORM_VER string MUST be the platform version of the device.</li>
+                <li>The value of the MODEL string SHOULD be the same as the name of the device.</li>
+                <li>The value of the APPLE_WEBKIT_VER string MUST be "537.3".</li>
+                <li>The value of the APP_NAME string SHOULD be the same as the name of the application.</li>
+                <li>The value of the APP_VER string SHOULD be the same as the version of the application.</li>
+                <li>Device implementations MAY omit the word “Mobile” from the user agent string.</li>
+            </ul>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Vibration/css/style.css b/wearable/tct-behavior-tests/tests/Vibration/css/style.css
new file mode 100755 (executable)
index 0000000..a4fdc9d
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+.ui-slider .ui-btn-inner {
+    padding: 6px 0 0 0 !important;
+    font-size:.9em;
+}
+div.ui-slider {
+   margin: 0 2% 10px 0px;
+   width: 100%;
+}
+
+.containing-element {
+    padding-top: 20px;
+}
+
+.containing-element .ui-slider-switch { width: 100% }
+
+.containing-element .ui-controlgroup-controls { width: 100% }
+
+.ui-radio { width: 50% }
diff --git a/wearable/tct-behavior-tests/tests/Vibration/index.html b/wearable/tct-behavior-tests/tests/Vibration/index.html
new file mode 100755 (executable)
index 0000000..3f231fd
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Lin, Wanming <wanmingx.lin@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <link rel="stylesheet" type="text/css" href="css/style.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+        <script src="js/main.js"></script>
+        <script src="js/slider.tooltip.js"></script>
+        <style>
+            .vibration {
+                text-align: left
+            }
+            .opt {
+                text-align: left
+            }
+        </style>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div data-role="content">
+            <div class="containing-element">
+                <label for="slider-1" class="vibration">Vibration Time(s)</label>
+                <input type="range" name="slider-1" id="slider-1" data-highlight="true" min="0.50" max="3" step="0.10" value="1" data-show-value="true" class="hideButton">
+                <label for="slider-1" class="vibration">Vibration Periods(s)</label>
+                <input type="range" name="slider-2" id="slider-2" data-highlight="true" min="0.10" max="2" step="0.10" value="0.50" data-show-value="true" class="hideButton">
+                <label for="slider-1" class="vibration">Vibration Number</label>
+                <input type="range" name="slider-3" id="slider-3" data-highlight="true" min="1" max="20" value="2" data-show-value="true" class="hideButton">
+                <p><a href="javascript:startVibration()" id="start" data-role="button" class="opt">Start Vibration</a></p>
+                <a href="javascript:stopVibration()" id="stop" data-role="button" class="opt">Stop Vibration</a>
+            </div>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the vibration is able to adjust vibration time from 500ms to 3000ms, vibration period from 100ms to 2000ms, and vibration number from 1 to 100. E.g, if vibration time is 1000ms, vibration period is 2000ms and vibration number is 3, then the test device vibrates 3 times in 6 seconds, and vibrates 1 second a time.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if the vibration functions work well.</p>
+            </div>
+        </div>
+    </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Vibration/js/COPYING b/wearable/tct-behavior-tests/tests/Vibration/js/COPYING
new file mode 100755 (executable)
index 0000000..6d827b0
--- /dev/null
@@ -0,0 +1,20 @@
+The slider.tooltip.js comes from
+https://github.com/jquery/jquery-mobile/tree/1.3-stable
+with some modifications.
+
+         this._currentValue = newValue;
++        var ID = this.element[0].id;
++        if (ID == "slider-1") {
++            vibration_time = Number($("#slider-1").val())*1000;
++        } else if (ID == "slider-2") {
++            vibration_periods = Number($("#slider-2").val())*1000;
++        } else if (ID == "slider-3") {
++            vibration_number = $("#slider-3").val();
++        }
+
+jQuery Mobile v@VERSION
+http://jquerymobile.com
+
+Copyright 2010, 2013 jQuery Foundation, Inc. and other contributors
+Released under the MIT license.
+http://jquery.org/license
diff --git a/wearable/tct-behavior-tests/tests/Vibration/js/main.js b/wearable/tct-behavior-tests/tests/Vibration/js/main.js
new file mode 100755 (executable)
index 0000000..5fa753a
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Liu, Xin <xinx.liu@intel.com>
+
+*/
+
+var vibration_time, vibration_periods, vibration_number;
+
+jQuery(document).ready(function() {
+    DisablePassButton();
+    // style setting
+    $(':jqmData(role=content)').css("text-align", "center");
+    $(':jqmData(role=content)').find(':jqmData(role=button) > span:first-child').css('padding', '15px 30px');
+
+    vibration_time = Number($("#slider-1").val())*1000;
+    vibration_periods = Number($("#slider-2").val())*1000;
+    vibration_number = $("#slider-3").val();
+});
+
+function startVibration() {
+    $("#start").addClass("ui-disabled");
+    var time_value=(Number(vibration_time)+Number(vibration_periods)) * Number(vibration_number);
+    setTimeout(function(){
+        $("#start").removeClass("ui-disabled");}, time_value);
+    var pattern = [];
+    for(var i=0; i<2*vibration_number ;i++){
+       if(i%2==0){
+           pattern.push(vibration_time-0);
+       } else {
+           pattern.push(vibration_periods-0);
+       }
+    }
+    navigator.vibrate(pattern);
+    EnablePassButton();
+}
+
+function stopVibration() {
+    navigator.vibrate(0);
+    $("#start").removeClass("ui-disabled");
+}
diff --git a/wearable/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js b/wearable/tct-behavior-tests/tests/Vibration/js/slider.tooltip.js
new file mode 100755 (executable)
index 0000000..5b48bd6
--- /dev/null
@@ -0,0 +1,129 @@
+//>>excludeStart("jqmBuildExclude", pragmas.jqmBuildExclude);
+//>>description: Slider tooltip extension
+//>>label: Slidertooltip
+//>>group: Forms
+//>>css.theme: ../css/themes/default/jquery.mobile.theme.css
+//>>css.structure: ../css/structure/jquery.mobile.slider.tooltip.css
+
+//define( [ "jquery", "./slider" ], function( $ ) {
+//>>excludeEnd("jqmBuildExclude");
+(function( $, undefined ) {
+
+$.widget( "mobile.slider", $.mobile.slider, {
+       options: {
+               popupEnabled: false,
+               showValue: false
+       },
+
+       _create: function() {
+               var o = this.options,
+                       popup = $( "<div></div>", {
+                               class: "ui-slider-popup ui-shadow ui-corner-all ui-body-" + ( o.theme ? o.theme : $.mobile.getInheritedTheme( this.element, "c" ) )
+                       });
+
+               this._super();
+
+               $.extend( this, {
+                       _currentValue: null,
+                       _popup: popup,
+                       _popupVisible: false,
+                       _handleText: this.handle.find( ".ui-btn-text" )
+               });
+
+               this.slider.before( popup );
+               popup.hide();
+
+               this._on( this.handle, { "vmousedown" : "_showPopup" } );
+               this._on( this.slider.add( $.mobile.document ), { "vmouseup" : "_hidePopup" } );
+               this._refresh();
+       },
+
+       // position the popup centered 5px above the handle
+       _positionPopup: function() {
+               var dstOffset = this.handle.offset();
+               this._popup.offset( {
+                       left: dstOffset.left + ( this.handle.width() - this._popup.width() ) / 2,
+                       top: dstOffset.top - this._popup.outerHeight() - 5
+               });
+       },
+
+       _setOption: function( key, value ) {
+               this._super( key, value );
+
+               if ( key === "showValue" ) {
+                       if ( value ) {
+                               this._handleText.html( this._value() ).show();
+                       } else {
+                               this._handleText.hide();
+                       }
+               }
+       },
+
+       // show value on the handle and in popup
+       refresh: function() {
+               this._super.apply( this, arguments );
+
+               // necessary because slider's _create() calls refresh(), and that lands
+               // here before our own _create() has even run
+               if ( !this._popup ) {
+                       return;
+               }
+
+               this._refresh();
+       },
+
+       _refresh: function() {
+               var o = this.options, newValue;
+
+               if ( o.popupEnabled ) {
+                       // remove the title attribute from the handle (which is
+                       // responsible for the annoying tooltip); NB we have
+                       // to do it here as the jqm slider sets it every time
+                       // the slider's value changes :(
+                       this.handle.removeAttr( 'title' );
+               }
+
+               newValue = this._value();
+               if ( newValue === this._currentValue ) {
+                       return;
+               }
+               this._currentValue = newValue;
+
+        var ID = this.element[0].id;
+        if (ID == "slider-1") {
+            vibration_time = Number($("#slider-1").val())*1000;
+        } else if (ID == "slider-2") {
+            vibration_periods = Number($("#slider-2").val())*1000;
+        } else if (ID == "slider-3") {
+            vibration_number = $("#slider-3").val();
+        }
+
+               if ( o.popupEnabled ) {
+                       this._positionPopup();
+                       this._popup.html( newValue );
+               }
+
+               if ( o.showValue ) {
+                       this._handleText.html( newValue );
+               }
+       },
+
+       _showPopup: function() {
+               if ( this.options.popupEnabled && !this._popupVisible ) {
+                       this._handleText.hide();
+                       this._popup.show();
+                       this._positionPopup();
+                       this._popupVisible = true;
+               }
+       },
+
+       _hidePopup: function() {
+               if ( this.options.popupEnabled && this._popupVisible ) {
+                       this._handleText.show();
+                       this._popup.hide();
+                       this._popupVisible = false;
+               }
+       }
+});
+
+})( jQuery );
diff --git a/wearable/tct-behavior-tests/tests/Viewport/index.html b/wearable/tct-behavior-tests/tests/Viewport/index.html
new file mode 100755 (executable)
index 0000000..eda68f3
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+    <head>
+        <meta charset="utf-8" />
+        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width">
+        <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+        <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+        <script src="../../js/thirdparty/jquery.js"></script>
+        <script src="../../js/thirdparty/jquery.mobile.js"></script>
+        <script src="../../js/tests.js"></script>
+    </head>
+    <body bgcolor="FFFFFF" >
+        <div data-role="header">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview">
+                <li data-role="list-divider">device-height & device-width</li>
+                <li><div><a data-role="button" href="test/device.html" data-ajax="false">Test device-height and device-width</a></div></li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">enable scale & disable scale</li>
+                <li><div><a data-role="button" href="test/user-scalable.html" data-ajax="false">Test enable scale and disable scale</a></div></li>
+            </ul>
+            <ul data-role="listview">
+                <li data-role="list-divider">maximum-scale & minimum-scale</li>
+                <li><div><a data-role="button" href="test/scale.html" data-ajax="false">Test max scale and min scale</a></div></li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline">
+        </div>
+        <div data-role="popup" id="popup_info">
+            <div class="fontSize">
+                <p>Test Purpose: </p>
+                <p>Verifies the functionalities of viewport. Tests the functionality of getting screen height and width, enabling or disabling screen saleable to allow or disallow zoom in/out screen, sliding the screen by figure.</p>
+                <p>Expected Result: </p>
+                <p>Test passes if all the check points function well.</p>
+            </div>
+        </div>
+    </body>
+</body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Viewport/test/device.html b/wearable/tct-behavior-tests/tests/Viewport/test/device.html
new file mode 100755 (executable)
index 0000000..9608207
--- /dev/null
@@ -0,0 +1,90 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 100%;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+           var div = document.createElement("div");
+          var pixel_ratio;
+           var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1600,2][320,1]];       
+           
+          if (deviceCapability=="MOBILE"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+        
+          
+            var height = property.resolutionHeight / pixel_ratio;
+            var width = property.resolutionWidth / pixel_ratio;
+            div.style.background = "green";
+            div.style.height = height + "px";
+            div.style.width = width + "px";
+            div.innerHTML = "<p>device-height : " + height + "</p><br>" +
+                            "<p>device-width : " + width + "</p><br>" +
+                            "<p>Test passes if the screen is full of green background</p><br>" +
+                            "<p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p>";
+            document.body.appendChild(div);
+
+        });
+    </script>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Viewport/test/scale.html b/wearable/tct-behavior-tests/tests/Viewport/test/scale.html
new file mode 100755 (executable)
index 0000000..bdf53be
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, height=device-height, minimum-scale=1.0, maximum-scale=2.0" />
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: red;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 160px;
+        }
+    </style>
+  </head>
+  <body>
+    <script type="text/javascript">
+        tizen.systeminfo.getPropertyValue("DISPLAY", function(property) {
+
+          var deviceCapability = tizen.systeminfo.getCapability("http://tizen.org/feature/profile");
+          var ratioTable=[[480,1.5],[540,1.5],[720,2],[1080,3],[800,1],[1600,2][320,1]];       
+           
+          if (deviceCapability=="MOBILE"){
+               for (i = 0; i < ratioTable.length; i++) {
+                       if(property.resolutionWidth==ratioTable[i][0]){
+                               pixel_ratio=ratioTable[i][1];
+                       }
+               }
+          }else{
+               pixel_ratio=1;
+          }
+            var maximum_scale = 2;
+            var div = document.createElement("div");
+            var screenHight = property.resolutionHeight / pixel_ratio;
+            var screenWidth = property.resolutionWidth / pixel_ratio;
+            var divWidth = screenWidth / maximum_scale;
+            div.style.background = "green";
+            div.innerHTML = "<div style='background-color:green;float:left;width:" + divWidth + "px;height:"+screenHight+"px'><p>1.Zoom to minimum, the screen background is about half of green and half of yellow</p><br><p>2.Zoom to maximum, the screen is full of green; then slide to right, you can see yellow background</p><br><p><button onclick='javascript: window.history.go(-1)' class='button'>Complete Test</button></p></div>" + "<div style='background-color: yellow;float:left;width:"+divWidth+"px;height:" + screenHight + "px'></div>";
+            document.body.appendChild(div);
+        });
+    </script>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/Viewport/test/user-scalable.html b/wearable/tct-behavior-tests/tests/Viewport/test/user-scalable.html
new file mode 100755 (executable)
index 0000000..9b99395
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Tan, Shiyou <shiyoux.tan@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=500, height=500, user-scalable=no">
+    <title>Viewport</title>
+    <style>
+        body {
+            padding: 0px;
+            margin: 0px;
+            background-color: green;
+        }
+        div {
+            background-color: green;
+            width: 500px;
+            height: 500px;
+        }
+        p {
+            margin: 0px 10px;
+        }
+        .button {
+            background: #eee;
+            border: 1px solid #ccc;
+            border-radius: 5px;
+            font-weight: bold;
+            font-size: 15px;
+            padding: 8px 2px;
+            width: 270px;
+        }
+    </style>
+    <script type="text/javascript">
+        function changeUerscalable(flag) {
+            if (flag == "enable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=yes";
+            } else if (flag == "disable") {
+                document.getElementsByName("viewport")[0].content = "width=500, height=500, user-scalable=no";
+            }
+        }
+    </script>
+  </head>
+  <body>
+    <div>
+      <p>EnableScale: you can scale the screen</p><br>
+      <p>DisableScale: you can not scale the screen</p><br>
+      <p>
+        <button onmousedown="javascript: window.history.back();" class="button">Complete Test</button><br>
+        <button onmousedown="changeUerscalable('enable')" class="button">Enable Scale</button><br>
+        <button onmousedown="changeUerscalable('disable')" class="button">Disable Scale</button><br>
+      </p>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/index.html b/wearable/tct-behavior-tests/tests/WRTSupport/index.html
new file mode 100755 (executable)
index 0000000..6226543
--- /dev/null
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test localization</li>
+                <li id="other-localization">
+                    <a href="javascript:goToApp('res/other-localization.html')" data-transition="slide" style="">
+                        <h2>other-localization</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test unload event</li>
+                <li id="lifecycle-unload-event">
+                    <a href="javascript:goToApp('res/lifecycle-unload-event.html')" data-transition="slide" style="">
+                        <h2>lifecycle-unload-event</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test uri schemes</li>
+                <li id="other-uri-schemes-mailto-groups">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-groups.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-groups</h2>
+                    </a>
+                </li>
+                <li id="other-uri-schemes-mailto-tel">
+                    <a href="javascript:goToApp('res/other-uri-schemes-mailto-tel.html')" data-transition="slide" style="">
+                        <h2>other-uri-schemes-mailto-tel</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test debug web inspector</li>
+                <li id="debug-web-inspector-ubuntu">
+                    <a href="javascript:goToApp('res/debug-web-inspector-ubuntu.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-ubuntu</h2>
+                    </a>
+                </li>
+                <li id="debug-web-inspector-windows7">
+                    <a href="javascript:goToApp('res/debug-web-inspector-windows7.html')" data-transition="slide" style="">
+                        <h2>debug-web-inspector-windows7</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test access multiple</li>
+                <li id="url-access-multi-all-ports">
+                    <a href="javascript:goToApp('res/url-access-multi-all-ports.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-all-ports</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https">
+                    <a href="javascript:goToApp('res/url-access-multi-https.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-all">
+                    <a href="javascript:goToApp('res/url-access-multi-https-all.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-all</h2>
+                    </a>
+                </li>
+                <li id="url-access-multi-https-subdomains">
+                    <a href="javascript:goToApp('res/url-access-multi-https-subdomains.html')" data-transition="slide" style="">
+                        <h2>url-access-multi-https-subdomains</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test security permission and encryption</li>
+                <li id="security-policy">
+                    <a href="javascript:goToApp('res/security-policy.html')" data-transition="slide" style="">
+                        <h2>security-policy</h2>
+                    </a>
+                </li>
+                <li id="security-permission">
+                    <a href="javascript:goToApp('res/security-permission.html')" data-transition="slide" style="">
+                        <h2>security-permission</h2>
+                    </a>
+                </li>
+                <li id="protection-encryption-check">
+                    <a href="javascript:goToApp('res/protection-encryption-check.html')" data-transition="slide" style="">
+                        <h2>protection-encryption-check</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of uri scheme support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT MUST support at least the following URI schemes: "sms://", "mmsto://", "mailto://", "&lt;mailto:&gt;" and support localization funxtionality.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/js/main.js b/wearable/tct-behavior-tests/tests/WRTSupport/js/main.js
new file mode 100755 (executable)
index 0000000..e46bc49
--- /dev/null
@@ -0,0 +1,301 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+*/
+var allId=new Array('wrt3lue021',
+                    'wrt3olo022',
+                    'wrt3ous027',
+                    'wrt3owa028',
+                    'wrt5pec002',
+                    'wrt5pec120',
+                    'wrtsche005',
+                    'wrtsche007',
+                    'wrturla003',
+                    'wrturla004',
+                    'wrturla005',
+                    'wrturla006',
+                    'wrt5pec119');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTSupport";
+var RESULT_FILE_NAME = "tct-behavior-child.wrts.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/js/tests.js b/wearable/tct-behavior-tests/tests/WRTSupport/js/tests.js
new file mode 100755 (executable)
index 0000000..c256e8d
--- /dev/null
@@ -0,0 +1,229 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+var install_wgt = new Array('debug-web-inspector-windows7','debug-web-inspector-ubuntu');
+
+$(document).ready(function(){
+    updateFooterButton();
+
+    wgt_name = $("#wgt_name").val();
+    if(jQuery.inArray(wgt_name, install_wgt) == -1) {
+        DisablePassButton();
+
+        app_id = $("#app_id").val();
+        package_id = $("#package_id").val();
+
+        $("#install").bind("vclick", function() {
+            install();
+        });
+        $("#launch").bind("vclick", function() {
+            launch(app_id);
+            $('#uninstall').removeClass("ui-disabled");
+        });
+        $("#uninstall").bind("vclick", function() {
+            uninstall(package_id);
+        });
+        try {
+            tizen.package.setPackageInfoEventListener(packageEventCallback);
+        } catch (e) {
+            alert("Exception: " + e.message);
+        }
+
+        packagePre(wgt_name);
+        $('#uninstall').addClass("ui-disabled");
+        $('#launch').addClass("ui-disabled");
+
+        if(checkInstalledPkg(package_id)) {
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#launch').addClass("ui-disabled");
+            $('#uninstall').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                documentsDir.copyTo(
+                    files[i].fullPath,
+                    "documents/"+wgt_name+".wgt",
+                    true,
+                    function() {
+                        console.log(wgt_name+" Precondition Success!");
+                    });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTSupport/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-ubuntu.html
new file mode 100755 (executable)
index 0000000..aa9453e
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-ubuntu">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-ubuntu"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(ubuntu) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish".</li>
+                                    <li>Connect test device to PC. Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(ubuntu).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/debug-web-inspector-windows7.html
new file mode 100755 (executable)
index 0000000..145c813
--- /dev/null
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="debug-web-inspector-windows7">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="debug-web-inspector-windows7"/>
+                <input type="hidden" id="app_id"  value="nothing"/>
+                <input type="hidden" id="package_id" value="nothing"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Pre-condition</li>
+                <li>
+                    <div id="c">
+                        <div id="pre-div">
+                            <div id="o">
+                                <ul>
+                                    <li>Make sure SDK is installed to PC(windows) and it is launched;</li>
+                                    <li>Turn on device USB debugging mode.</li>
+                                </ul>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Test step</li>
+                <li>
+                    <div id="d">
+                        <div id="text-div">
+                            <div id="p">
+                                <ol>
+                                    <li>Open SDK, File-&gt;New-&gt;Tizen Web Project. Click "Basic", then input Project name, e.g. test-debugging, then click "finish". Connect test device to PC.</li>
+                                    <li>Open Window-&gt;Show View -&gt; Connection Explorer, the device information appears in the "Connection Explorer" of SDK.</li>
+                                    <li>Right-click on the folder "test-debugging" -&gt; Debug as -&gt; 1 Tizen Web Application.</li>
+                                </ol>
+                            </div>
+                        </div>
+                    </div>
+                </li>
+                <li data-role="list-divider">Expected Result</li>
+                <li>
+                    <div id="e">
+                        <div id="result-div">
+                            <div id="q">
+                                Test passes if "web inspector" interface for widget debugging is displayed on the screen.
+                            </div>
+                        </div>
+                    </div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Purpose: </p>
+            <p>Verifies 'web inspector' supported on PC(windows).</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.html
new file mode 100755 (executable)
index 0000000..afdde03
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="lifecycle-unload-event">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="lifecycle-unload-event"/>
+                <input type="hidden" id="app_id"  value="wrt3lue021.LifecycleUnloadEvent"/>
+                <input type="hidden" id="package_id" value="wrt3lue021"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a popup with the content of "unload event success!".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt
new file mode 100755 (executable)
index 0000000..2253054
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/lifecycle-unload-event.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.html
new file mode 100755 (executable)
index 0000000..19eff4d
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-localization">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-localization"/>
+                <input type="hidden" id="app_id"  value="wrt3olo022.OtherLocalization"/>
+                <input type="hidden" id="package_id" value="wrt3olo022"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the local language is English (check the installed widget's name on the device screen, it should be "english-ol").</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if there is a dialog with "default description." popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt
new file mode 100755 (executable)
index 0000000..8575be4
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-localization.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.html
new file mode 100755 (executable)
index 0000000..8e66cf5
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-groups">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-groups"/>
+                <input type="hidden" id="app_id"  value="wrtsche005.otherurischemesmailtogroups"/>
+                <input type="hidden" id="package_id" value="wrtsche005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The email with its groups account is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt
new file mode 100755 (executable)
index 0000000..e72dd64
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-groups.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.html
new file mode 100755 (executable)
index 0000000..3a0c2fc
--- /dev/null
@@ -0,0 +1,75 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="other-uri-schemes-mailto-tel">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="other-uri-schemes-mailto-tel"/>
+                <input type="hidden" id="app_id"  value="wrtsche007.otherurischemesmailtotel"/>
+                <input type="hidden" id="package_id" value="wrtsche007"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>The telephone call is displayed on screen.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt
new file mode 100755 (executable)
index 0000000..5ffa641
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/other-uri-schemes-mailto-tel.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.html
new file mode 100755 (executable)
index 0000000..3883a67
--- /dev/null
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="protection-encryption-check">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="protection-encryption-check"/>
+                <input type="hidden" id="app_id"  value="wrt5pec002.protectionencryptioncheck"/>
+                <input type="hidden" id="package_id" value="wrt5pec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Confirm the widget application is encrypted.The resources(js, CSS, HTML files) of protection-encryption-check application is encrypted.<br>
+               For example: use the command: admin user: "vi /opt/usr/globalapps/wrt5pec002/res/wgt/index.html", local user: "vi /home/{user}/apps_rw/wrt5pec002/res/wgt/index.html" to show the content of "index.html" in terminal, the content of "index.html" is encrypted.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if "js code ok" and a image which same as this widget icon are displayed.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt
new file mode 100755 (executable)
index 0000000..cfc9ef0
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/protection-encryption-check.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.html
new file mode 100755 (executable)
index 0000000..467dd3e
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-permission">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-permission"/>
+                <input type="hidden" id="app_id"  value="wrt5pec120.securitypermission"/>
+                <input type="hidden" id="package_id" value="wrt5pec120"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt
new file mode 100755 (executable)
index 0000000..d7874ff
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-permission.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.html
new file mode 100755 (executable)
index 0000000..c255b42
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="security-policy">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="security-policy"/>
+                <input type="hidden" id="app_id"  value="wrt5pec119.securitypolicy"/>
+                <input type="hidden" id="package_id" value="wrt5pec119"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen show "PASS".</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt
new file mode 100755 (executable)
index 0000000..3d95451
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/security-policy.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.html
new file mode 100755 (executable)
index 0000000..7ec1d4d
--- /dev/null
@@ -0,0 +1,78 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-all-ports">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-all-ports"/>
+                <input type="hidden" id="app_id"  value="wrturla003.UrlAccessMultiAll"/>
+                <input type="hidden" id="package_id" value="wrturla003"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "http://www.baidu.com". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "http://www.163.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt
new file mode 100755 (executable)
index 0000000..71246f5
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-all-ports.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.html
new file mode 100755 (executable)
index 0000000..f685b82
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-all">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-all"/>
+                <input type="hidden" id="app_id"  value="wrturla005.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla005"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt
new file mode 100755 (executable)
index 0000000..9445918
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-all.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.html
new file mode 100755 (executable)
index 0000000..e60e080
--- /dev/null
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https-subdomains">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https-subdomains"/>
+                <input type="hidden" id="app_id"  value="wrturla006.UrlAccessMultiSubdomains"/>
+                <input type="hidden" id="package_id" value="wrturla006"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://developer.tizen.org/zh-hans/forums/general-support?langredirect=1". It is unable to open in this widget.</li>
+              <li>Click the link "https://accounts.google.com/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com/SignUp?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount". It opens in the widget successfully.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt
new file mode 100755 (executable)
index 0000000..01f41f0
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https-subdomains.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.html
new file mode 100755 (executable)
index 0000000..84ad72e
--- /dev/null
@@ -0,0 +1,77 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+Authors:
+       SRC-NJ Ran Wang <ran22.wang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="url-access-multi-https">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="url-access-multi-https"/>
+                <input type="hidden" id="app_id"  value="wrturla004.UrlAccessMulti"/>
+                <input type="hidden" id="package_id" value="wrturla004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Make sure the device can connect to the Internet.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <ul>
+              <li>Click the link "https://developer.tizen.org/". It opens in the widget successfully.</li>
+              <li>Click the link "https://accounts.google.com". It is not opened in this widget but in the device browser.</li>
+            </ul>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt
new file mode 100755 (executable)
index 0000000..6b8e628
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTSupport/res/url-access-multi-https.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/index.html b/wearable/tct-behavior-tests/tests/WRTUI/index.html
new file mode 100755 (executable)
index 0000000..170f3c9
--- /dev/null
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../css/main.css" />
+    <script src="../../js/thirdparty/jquery.js"></script>
+    <script src="../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../js/tests.js"></script>
+    <script src="js/main.js"></script>
+  </head>
+  <body bgcolor="FFFFFF" >
+    <div data-role="page" id="main">
+        <div data-role="header" data-position="inline" data-tap-toggle="false">
+            <h1 id="main_page_title"></h1>
+        </div>
+        <div id="content">
+            <ul data-role="listview" id="cspList" data-divider-theme="b" data-inset="true">
+                <li data-role="list-divider" role="heading">Test multiple browsing</li>
+                <li id="multiple-browsing-context">
+                    <a href="javascript:goToApp('res/multiple-browsing-context.html')" data-transition="slide" style="">
+                        <h2>multiple-browsing-context</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-allow-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="csp-mode-not-navigation-access">
+                    <a href="javascript:goToApp('res/csp-mode-not-navigation-access.html')" data-transition="slide" style="">
+                        <h2>csp-mode-not-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li id="not-csp-not-allow-navigation-access">
+                    <a href="javascript:goToApp('res/not-csp-not-allow-navigation-access.html')" data-transition="slide" style="">
+                        <h2>not-csp-not-allow-navigation-access</h2>
+                    </a>
+                </li>
+                <li data-role="list-divider" role="heading">Test rotation</li>
+                <li id="view-mode-maximized-rotation">
+                    <a href="javascript:goToApp('res/view-mode-maximized-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-maximized-rotation</h2>
+                    </a>
+                </li>
+                <li id="view-mode-fullscreen-rotation">
+                    <a href="javascript:goToApp('res/view-mode-fullscreen-rotation.html')" data-transition="slide" style="">
+                        <h2>view-mode-fullscreen-rotation</h2>
+                    </a>
+                </li>
+            <!--    <li id="application-rotation-sensor-enable">
+                    <a href="javascript:goToApp('res/application-rotation-sensor-enable.html')" data-transition="slide" style="">
+                        <h2>application-rotation-sensor-enable</h2>
+                    </a>
+                </li>  -->
+                <li data-role="list-divider" role="heading">Clean all the installed packages</li>
+                <li>
+                    <div data-role="button" id="wgtClean" class="wgtButton">Clean all test applications</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Note: </p>
+            <p>Verifies the functionality of view mode and multiple browsing context support.</p>
+            <p>Test Purpose: </p>
+            <p>Verifies WRT support two view modes: “maximized” and “fullscreen” of W3C 'view-mode' Media Feature.</p>
+            <p>Expected Result: </p>
+            <p>Test passes if all sub-tests pass.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/js/main.js b/wearable/tct-behavior-tests/tests/WRTUI/js/main.js
new file mode 100755 (executable)
index 0000000..57984c1
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+        Mengli, Zhang <mengli.zhang@samsung.com>
+
+*/
+var allId=new Array('wrt4ars001',
+                    'wrt4vmm015',
+                    'wrt4mbc004',
+                    'wrt4vmf013',
+                    'wrtspec004',
+                    'wrtspec002',
+                    'Odsz8ZWo5A',
+                    '2DJ6sfQ1mh');
+
+var installedId = new Array();
+var resultXML, tests;
+var MOUDLE_NAME = "WRTUI";
+var RESULT_FILE_NAME = "tct-behavior-child.wrtui.result.xml";
+
+$(document).delegate("#main", "pageinit", function() {
+    DisablePassButton();
+    $("#wgtClean").bind("vclick", function() {
+        showTotalBar();
+    });
+});
+
+function showTotalBar(){
+    $.each(allId,function(key,val){
+        try {
+            var packageInfo = tizen.package.getPackageInfo(val);
+            console.log("Current Package ID : " + packageInfo.id);
+        } catch (e) {
+            //alert("Exception: " + e.message);
+        }
+        if(packageInfo != "" && packageInfo != undefined){
+            installedId.push(val);
+        }
+    });
+    checkInstalledPackage();
+}
+
+function checkInstalledPackage(){
+    if(installedId.length > 0){
+        setTimeout(function() {
+            uninstall(installedId[0]);
+        }, 1000);
+    } else {
+        $.mobile.hidePageLoadingMsg();
+        alert("All widgets is uninstalled!");
+        if (checkIfAllPackagePass()) {
+            EnablePassButton();
+        }
+    }
+}
+
+function checkIfAllPackagePass() {
+    var result = true;
+
+    tests.each(function() {
+        if ($(this).attr('result') != "PASS") {
+            result = false;
+        }
+    });
+    return result;
+}
+
+function uninstall(val) {
+    installedId.shift();
+    var totalBar = Math.floor((allId.length - installedId.length - 1) / allId.length * 100);
+
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            alert("The package " + packageId + " is uninstalled");
+            checkInstalledPackage();
+        }
+    }
+
+    var onError = function (err) {
+        $.mobile.hidePageLoadingMsg();
+        if (err.name != "UnknownError") {
+            alert("Error occured on uninstallation : " + err.name);
+        }
+    }
+
+    try {
+        tizen.package.uninstall(val, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function goToApp(path) {
+    window.open(path);
+}
+
+function recordResultToXML(test_name, result){
+    tests.each(
+        function() {
+            if($(this).attr('id') == test_name){
+                $(this).attr('result', result);
+            }
+        }
+    );
+}
+
+function initTests() {
+    loadTests();
+    window.addEventListener('message', function(e) {
+        console.log(e.data);
+        var jsonData = eval("(" + e.data + ")");
+        if(jsonData.length > 0){
+            if(jsonData[0].testname != "" && jsonData[0].result != ""){
+                recordResultToXML(jsonData[0].testname, jsonData[0].result);
+                updateAppDecoration();
+                exportTmpResult();
+            }
+        }
+    }, false);
+}
+
+function exportTmpResult() {
+    writeFile(RESULT_FILE_NAME, (new XMLSerializer()).serializeToString(resultXML), false);
+}
+
+function writeFile(filename, content, need_exit) {
+    successCallback = function(fs) {
+        fs.write(content);
+        fs.close();
+        if (need_exit)
+            exitTest();
+    };
+
+
+    onsuccess = function(dir) {
+        dir.deleteFile(dir.fullPath + "/" + filename);
+
+        file = dir.createFile(filename);
+        file.openStream("rw", successCallback, onerror, "UTF-8");
+    };
+
+    onerror = function(error) {
+        alert("Export result fail: " + error);
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        alert("Write file fail: " + err.message);
+    }
+}
+
+function loadTests() {
+    $.ajax({
+        async : false,
+        type : "GET",
+        url : "../../subtestresult.xml",
+        dataType : "xml",
+        success : function(xml){
+            resultXML = xml;
+            $(xml).find("set").each(
+                function(){
+                    if($(this).attr("name") == MOUDLE_NAME){
+                        tests = $(this).find("testcase");
+                    }
+                }
+            );
+            loadTmpResult();
+        }
+    });
+}
+
+function loadTmpResult(){
+    successCallback = function(files) {
+        for(var i = 0; i < files.length; i++){
+            if (files[i].name == RESULT_FILE_NAME) {
+                if (confirm("Continue last test?")) {
+                    files[i].readAsText(
+                        function(xml){
+                            _mergeResult($(xml).find("set"));
+                            updateAppDecoration();
+                        }, function(err){
+                            console.log("read tmp result error: " + err.message);
+                        }, "UTF-8"
+                    );
+                    return;
+                }
+                else break;
+            }
+        }
+    };
+
+    onsuccess = function(dir) {
+        dir.listFiles(successCallback, onerror);
+    };
+
+    onerror = function(error) {
+        console.log(error);
+        updateAppDecoration();
+    };
+
+    try {
+        tizen.filesystem.resolve('documents', onsuccess, onerror, "rw");
+    } catch (err) {
+        console.log("Load tmp result fail: " + err.message);
+        updateAppDecoration();
+    }
+}
+
+function _mergeResult(tmpResult) {
+    tests.each(
+        function(index, item) {
+            tmpResult.each(
+                function(order1, tmpItem1){
+                    if($(tmpItem1).attr("name") == MOUDLE_NAME){
+                        $(tmpItem1).find("testcase").each(
+                            function(order, tmpItem){
+                                if ($(item).attr("id") === $(tmpItem).attr("id")) {
+                                    $(item).attr("result", $(tmpItem).attr("result"));
+                                }
+                            }
+                        );
+                    }
+                }
+            );
+        }
+    );
+}
+
+function updateAppDecoration() {
+    $(resultXML).find("set").each(
+        function(){
+            if($(this).attr("name") == MOUDLE_NAME){
+                $(this).find("testcase").each(
+                    function() {
+                        if($(this).attr("result") == "PASS"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","green");
+                        }else if($(this).attr("result") == "FAIL"){
+                            $("#"+$(this).attr("id")).find("h2").css("color","red");
+                        }
+                    }
+                );
+            }
+        }
+    );
+    $("#cspList").listview( "refresh" );
+}
+
+function backAppsHome() {
+    window.close();
+}
+
+function successBackAppsHome() {
+    window.close();
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\""+getAppName()+"\",\"result\":\""+res+"\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    successBackAppsHome();
+}
+
+window.addEventListener('load', initTests, false);
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/js/tests.js b/wearable/tct-behavior-tests/tests/WRTUI/js/tests.js
new file mode 100755 (executable)
index 0000000..c1bccb5
--- /dev/null
@@ -0,0 +1,226 @@
+/*
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.sandbox
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+*/
+
+var installUrl;
+var wgt_name;
+var app_id;
+var package_id;
+
+$(document).ready(function(){
+    updateFooterButton();
+    DisablePassButton();
+
+    wgt_name = $("#wgt_name").val();
+    app_id = $("#app_id").val();
+    package_id = $("#package_id").val();
+
+    $("#install").bind("vclick", function() {
+        install();
+    });
+    $("#launch").bind("vclick", function() {
+        launch(app_id);
+        $('#uninstall').removeClass("ui-disabled");
+    });
+    $("#uninstall").bind("vclick", function() {
+        uninstall(package_id);
+    });
+    try {
+        tizen.package.setPackageInfoEventListener(packageEventCallback);
+    } catch (e) {
+        alert("Exception: " + e.message);
+    }
+
+    packagePre(wgt_name);
+    $('#uninstall').addClass("ui-disabled");
+    $('#launch').addClass("ui-disabled");
+
+    if(checkInstalledPkg(package_id)) {
+        $('#install').addClass("ui-disabled");
+        $('#launch').removeClass("ui-disabled");
+    }
+});
+
+var packageEventCallback = {
+    oninstalled: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is installed");
+    },
+    onupdated: function(packageInfo) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageInfo.name + " is updated");
+    },
+    onuninstalled: function(packageId) {
+        $.mobile.hidePageLoadingMsg();
+        alert("The package " + packageId + " is uninstalled");
+    }
+}
+
+function fileURI(wgt_name) {
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+                var Url1 = files[i].toURI();
+                installUrl = Url1.replace("file:///", "/");
+                //install();
+            }
+        }
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'documents',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function install() {
+    var onInstallationSuccess = {
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On installation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Installation(" + packageId + ") Complete");
+            $('#install').addClass("ui-disabled");
+            $('#launch').removeClass("ui-disabled");
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on installation : " + err.message);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.install(installUrl, onInstallationSuccess, onError);
+    } catch(e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function uninstall(package_id) {
+    var onUninstallationSuccess = {
+
+        onprogress: function(packageId, percentage)
+        {
+            console.log("On uninstallation(" + packageId + "): progress(" + percentage + ")");
+            $.mobile.showPageLoadingMsg();
+        },
+        oncomplete: function(packageId)
+        {
+            console.log("Uninstallation(" + packageId + ") Complete");
+            $('#uninstall').addClass("ui-disabled");
+            $('#launch').addClass("ui-disabled");
+            EnablePassButton();
+        }
+    }
+
+    var onError = function (err) {
+        alert("Error occured on uninstallation : " + err.name);
+        $.mobile.hidePageLoadingMsg();
+    }
+
+    try {
+        tizen.package.uninstall(package_id, onUninstallationSuccess, onError);
+    } catch (e) {
+        alert("Exception: " + e.name);
+    }
+}
+
+function launch(app_id) {
+    function onSuccess() {
+        console.log(id + " launched successfully!");
+    }
+
+    function onError(err) {
+        alert("launch failed : " + err.message);
+    }
+
+    try {
+        tizen.application.launch(app_id, onSuccess, onError);
+    } catch (exc) {
+        alert("launch exc:" + exc.message);
+    }
+}
+
+function packagePre(wgt_name) {
+    
+    var documentsDir;
+    function onsuccess(files) {
+        for (var i = 0; i < files.length; i++)
+        {
+            if(files[i].name == wgt_name+".wgt")
+            {
+        documentsDir.copyTo(
+            files[i].fullPath,
+            "documents/"+wgt_name+".wgt",
+            true,
+            function() {
+                console.log(wgt_name+" Precondition Success!");
+            });
+            }
+        }
+        fileURI(wgt_name);
+    }
+
+    function onerror(error) {
+        alert("The error " + error.message + " occurred when listing the files in the selected folder");
+    }
+
+    tizen.filesystem.resolve(
+        'wgt-package/tests/WRTUI/res/',
+        function(dir){
+            documentsDir = dir;
+            dir.listFiles(onsuccess, onerror);
+        }, function(e) {
+            alert("Error" + e.message);
+        }, "r"
+    );
+}
+
+function reportResult(res) {
+    var jsonStr="[{\"testname\":\"" + wgt_name + "\",\"result\":\"" + res + "\"}]";
+    window.opener.postMessage(jsonStr, '*');
+    backAppsHome();
+}
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html b/wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.html
new file mode 100755 (executable)
index 0000000..d3aaba1
--- /dev/null
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="application-rotation-sensor-enable">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="application-rotation-sensor-enable"/>
+                <input type="hidden" id="app_id"  value="wrt4ars001.applicationrotationsensorenable"/>
+                <input type="hidden" id="package_id" value="wrt4ars001"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>Turn on the auto-rotate screen. (Maybe this option can be found in the "setting" menu of the device).</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen orientation is changed and a "PASS" popup on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt
new file mode 100755 (executable)
index 0000000..b3d80bd
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/application-rotation-sensor-enable.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..69fbb72
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec004.cspmodeallownavigationaccess"/>
+                <input type="hidden" id="package_id" value="wrtspec004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..d80435f
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-allow-navigation-access.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.html
new file mode 100755 (executable)
index 0000000..bde9fc4
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="csp-mode-not-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="csp-mode-not-navigation-access"/>
+                <input type="hidden" id="app_id"  value="wrtspec002.notNavigationAccess"/>
+                <input type="hidden" id="package_id" value="wrtspec002"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..03addee
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/csp-mode-not-navigation-access.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html b/wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.html
new file mode 100755 (executable)
index 0000000..42f11d3
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="multiple-browsing-context">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="multiple-browsing-context"/>
+                <input type="hidden" id="app_id"  value="wrt4mbc004.multiplebrowsingcontext"/>
+                <input type="hidden" id="package_id" value="wrt4mbc004"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a new page with "index2.html" can be opened when click the "open window" button on the page.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt
new file mode 100755 (executable)
index 0000000..6a0cab5
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/multiple-browsing-context.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..3f9f2ec
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="Odsz8ZWo5A.notCspAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="Odsz8ZWo5A"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if a blank page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..173a17e
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-allow-navigation-access.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.html
new file mode 100755 (executable)
index 0000000..a1aeed6
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Samsung Electronics Co., Ltd.
+
+Licensed under the Apache License, Version 2.0 (the License);
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+Authors:
+        Mengli, Zhang <mengli.zhang@samsung.com>
+-->
+
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="not-csp-not-allow-navigation-access">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="not-csp-not-allow-navigation-access"/>
+                <input type="hidden" id="app_id"  value="2DJ6sfQ1mh.notCspNotAllowNavigationAccess"/>
+                <input type="hidden" id="package_id" value="2DJ6sfQ1mh"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Pre-condition: </p>
+            <p>The device must been inserted SIM card.</p>
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the Google page dispalys on the screen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt
new file mode 100755 (executable)
index 0000000..d1baa06
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/not-csp-not-allow-navigation-access.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.html
new file mode 100755 (executable)
index 0000000..d440631
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-fullscreen-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-fullscreen-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmf013.viewmodefullscreenrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmf013"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and fullscreen.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt
new file mode 100755 (executable)
index 0000000..200bd83
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-fullscreen-rotation.wgt differ
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.html
new file mode 100755 (executable)
index 0000000..775fe82
--- /dev/null
@@ -0,0 +1,82 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2013 Intel Corporation.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of works must retain the original copyright notice, this list
+  of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the original copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of Intel Corporation nor the names of its contributors
+  may be used to endorse or promote products derived from this work without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Authors:
+        Feng, GangX <gangx.feng@intel.com>
+
+-->
+<html>
+  <head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, width=device-width" />
+    <link rel="stylesheet" type="text/css" href="../../../css/jquery.mobile.css" />
+    <link rel="stylesheet" type="text/css" href="../../../css/main.css" />
+    <script src="../../../js/thirdparty/jquery.js"></script>
+    <script src="../../../js/thirdparty/jquery.mobile.js"></script>
+    <script src="../../../js/tests.js"></script>
+    <script src="../js/tests.js"></script>
+  </head>
+  <body>
+    <div data-role="page" id="view-mode-maximized-rotation">
+        <div id="content">
+            <div>
+                <input type="hidden" id="wgt_name" value="view-mode-maximized-rotation"/>
+                <input type="hidden" id="app_id"  value="wrt4vmm015.viewmodemaximizedrotation"/>
+                <input type="hidden" id="package_id" value="wrt4vmm015"/>
+            </div>
+            <ul data-role="listview">
+                <li data-role="list-divider">Package Install</li>
+                <li>
+                    <div data-role="button" id="install" class="wgtButton">Install</div>
+                </li>
+                <li data-role="list-divider">Package Launch</li>
+                <li>
+                    <div data-role="button" id="launch" class="wgtButton">Launch</div>
+                </li>
+                <li data-role="list-divider">Package Uninstall</li>
+                <li>
+                    <div data-role="button" id="uninstall" class="wgtButton">Uninstall</div>
+                </li>
+            </ul>
+        </div>
+        <div data-role="footer" data-position="inline" data-tap-toggle="false">
+        </div>
+        <div data-role="popup" id="popup_info" data-theme="a">
+          <font class="fontSize">
+            <p>Test Step: </p>
+            <ol>
+              <li>Click the "Install" button to install the widget.</li>
+              <li>Click the "Launch" button to launch the widget.</li>
+              <li>Click the "Uninstall" button to uninstall the widget.</li>
+            </ol>
+            <p>Expected Result: </p>
+            <p>Test passes if the screen is landscape and maximized.</p>
+          </font>
+        </div>
+    </div>
+  </body>
+</html>
diff --git a/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt
new file mode 100755 (executable)
index 0000000..86e84f7
Binary files /dev/null and b/wearable/tct-behavior-tests/tests/WRTUI/res/view-mode-maximized-rotation.wgt differ